仿真版本:Proteus8.6及以上版本
程序編譯:Keil5 C51
編程語(yǔ)言:C語(yǔ)言
設(shè)計(jì)編號(hào):【T04】
1.? 簡(jiǎn)介
? 本文提出了一種基于51單片機(jī)的LCD1602數(shù)字電壓表設(shè)計(jì)。該系統(tǒng)采用AT89C51單片機(jī)為控制核心,模擬量輸入范圍直流0v-5v。模擬量經(jīng)ADC0832模數(shù)轉(zhuǎn)換芯片,把模擬量轉(zhuǎn)換為數(shù)字量輸入到單片機(jī)的P1口,再由單片機(jī)控制LCD1602顯示模擬量輸入的電壓值。
2.? 主要功能
a.通過(guò)LCD1602顯示兩路電壓值。量程:0-5V。
3.? 源程序(Keil5)
本設(shè)計(jì)采用keil5 C51軟件(內(nèi)附安裝包)實(shí)現(xiàn)程序設(shè)計(jì)。如需用keil4打開(kāi)程序,可自行通過(guò).c和.h文件新建工程即可。
void main(void)
{
unsigned char adc0,adc1;
unsigned char num=0;
unsigned char ADC_Get[10]={0}; //定義AD采樣數(shù)組
float Voltage0 = 0.0;
float Voltage1 = 0.0;
Lcd1602_Init(); //LCD1602液晶初始化
Lcd1602_String(0,0,"V0: ");
Lcd1602_String(0,1,"V1: ");
while(1)
{
ADC_Get[num++]=ADC0832(1,0); //通道0 利用中值濾波算法
if(num>9)
{
num=0;
adc0=Error_Correct(ADC_Get,10); //取十個(gè)值作中值濾波
}
Voltage0 = (float)adc0 * 5.0/255;
Voltage0 = Voltage0 *100; //擴(kuò)大100倍方便顯示
Lcd1602_Write_Com(0x80+3);
Lcd1602_Write_Data((unsigned int)Voltage0/100+0x30);
Lcd1602_Write_Data('.');
Lcd1602_Write_Data((unsigned int)Voltage0%100/10+0x30);
Lcd1602_Write_Data((unsigned int)Voltage0%100%10+0x30);
Lcd1602_Write_Data('V');
adc1=ADC0832(1,1); //通道1
Voltage1 = (float)adc1 * 5.0/255;
Voltage1 = Voltage1 *100; //擴(kuò)大100倍方便顯示
Lcd1602_Write_Com(0xC0+3);
Lcd1602_Write_Data((unsigned int)Voltage1/100+0x30);
Lcd1602_Write_Data('.');
Lcd1602_Write_Data((unsigned int)Voltage1%100/10+0x30);
Lcd1602_Write_Data((unsigned int)Voltage1%100%10+0x30);
Lcd1602_Write_Data('V');
}
4.? 仿真proteus8.6
? 本設(shè)計(jì)采用proteus8.6軟件(內(nèi)附安裝包)實(shí)現(xiàn)仿真設(shè)計(jì),如下圖所示。proteus軟件一般存在高低版本兼容問(wèn)題,該仿真是通過(guò)proteus8.6導(dǎo)出的,所以請(qǐng)盡量使用proteus8.6打開(kāi)文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。
運(yùn)行:
5.? 設(shè)計(jì)報(bào)告
設(shè)計(jì)報(bào)告主要包括硬件電路、軟件設(shè)計(jì)、仿真調(diào)試等等,僅供參考。
6.? 資料清單
設(shè)計(jì)資料主要包括C程序+仿真+設(shè)計(jì)報(bào)告+使用說(shuō)明+元件清單+操作視頻等。
7.? 資料獲取鏈接
百度網(wǎng)盤(pán)下載鏈接:【T04】百度網(wǎng)盤(pán)下載鏈接
更多單片機(jī)仿真設(shè)計(jì)合集:單片機(jī)仿真設(shè)計(jì)合集