T01基于51单片机的共阴极数码管数字电压表设计

1、简介
该系统采用AT89C51单片机为控制核心,模拟量输入范围直流0v-5v。模拟量经ADC0809模数转换芯片,把模拟量转换为数字量输入到单片机的P0口,再由单片机控制4位数码管显示模拟量输入的电压值。

2、主要功能
通过4位共阴极数码管显示电压值。量程:0-5V

3、环境搭建
资料清单:C程序+仿真+设计报告+使用说明+元件清单+操作视频
仿真版本:Proteus8.6及以上版本
编译平台:Keil C51
编程语言:C语言

4、源程序
使用keil C51软件实现程序编写与编译。

#include<reg51.h>					      /*包含头文件reg51.h */
#define uchar unsigned char	 		/*宏定义后方便书写*/
#define uint unsigned int				/*宏定义后方便书写*/
uchar code DigitSTARTable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //LED码表
uchar DisplayBuffer[4];				//显示码数据缓冲区
uchar AD_Data;					//AD0809原始数据
uint Temp; 						  //处理后的数据
sbit START=P3^0; 				//定义P3.0引脚位名称为START
sbit OE=P3^1; 					//定义P3.1引脚位名称为OE
sbit EOC=P3^2;					//定义P3.2引脚位名称为EOC
sbit CLK=P3^3;					//定义P3.3引脚位名称为CLK
sbit ADDA=P3^4;					//定义P3.4引脚位名称为ADDA
sbit ADDB=P3^5;					//定义P3.5引脚位名称为ADDB
sbit ADDC=P3^6;					//定义P3.6引脚位名称为ADDC
sbit LED0=P2^0;					//定义P2.0引脚位名称为LED0,选择LED的0位
sbit LED1=P2^1;					//定义P2.1引脚位名称为LED1,选择LED的1位
sbit LED2=P2^2;					//定义P2.2引脚位名称为LED2,选择LED的2位
sbit LED3=P2^3;					//定义P2.3引脚位名称为LED3,选择LED的3位
sbit LED_DP=P1^7;				//定义P1.7引脚位名称为LED_DP,选择LED的DP位

//*********************************************************************************
//函数名:Delay
//函数功能:软件延时函数
//形式参数:uint i
//*********************************************************************************
void Delay(uint i)
{  uint j;
  for(;i>0;i--)
   { for(j=0;j<50;j++)
     ;
   }
}

//*********************************************************************************
//函数名:TimeInitial
//函数功能:定时器初始化函数 T0方式2,自动重装初值:10,定时:10us,
//信号周期T:20us 信号频率f:f=1/T=1000000/20=50 000HZ=50KHZ
//*********************************************************************************
void TimeInitial()		 //定时器初始化
{ TMOD=0x02;	 				 //定时器工作模式
 TH0=246;				       //定时器初值高8位
 TL0=246; 			       //定时器初值低8位
 EA=1;						     //开总中断
 ET0=1;		 				//开定时器中断
 TR0=1;		 				//启动定时器
 }

//*********************************************************************************
//函数名:Time0
//函数功能:定时器0中断服务子程序函数
//*********************************************************************************
 void Time0(void) interrupt 1 using 0  	//定时器中断服务子程序
 { 
  CLK=~CLK;	   				//产生AD0809工作脉冲:50KHZ
    }
 
//*********************************************************************************
//函数名:Display
//函数功能:LED数码管显示函数
//*********************************************************************************
void Display()
{ 
 P1=DigitSTARTable[DisplayBuffer[3]];	//取数据送P1端口显示(十位)
 LED0=0;	   					// LED0管子开
 Delay(5); 						// 延时显示
 LED0=1;	  					// LED0管子关
 P1=DigitSTARTable[DisplayBuffer[2]];//取数据送P1端口显示(个位)
 LED_DP=1;					// 小数点显示
 LED1=0;   					// LED1管子开
 Delay(5); 						// 延时显示
 LED1=1;  						// LED1管子关
 P1=DigitSTARTable[DisplayBuffer[1]];//取数据送P1端口显示 (小数1位)
 LED2=0;	  					// LED2管子开
 Delay(5);						// 延时显示
 LED2=1;	   					// LED2管子关
 P1=DigitSTARTable[DisplayBuffer[0]];//取数据送P1端口显示(小数2位)
 LED3=0;						// LED3管子开
 Delay(5);						// 延时显示
 LED3=1;	  					// LED3管子关
}

5、proteus8.6仿真
采用proteus8.6软件(内附安装包)实现仿真设计,如下图所示。proteus软件一般存在高低版本兼容问题,该仿真是通过proteus8.6导出的,所以请尽量使用proteus8.6打开文件,低于proteus8.6的版本不能够正常使用,高于proteus8.6的版本除了proteus8.8/8.9理论上可以正常使用。

在这里插入图片描述

6、设计资料清单
设计资料主要包括C程序+仿真+设计报告+使用说明+元件清单+操作视频等,设计报告主要包括硬件电路、软件设计、仿真调试等等,仅供参考。由于不定期更新,最新的资料包不一定与下面图片完全一致,但主要资料都有。
在这里插入图片描述

在这里插入图片描述

7、获取方式
百度网盘链接:https://pan.baidu.com/s/1ui9ZeJblocq0gwZZbAeCoA?pwd=9p9n
有偿,非诚勿扰🙏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值