目录
一、主要功能
二、硬件资源
三、程序编程
四、实现现象
一、主要功能
基于51单片机,设计一个简易电压表:
采用3位LED数码管显示被测电压值:基本测量范围是 0-5V;测量误差为士0.02V。开机或复位后,在 LED 最右端显示“P”,以提示系统正常:正常运行时,不断采集电压值并送显示。当测量电压超过2.5V时,通过蜂鸣器发出报警。
串口控制:
a. 通过按键选择蜂鸣器报警等级(共三级,等级一对应2V,等级二对应2.5V,等级三对应3V),第四位 LED 数码管显示报警级别;
b. 利用串口调试助手,通过上位机设定报警等级对应的电压阈值。
仿真图:
编辑
3000字WORD对应文档:
编辑
二、硬件资源
基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。
1、51单片机
2、DAC0832电路
3、按键模块
4、蜂鸣器模块
5、四位数码管
6、串口模块
三、程序编程
/*部分代码,全部代码取页尾资源*/
#include <REGX52.H>
#define uchar unsigned char
#define uchar unsigned char//管脚定义sbit jia=P1^6;sbit jian=P1^7;sbit key1 = P1^1;sbit key2 = P1^2;sbit key3 = P1^3;sbit LED1=P3^4;sbit LED2=P3^5;sbit LED3=P3^6;sbit LED4=P3^7;sbit beep = P3^3;//函数声明 void delay(void); //延时 void key(void); //按键void add01(void); //步进加0.1void dec01(void); //步进减0.1void shuchu(void); //显示输出和电压调节void DA(void); //模数转换void beepwarning(int n);uchar a\[11\]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8c}; uchar bw=0,sw=0,gw=5,dw=0;static unsigned char fvol=50;static unsigned char st=0;static int flag = 0,v1=20,v2=25,v3=30;static char Dat_rxd;void Com0_Init(void)
{EA=1; //开总中断ES=1; //允许串口中断TMOD=0x20; //定时器T1,在方式3中断产生波特率SCON=0x50;TH1=0xfd; //波特率设置为9600(晶振12M)TL1=0xfd;TR1=1; //开定时器T1运行控制位
}void Com0(void) interrupt 4 using 1
{if(RI){Dat_rxd=SBUF; //串口接收Dat\_rxd=Dat\_rxd-0x30;RI=0;}
}void send_string(uchar *p)
{while(*p!= '\\0'){SBUF=*p;p++;while(TI==0);TI=0;}
}void main(void) //主程序
{ TMOD = 0x01;TH0 = (65535-2000)/256;TL0 = (65535-2000)%256; EA=1;ET0=1;TR0=1;Com0_Init();//串口初始化 beep = 0;while(1){ key(); DA(); if(Dat_rxd==0x01){ v1=30;}else if(Dat_rxd==0x02){v1=40; }if(flag == 1){if(fvol>v1){beep =1;bw=1;}else{beep = 0;}}if(flag == 2){if(fvol>v2){beep =1;bw=2;}else{beep = 0;}}if(flag == 3){if(fvol>v3){beep =1;bw=3;}else{beep = 0;}}}
}
四、实现现象
具体动态效果看B站演示视频:
基于51单片机的电压表设计Proteus仿真(可串口远程调控)_哔哩哔哩_bilibili
全部资料(源程序、仿真文件、安装包、串口工具、WORD文档、演示视频):
链接:https://pan.baidu.com/s/1Xq576JK89ruRpT66LDXwNA
提取码:xz2q
–来自百度网盘超级会员V4的分享