【Proteus仿真】基于51单片机的简易电压表制作(可串口远程调控)

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于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的分享

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜间去看海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值