前言:

之前讲过基于数码管显示的自动数字电压表,接下来讲一下基于LCD1602显示的相关设计,分别利用的是TI公司的ADC0808和ADC0809。

硬件和软件设计

基于51单片机+ADC0808+LCD1602 测试电压范围为2.1~25V(超出这个范围,程序会卡死),精度<0.05

仿真图如下:


部分代码如下:

#include <AT89X52.H> #define LEDDATA P0
#define v20_on {s3=0;s2=0;s1=1;} //宏定义不同量程,不同的开关状态
#define v2_on {s3=0;s2=1;s1=0;}
#define v02_on {s3=1;s2=0;s1=0;}
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsigned char dispbuf[8]={0,0,0,0,0,0,0,0};
unsigned char getdata;
unsigned long temp;
unsigned char i,k,l,m;
unsigned char code  mytable0[]=" Welcome to use  ";
unsigned char code  mytable1[]="Auto Voltmeter!";
unsigned char code line0[]="  Voltmeter   ";    //初始化显示
unsigned char code line1[]=" Value:     V ";
//引脚定义
sbit lcdrs=P2^0;
sbit lcden=P2^1;
sbit s3=P3^7;
sbit s2=P3^6;
sbit s1=P3^5;
sbit OE=P3^0;
sbit EOC=P3^1;
sbit ST=P3^2;void delay(unsigned int z)      //延时子函数  z*1ms
{unsigned int x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);
}
void write_com(unsigned char c)   //写命令子函数
{lcdrs=0;                //低电平选择为 写指令 lcden=0;                LEDDATA=c;                   //把指令写入P0口 delay(5);               //参考时序图 lcden=1;                //开使能 delay(5);               //读取指令 lcden=0;                //关闭使能
} void write_data(unsigned char d)  //写数据子函数
{lcdrs=1;             //高电平选择为 写数据 LEDDATA=d;                //把数据写入P0口 delay(5);            //参考时序图 lcden=1;             //开使能 delay(5);            //读取数据 lcden=0;             //关闭使能
}
void initialize()      //LCD初始化函数
{   unsigned char num;lcden=0;write_com(0x38);   //设置16x2显示,5x7点阵显示,8位数据接口 write_com(0x0c);   //00001DCB,D(开关显示),C(是否显示光标),B(光标闪烁,光标不显示) write_com(0x06);   //000001N0,N(地址指针+-1)write_com(0x01);      //清屏指令  每次显示下一屏内容时,必须清屏            write_com(0x80+0x10);           //第一行,顶格显示               for(num=0;num<17;num++)        {write_data(mytable0[num]); delay(10);}write_com(0x80+0x50);           //第二行,从第一格开始显示 for(num=0;num<15;num++)       {write_data(mytable1[num]); delay(10); }for(num=0;num<16;num++){write_com(0x1c);   //0001(S/C)(R/L)**;  S/C:高电平移动字符,低电平移动光标;  R/L:高电平左移,低电平右移 delay(300);}delay(1000); write_com(0x01);      //清屏指令  每次显示下一屏内容时,必须清屏 write_com(0x80);                       for(num=0;num<14;num++)     {write_data(line0[num]);delay(10);}write_com(0x80+0x40);         for(num=0;num<15;num++)        {write_data(line1[num]);delay(10);}
}

.
基于51单片机+ADC0809+LCD1602 测试电压范围为0~5V,精度约为0.01
以AT89C51单片机为核心,起着控制作用。系统包括LCD1602液晶显示电路、复位电路、时钟电路、模数转换电路电路。设计思路分为五个模块:复位电路、晶振电路模块、AT89C51、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);vShowVoltage(uiADTransform());}}
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器0中断函数>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void t0() interrupt 1
{if(uc_Clock==0){uc_Clock=5;b_DATransform=1;}elseuc_Clock--;TH0=TIME0H;           //恢复定时器0。TL0=TIME0L;
}

附:http://www.jh-tec.cn/archives/7315

