利用51单片机作为主控芯片,模拟量输入范围直流0v-5v。模拟量经A/D(ADC0809)模数转换芯片,把模拟量转换为数字量输入到单片机的P0口,再由单片机控制LCD1602液晶显示模拟量输入的电压值。
此次设计的是数字电压表,要求的电压范围是0~5v。系统设计主要包括四个部分:分别是电源模块、AD模数转换部分、51单片机最小系统部分、数码管显示部分。首先由单片机初始化ADC0809模数转换芯片和共阴数码管显示,当外接被测电压后,ADC0809将模拟电压信号转换为数字信号输入到单片机的I/O口,通过单片机处理后将电压的大小显示在LCD1602液晶上面。
单片机源程序:
- //<程序名>:数字电压表
- //<功能>:使用LCD显示被检测电压,精度为0.05V,范围是0~5V。 **
- #include"includes.h"
- #define TIME0H 0x3C
- #define TIME0L 0xB0
- uchar uc_Clock=0; //定时器0中断计数
- bit b_DATransform=0;
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<把电压显示在LCD上>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- void vShowVoltage(uint uiNumber)
- {
- uchar ucaNumber[3],ucCount;
- if(uiNumber>999)
- uiNumber=999;
- ucaNumber[0]=uiNumber/100; //把计算数字的每个位存入数组。
- ucaNumber[1]=(uiNumber-100*(int)ucaNumber[0])/10;
- ucaNumber[2]=uiNumber-100*(int)ucaNumber[0]-10*ucaNumber[1];
- for(ucCount=0;ucCount<3;ucCount++)
- {
- vShowOneChar(ucaNumber[ucCount]+48); //从首位到末位逐一输出。
- if(ucCount==0)
- vShowOneChar('.');
- }
- }
- //*************************************************************************************************
- //* *
- //* ********************************主函数****************************** *
- //* *
- //*************************************************************************************************
- void main()
- {
- TMOD=0x01; //定时器0,模式1。
- TH0=TIME0H;
- TL0=TIME0L;
- TR0=1; //启动定时器。
- ET0=1; //开定时器中断。
- EA=1; //开总中断
- vdInitialize();
- vWriteCMD(0x84); //写入显示起始地址(第一行第4个位置)
- vShowChar("voltage");
- vWriteCMD(0xC9);
- vShowChar("(V)");
- while(1)
- {
- if(b_DATransform==1)
- {
- b_DATransform=0;
- vWriteCMD(0xC4);
- …………限于本文篇幅 余下代码请从51黑电子论坛下载附件…………
复制代码
所有资料下载:
51 digital voltmeter design.zip
(1.07 MB, 下载次数: 669)