资料清单:C程序+仿真+设计报告+使用说明+元件清单+操作视频
仿真版本:Proteus8.6及以上版本
程序编译:Keil5 C51
编程语言:C语言
设计编号:【T01】
1.? 简介
? 本文提出了一种基于51单片机的共阴极数码管数字电压表设计。该系统采用AT89C51单片机为控制核心,模拟量输入范围直流0v-5v。模拟量经ADC0809模数转换芯片,把模拟量转换为数字量输入到单片机的P0口,再由单片机控制4位数码管显示模拟量输入的电压值。
2.? 主要功能
a.通过4位共阴极数码管显示电压值。量程:0-5V
3.? 源程序(Keil5)
本设计采用keil5 C51软件(内附安装包)实现程序设计。如需用keil4打开程序,可自行通过.c和.h文件新建工程即可。
#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管子关
}
4.? 仿真proteus8.6
? 本设计采用proteus8.6软件(内附安装包)实现仿真设计,如下图所示。proteus软件一般存在高低版本兼容问题,该仿真是通过proteus8.6导出的,所以请尽量使用proteus8.6打开文件,低于proteus8.6的版本不能够正常使用,高于proteus8.6的版本除了proteus8.8/8.9理论上可以正常使用。
运行:
5.? 设计报告
设计报告主要包括硬件电路、软件设计、仿真调试等等,仅供参考。
6.? 资料清单
设计资料主要包括C程序+仿真+设计报告+使用说明+元件清单+操作视频等。
7.? 资料获取链接
百度网盘下载链接:【T01】百度网盘下载链接
更多单片机仿真设计合集:单片机仿真设计合集
阅读全文
1142