基于51单片机和 ADC0808 ADC0809的自动数字电压表proteus仿真程序设计相关推荐

  1. 基于51单片机HX711的电子秤称重计价proteus仿真程序设计

    设计要求 1.利用压力传感器检测重量信号,经放大和A/D转换,送单片机进行处理,并在液晶屏上显示出被称重量值: 2.最小显示单位为1克: 3.量程超过报警值蜂鸣器报警 资料下载地址:基于51单片机HX ...

  2. 基于51单片机的免超载长途车自动控制系统proteus仿真

    (1)当检测到有人进车时能够自动开启车门,开启后延时10秒自动关闭.开门系统由电动机控制,开门时电动机正转,闭门时电动机反转.开门限度由限位开关确定: (2)能够自动记录进入车内人的个数,当人数超过5 ...

  3. 基于51单片机的小区智能防盗门禁密码锁 proteus仿真程序设计

    硬件设计 仿真图: 矩阵键盘输入密码区,模拟电磁开关,LCD12864显示: 程序设计 /******************************************************* ...

  4. 基于51单片机的SD卡读卡器MMC存储器 proteus仿真程序设计

    硬件设计 (末尾附文件) 程序设计 #include <reg52.H>#define F_OSC 11059200//晶振平率Hz #define F_BAUD 9600 #define ...

  5. 【043】基于51单片机的篮球比赛积分计时系统Proteus仿真

    一.压缩包资料内容 (1).基于51单片机的篮球比赛积分计时系统proteus仿真设计一份: (2).基于51单片机的篮球比赛积分计时系统proteus仿真设计keli源代码一份: (3).基于51单 ...

  6. 基于51单片机CO2二氧化碳气体浓度检测超限报警Proteus仿真

    资料编号:156   下面是相关功能视频演示: 156-基于51单片机CO2二氧化碳气体浓度检测超限报警Proteus仿真((源码+仿真+全套资料)) 功能介绍: 采用51单片机作为CPU,ADC08 ...

  7. 基于51单片机随机数自动摇号抽奖系统Proteus仿真

    资料编号:165   下面是功能展示视频: 165-基于51单片机随机数自动摇号抽奖系统Proteus仿真(源码+仿真+全套资料) 功能讲解: 采用51单片机作为控制CPU,LCD1602显示相关数值 ...

  8. 基于51单片机PM2.5浓度检测超限报警Proteus仿真

    资料编号:159   下面是相关功能视频演示: 159-基于51单片机PM2.5浓度检测超限报警Proteus仿真(源码+仿真+全套资料) 功能介绍: 采用51单片机作为CPU,ADC0832作为AD ...

  9. 基于51单片机的简易电容值测量仪proteus仿真设计

    51单片机简易电感测量仪仿真设计( proteus仿真+程序+讲解视频) 仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0039 51单片机简 ...

  10. 基于51单片机的智能超声波四轮遥控小车proteus仿真

    硬件设计 下边讲一下遥控小车,同样是基于51单片机,利用超声波进行测距,利用蓝牙模块实现遥控(仿真里边没有蓝牙,所以采用的是RS485通信模拟) 仿真图: 由LCD1602作为显示器,具有蜂鸣器报警, ...

最新文章

  1. C#语言与面向对象技术(4)
  2. 【新功能】MaxCompoute禁止Full Scan功能开放
  3. _matroska_decode_buffer in
  4. android高度混淆,android – TextView与ImageSpan混淆行高
  5. no module named social_django
  6. javafx 加载_JavaFX 2:如何加载图像
  7. FusionCharts使用问题及解决方法(三)-FusionCharts常见问题大全
  8. linux gd结构体,U-Boot中gd的定义和使用
  9. Spring Boot Actuator 监控和管理应用程序
  10. 人工智能ai医学辅助系统_不同的人工智能(AI)技术彻底改变了医学领域(AIM)...
  11. 【Python数据分析实战】豆瓣读书分析(含代码和数据集)
  12. Smoothed Dilated Convolutions for Improved Dense Prediction
  13. 弘辽科技:淘宝流量下滑了怎么办?淘宝流量下滑应对方法
  14. esxi01磁盘扩容_给EXSI虚拟机中linux硬盘扩容
  15. 高压直流电源为什么要“接地”?如何“接地”?
  16. 这个时代“寒门再难出贵子” (转帖)
  17. 低功耗wifi可视门铃方案全球推广
  18. 【组图】明星褪去厚厚脂粉的可怖模样!!~
  19. Matlab中点到直线距离计算
  20. 新品周刊 | 可口可乐与时尚包袋品牌Kipling推出联名系列;阿迪达斯推出电竞灵感跑鞋...

热门文章

  1. 淘宝/天猫api 添加收货地址 API接口
  2. 浏览器插件FeHelper的学习:gulp基础、使用gulp构建项目
  3. 如何查看Python源代码
  4. uni-app平台判断 | uni app判断h5 小程序 app 等不同平台
  5. 2021 小白版,360 行行行转 IT
  6. 文件格式转换——DMG文件格式转换成ISO文件
  7. DSP 程序远程升级 / Bootloader设计指南(四)——Bootloader数据流
  8. python零基础教学plc_Python从基础到开发精修全面学习视频教程
  9. Red5流服务器搭建(实现在线直播,流媒体视频播放和在线视频会议)
  10. Linux之flash流媒体服务器red5安装