目录
一、主要功能
二、硬件资源
三、程序编程
四、实现现象
一、主要功能
基于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.1
void dec01(void); //步进减0.1
void 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的分享