历史上的今天
今天是:2024年08月27日(星期二)
2020年08月27日 | 单片机数字电流表电压表源码与电路图
2020-08-27 来源:51hei
单片机数字电流表电压表电路原理图如下:

单片机源程序如下:
#include #include #include "1602.h" #include "delay.h" #include "i2c.h" char dis0[16]; //打印数组初始化 unsigned long time_20ms=0; //定时器计数 float Volt=0.0; //检测电压 float Acurrent=0.0; //检测电流 void Init_Timer0(void); //函数声明 void uartSendStr(unsigned char *s,unsigned char length); void UART_Init(void); void uartSendByte(unsigned char dat); void main (void) { unsigned char midvolt,midcur; //电压电流中间变量值 Init_Timer0(); //定时器0初始化 UART_Init(); //串口初始化 LCD_Init(); //初始化液晶 DelayMs(20); //延时有助于稳定 LCD_Clear(); sprintf(dis0,"My Designer!! ");//打印 LCD_Write_String(0,0,dis0);//显示第一行 sprintf(dis0,"V:%3.2fv A:%3.2fA",Volt,Acurrent);//打印电压电流值 LCD_Write_String(0,1,dis0);//显示第二行 uartSendStr("reday ok!!",10); while (1) //主循环 { midvolt=ReadADC(1); //读取AD检测到的 电压值 DelayMs(50); //延时有助于稳定 midcur=ReadADC(0); //读取电流转化后的电压值 Volt=(float)midvolt*5.13/255*3; //计算出电压 *3表示分压值 Acurrent=(float)midcur*5.13/255; //计算出电流 if(Acurrent>2.62) //如果电流转换后的电压值超过2.62 { Acurrent=(Acurrent-2.62)/0.185; //电流模块 电压转换计算 } else { Acurrent=0; } sprintf(dis0,"V:%3.2fv A:%3.2fA",Volt,Acurrent);//打印电压电流值 LCD_Write_String(0,1,dis0);//显示第二行 // uartSendStr(dis0,16); //串口上报 // uartSendStr("n",1); //换行 DelayMs(200); //延时有助于稳定 } } void Init_Timer0(void) { TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响 TH0=(65536-20000)/256; //重新赋值 20ms TL0=(65536-20000)%256; EA=1; //总中断打开 ET0=1; //定时器中断打开 TR0=1; //定时器开关打开 } void Timer0_isr(void) interrupt 1 { TH0=(65536-20000)/256; //重新赋值 20ms TL0=(65536-20000)%256; time_20ms++; } void UART_Init(void) { SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收 TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装 TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz TL1 = TH1; TR1 = 1; // TR1: timer 1 打开 EA = 1; //打开总中断 ES = 1; //打开串口中断 } void uartSendByte(unsigned char dat) { unsigned char time_out; time_out=0x00; SBUF = dat; //将数据放入SBUF中 while((!TI)&&(time_out<100)) //检测是否发送出去 {time_out++;DelayUs2x(10);} //未发送出去 进行短暂延时 TI = 0; //清除ti标志 } void uartSendStr(unsigned char *s,unsigned char length) { unsigned char NUM; NUM=0x00; while(NUM uartSendByte(*s); //放松单字节数据 s++; //指针++ NUM++; //下一个++ } } void UART_SER (void) interrupt 4 //串行中断服务程序 { if(RI) //判断是接收中断产生 { RI=0; //标志位清零 } if(TI) //如果是发送标志位,清零 TI=0; } ……………………
史海拾趣
|
三相正弦变频电源也是一个不小的设计了,单独的模块化制作比较少见,基本上都是一个整体的设计或者是一个产品 整理了一些不同的实现方案,供大家参考~~~~~~~~~ … 查看全部问答> |
|
一款5-7WLED驱动芯联的IC 就是不知道批量了会怎么样;有谁也有这种成熟的方案;批量的话精度都以可以接受的; 方便的话和我交流下哦, 现在这款IC适合宽电压,340MA;功率因素低了一点;才0.5; 电路里头就是一个pai型电路(2个电解一个电感) ...… 查看全部问答> |
|
windows mobile操作系统下的输入法是否也可以在windows CE下使用 请教手机的操作系统是windows mobile操作系统,mobile5.0/6.0下的键盘输入法以及软键盘输入法是否也可以在windows CE5.0下使用。分没有了,只剩这些了啊! … 查看全部问答> |
|
1. WinCE上的ActiveSync使用的是哪一个function client driver? webcast上一篇课程说使用的是RNDIS,但是我的开发板上注册表HKLM/drivers/usb/functiondrivers/DefaultClientDriver的值为serial_class。一旦该值改变,则activesync不可使用。这是否 ...… 查看全部问答> |
|
要求得到设备的PID/VID等信息.. 小弟毫无LINUX经验..不知道怎么下手...哪位高人能给个思路? 是不是应该先用VC写一个找找灵感...?但是LINUX下有API用么!!!!急啊!!再线等..… 查看全部问答> |
|
装SQL CE 2.0时总是出现"the compu ter that you specified is not configured for NTFS.you 装SQL CE 2.0时总是出现\"the compu ter that you specified is not configured for NTFS.you do not have to set permissions\",整整一天了都没法解决,请高手指点迷津!谢谢… 查看全部问答> |
|
我是一名java 程序员,在一家作java的公司做了三个月,但是我发现我对嵌入式软件开发很感兴趣,于是就辞职离开了公司,这其中还有一个原因就是公司要和我签三年的合同,我不想一下做这么长时间,而且这家公司是日企违约金非常的高,感觉自己就被绑 ...… 查看全部问答> |




