仿真版本:Proteus8.6及以上版本
程序編譯:Keil5 C51
編程語言:C語言
設計編號:【T04】
1.? 簡介
? 本文提出了一種基于51單片機的LCD1602數字電壓表設計。該系統(tǒng)采用AT89C51單片機為控制核心,模擬量輸入范圍直流0v-5v。模擬量經ADC0832模數轉換芯片,把模擬量轉換為數字量輸入到單片機的P1口,再由單片機控制LCD1602顯示模擬量輸入的電壓值。
2.? 主要功能
a.通過LCD1602顯示兩路電壓值。量程:0-5V。
3.? 源程序(Keil5)
本設計采用keil5 C51軟件(內附安裝包)實現程序設計。如需用keil4打開程序,可自行通過.c和.h文件新建工程即可。
void main(void)
{
unsigned char adc0,adc1;
unsigned char num=0;
unsigned char ADC_Get[10]={0}; //定義AD采樣數組
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); //取十個值作中值濾波
}
Voltage0 = (float)adc0 * 5.0/255;
Voltage0 = Voltage0 *100; //擴大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; //擴大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
? 本設計采用proteus8.6軟件(內附安裝包)實現仿真設計,如下圖所示。proteus軟件一般存在高低版本兼容問題,該仿真是通過proteus8.6導出的,所以請盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。
運行:
5.? 設計報告
設計報告主要包括硬件電路、軟件設計、仿真調試等等,僅供參考。
6.? 資料清單
設計資料主要包括C程序+仿真+設計報告+使用說明+元件清單+操作視頻等。
7.? 資料獲取鏈接
百度網盤下載鏈接:【T04】百度網盤下載鏈接
更多單片機仿真設計合集:單片機仿真設計合集