基于ADC0832和LCD160128设计的数字电压表
用ADC0832设计的两路电压表
![用ADC0832设计的两路电压表](https://img.taocdn.com/s3/m/7145dd6da26925c52dc5bf0f.png)
毕业设计题目用ADC0832设计的两路电压表学生姓名王进学号 ********** 所在院(系) 物理与电信工程学院专业班级电信1101 指导教师杨创华完成地点陕西理工学院用ADC0832设计的两路电压表王进(陕理工学院电子信息科学与技术专业1101班级,陕西汉中723000)指导教师:杨创华[摘要]:本设计由A/D转换、数据处理及显示控制等组成,测量0~5V范围内的输入电压值,由显示器1602显示,最大分辨率0.1V,误差±0.05V。
数字电压表的核心为AT8051单片机和ADC0832 A/D转换集成芯片。
数字电压表(Digital Voltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。
传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,由精度高,抗干扰能力强,可扩展性强、集成方便,还可与PC进行实时通信。
目前,由各种单片A/D转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力。
于此同时,由DVM扩展而成的各种通用及专用数字仪器,也把电量及非电量测技术提高到崭新水平[关键字]:AT8051单片机;ADC0832;1602液晶显示屏Two voltage meter designed by ADC0832Wang jin(Class1101,Major Electronic information science and technology,Shaanxi University of Technology,Hanzhong 723000,Shaanxi)Tutor: Yang ChuanghuaAbstract:The design is composed of A/D conversion, data processing and display control, etc., and the input voltage from 0 to 5V is measured, and the maximum resolution 0.1V is 1602, and the error is + 0.05V. The core of the digital voltmeter is A T8051 microcontroller and A/D ADC0832 conversion chip. Digital voltage meter (digital voltmeter) referred to as DVM, it is using digital measuring technology, the continuous analog (DC input voltage conversion into a non continuous, discrete digital form and the instrument display. The traditional analog voltage table single function, low precision, unable to meet the needs of the digital age, using the singlechip digital voltage meter, by the high precision, strong anti-interference ability, expansion and strong, easy to be integrated, but also communicate with the PC in real time. At present, composed of various monolithic A / D converter digital voltage meter, has been widely used in electronic and electrical measurement, industrial automation instrument, automatic test system, intelligent measurement field, showing a strong vitality. At the same time, the variety of general and special digital instruments made by DVM, also can improve the power consumption and the non - electric measurement technology to a new level.Key words: A T8051SCM; ADC0832;1602 LCD screen目录引言 (3)1数字电压表设计两种方案 (4)1.1 由数字电路及芯片构建 (4)1.2 由单片机系统及A/D转换芯片构建 (4)2原器件介绍 (4)2.1单片机8051 (4)2.1.1 8051单片机引脚图与引脚功能简介 (4)2.1.2 8051内部结构 (5)2.2 ADC0832简介 (7)2.3 LCD1602液晶显示屏 (10)3设计方案 (13)4系统硬件电路的设计 (14)4.1 单片机系统 (14)4. 2 时钟电路 (14)4. 3 复位电路 (15)4. 4 LED显示电路 (15)5软件设计 (15)5.1 主程序 (16)5.2 A/D转换子程序 (16)5.3 显示子程序 (16)5.4 总流程图 (16)总结 (18)致谢 (19)参考文献 (20)附录A (21)仿真图 (21)附录B (22)程序 (22)引言数字电压表(Digital Voltmeter)是在50年代初,60年代末发展起来的电压测量仪表,简称为DVM,它运用的是数字化的测量技术,能够把连续的模拟量,也就是连续的电压值转变为不连续的数字量,加以数字处理然后再通过显示器件显示出来。
单片机与0832 1602的电压表完整程序
![单片机与0832 1602的电压表完整程序](https://img.taocdn.com/s3/m/fda2e943c850ad02de804108.png)
CALL DELAY1
MOV DPTR,#INFO1 ;指针指到显示信息1
MOV A,#1 ;显示在第一行
CALL LCD_SHOW
MOVC A,@A+DPTR ;由消息区取出字符
CJNE A,#0,LC1 ;判断是否为结束码
RET
LC1: CALL WDATA ;写入数据
INC DPTR ;指针加1
;---------------------------------------------------
;在 LCD 第二行指定位置显示字符
;(A)=ASCII 数据, (B)=位置变量
;---------------------------------------------------
;====================================================
; LCD 初始化设置
;====================================================
SET_LCD:
CLR LCD_EN
LCD_RW EQU P2.1 ;LCD 读/写选择端
LCD_EN EQU P2.2 ;LCD 使能信号
LCD_X EQU 20H ;LCD 地址变量
ORG 0000H
;RS=L,RW=L,D0-D7=指令码,E=高脉冲
;=====================================================
WCOM:
MOV P0,A
CLR LCD_RS
ADC0832的数字电压表设计说明
![ADC0832的数字电压表设计说明](https://img.taocdn.com/s3/m/2866104358f5f61fb6366615.png)
目录1.引言 (1)2.方案设计 (1)2.1设计要求 (1)2.2设计方案 (1)3.硬件设计 (2)3.1单片机最小系统 (2)3.2显示驱动部分 (2)3.3转换电路 (3)3.4单片机驱动部分 (3)4.软件设计 (4)4.1软件流程 (4)4.2子程序模板 (5)5实验结果与讨论 (5)5.1实验仿真 (5)5.2结果讨论 (5)6心得体会 (6)7参考文献 (13)8附录8.1程序 (7)8.2 原理图 (7)1.引言随着片机技术的飞速发展,,现代的电子产品几乎渗透到了社会的各个领域,有力地推动了社会生产力的发肢和社会信息化程度的提商,人们为了寻求最好的科技,为了方便人类在使用科技产品的快速性,准确性。
例如数字电压表能够准确的,快速的量出电压。
利用ADC0832和AT89C52的结合再通过LCD来显示出来。
ADC0832是一个8位D/A转换器。
单电源供电,从+5V~+15V均可正常工作。
基准电压的围为±10V;电流建立时间为1μS;CMOS工艺,低功耗20mW。
ADC0832转换器芯片为20引脚,双列直插式封装。
该转换器由输入寄存器和DAC寄存器构成两级数据输入锁存。
使用时数据输入可以采用两级锁存(双锁存)形式,或单级锁存(一级锁存,一级直通)形式,或直接输入(两级直通)形式。
2.方案设计2.1设计要求按系统要实现功能,设计必须达到以下的几个步骤的要求(1)主电路系统是由ADC0832,单片机AT89C52和LCD显示屏组成。
(2)ADC0832是模拟数字转换芯片,是将外侧电压信号转换成数字信号再通过AT89C52处理,再通过LCD显示出来(3)能测量0-5V的数字电压(4)测量误差不大于0.1V2.2设计方案2.1.1单片机的选择本设计选用单片机AT89C52它是一种带8K字节闪烁可编程可擦除只读存储器的低电压,足够本设计之用,高性能CMOS8位微处理器该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令系统及8052产品引脚兼容,功能强大、使用方便的AT80C52单片机适用于许多较为复杂的应用场合。
基于单片机的数字电压表制作——ADC0832模数转换应用程序(C语言)
![基于单片机的数字电压表制作——ADC0832模数转换应用程序(C语言)](https://img.taocdn.com/s3/m/4d5795d6c1c708a1284a4436.png)
基于单片机的数字电压表制作——ADC0832模数转换应用程序(C语言)主要部件:AT89S51 ADC0832 八段数码管关键字:ADC0832程序C语言数字电压表本文所描述的数字电压表是利用ADC0832模数转换芯片完成的。
该芯片能将0~5V的模拟电压量转换为0说实在话,量程只有5V的电压表没有什么实际的意义,而且也没有人无聊到自己会去做一个没有意义的以后做真正有用的电路打下基础。
而且,对于那些做毕业设计的同学也是一种参考。
这也就是本文的意ADC0832的资料百度一下可以找到一大堆,我就不在这里赘述了。
这里只给出连接图。
以下是程序部分:该程序是本人自编的,经测试可用,但不保证程序的可靠性及稳定性。
若有转载请标明出处。
如果有同学将本程序烧写到单片机里却不能正常工作的,请注意以下三点:1、是否将端口重新定义。
每个单片机开发板的引脚连接都是不一样的,若不加修改直接把程序烧写到2、是否正确选择通道值。
ADC0832有两个模拟输入端口(也就是我说的通道),你要先弄清楚你用的是默认使用0通道,如果0通道不行就改成1通道,反正不是0通道就是1通道。
3、如果你做的电压表在保证电路连接正确且没有以上两点问题的情况下,还是不能正常工作,请将程问题。
我有两个单片机开发板,其中一个必须要把那一行删掉才能工作。
这说明ADC0832读出的前8位与理。
我不知道到底是硬件还是软件出了问题,特此把这种现象标明。
若有哪位同学知道其原因的还请多/***********************************************************************************//*简易数字电压表制作——ADC0832模数转换应用程序(C语言版)*//*目标器件:AT89S51/*晶振:12.000MHZ/*编译环境:Keil uVision2 V2.12/***********************************************************************************//*********************************包含头文件********************************/#include <reg51.h>#include <intrins.h>/*********************************端口定义**********************************/sbit CS = P3^5;sbit Clk = P3^4;sbit DATI = P3^3;sbit DATO = P3^3;/*******************************定义全局变量********************************/unsigned char dat = 0x00; //AD值unsigned char count = 0x00; //定时器计数unsigned char CH; //通道变量unsigned char dis[] = {0x00, 0x00, 0x00}; //显示数值/*******************************共阳LED段码表*******************************/unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};/**************************************************************************** 函数功能:AD转换子程序入口参数:CH出口参数:dat****************************************************************************/ unsigned char adc0832(unsigned char CH){unsigned char i,test,adval;adval = 0x00;test = 0x00;Clk = 0; //初始化DATI = 1;_nop_();CS = 0;_nop_();Clk = 1;_nop_();if ( CH == 0x00 ) //通道选择{Clk = 0;DATI = 1; //通道0的第一位_nop_();Clk = 1;_nop_();Clk = 0;DATI = 0; //通道0的第二位_nop_();Clk = 1;_nop_();}else{Clk = 0;DATI = 1; //通道1的第一位_nop_();Clk = 1;_nop_();Clk = 0;DATI = 1; //通道1的第二位_nop_();Clk = 1;_nop_();}Clk = 0;DATI = 1;for( i = 0;i < 8;i++ ) //读取前8位的值{_nop_();adval <<= 1;Clk = 1;_nop_();Clk = 0;if (DATO)adval |= 0x01;elseadval |= 0x00;}for (i = 0; i < 8; i++) //读取后8位的值{test >>= 1;if (DATO)test |= 0x80;elsetest |= 0x00;_nop_();Clk = 1;_nop_();Clk = 0;}if (adval == test) //比较前8位与后8位的值,如果不相同舍去。
单片机数字电压表(带仿真图C程序)
![单片机数字电压表(带仿真图C程序)](https://img.taocdn.com/s3/m/1d7fb381a0116c175f0e48b4.png)
基于51单片机数字电压表本模块采用ADC0832模数转换芯片,LCD1602液晶显示,测量范围0-5V,精度误差0.01V看了很多网上的课程设计或者毕业论文,得出以下几点:1.数字电压表的方案有很多种,有的采用ADC0809,或者ADC0808等,他们都是8温AD,并口传输数据,具有速率高的优点。
但是硬件复杂,与单片机电路繁琐,焊接起来比较麻烦。
所以本设计采用ADC0832,同样8位AD,特点是串口传输数据,硬件接口简单,且精度误差一致,速率也比较快,对于要求不高的系统非常适合。
2.显示电路,网上采用LED显示居多,本设计采用LCD1602液晶显示,具有硬件搭设简单,显示美观等优点3.本设计方便移植,只需将LCD1602三个控制端口,ADC0832 四个控制端口修改即可。
注意LCD1602数据传输接口是单片机的P0口,如下图,需要接上拉电阻4.程序采用C代码编写,亲测直接可以使用,若需仿真文件,请用E-mail联系邮系。
邮箱:gnsywb@5.网上很多设计数据转换程序有误,不够正确。
在转换过程中,中间变量需设置为int 类型,虽然8位AD输出最高位255,但是余数转换过程中会大于255。
若设计char型,会造成显示输出有误。
void convert(uchar a){ uint temp; //特别注意这里需定义int型(余数将大于255)dis[0]=a/51; //取个位temp=a%51;temp=temp*10; dis[1]=temp/51; //取小数点后第一位temp=temp%51;temp=temp*10; dis[2]=temp/51; //取小数点后第二位}具体电路图如下:1.利用电压表与测量显示电压对比附录:C程序/******************************************** 功能:单片机数字电压表ADC0832+LCD16021,测量范围0-5V2,2路输入电压,可自行设定3,测量精度误差0.01V,LCD液晶显示编写者:小子在西藏gnsywb@编写日期:2012-11-5*********************************************/ #include <reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charsbit lcdrs=P2^4;sbit lcdrw=P2^5;sbit lcden=P2^6; //1602控制端口sbit DI=P3^4;sbit DO=P3^4; //DI和DO与单片机共接口sbit Clk=P3^3;sbit CS=P3^5;//ADC0832控制端口uchar dis[3]={0x00,0x00,0x00}; //显示缓冲区uchar date=0; //AD值uchar CH; //ADC0832通道值/*****************************************AD0832转换程序******************************************/uchar ADC0832(uchar CH){uchar i,dis0,dis1;Clk=0; //拉低时钟DI=1; //初始化_nop_();CS=0; //芯片选定_nop_();Clk=1; //拉高时钟_nop_();if(CH==0) //通道选择{Clk=0; //第一次拉低时钟DI=1; //通道0的第一位_nop_();Clk=1; //拉高时钟_nop_();Clk=0; //第二次拉低时钟,ADC0832 DI接受数据DI=0; //通道0的第二位_nop_();Clk=1;_nop_();}else{Clk=0;DI=1; //通道1的第一位_nop_();Clk=1;_nop_();Clk=0;DI=1; //通道1的第二位_nop_();Clk=1;_nop_();}Clk=0; //第三次拉低时钟,此前DI两次赋值决定通道DI=1; //DI开始失效,拉高电平,便于DO数据传输for(i= 0;i<8;i++) //读取前8位的值{_nop_();dis0<<= 1;Clk=1;_nop_();Clk=0;if (DO)dis0|=0x01;elsedis0|=0x00;}for (i=0;i<8;i++) //读取后8位的值{dis1>>= 1;if (DO)dis1|= 0x80;elsedis1|= 0x00;_nop_();Clk=1;_nop_();Clk=0;}if(dis0==dis1) //两次结束数据比较,若相等date=dis0; //则赋值给dat_nop_();CS=1; //释放ADC0832DO=1; //拉高输出端,方便下次通道选择DI端有效Clk=1; //拉高时钟return date;}/***********************************************数据转换程序功能:将0-255级换算成0.00-5.00的电压数***********************************************/void convert(uchar a){uint temp; //特别注意这里需定义int型(余数将大于255)dis[0]=a/51; //取个位temp=a%51;temp=temp*10;dis[1]=temp/51; //取小数点后第一位temp=temp%51;temp=temp*10;dis[2]=temp/51; //取小数点后第二位}/***************************************** LCD1602驱动程序******************************************/ void delay(uchar z){uint x,y;for(x=z;x>0;x--)for(y=122;y>0;y--);}void write_cmd(uchar cmd)//lcd1602写命令函数{lcdrs=0;lcdrw=0; //选择指令寄存器lcden=1;P0=cmd; //写数据delay(5);lcden=0; //使能拉低lcden=1;}void write_date(uchar date)//lcd1602写数据函数{lcdrs=1;lcdrw=0; //选择数据寄存器lcden=1;P0=date; //写数据delay(5);lcden=0; //使能拉低lcden=1;}void init_lcd1602()//lcd1602初始化{write_cmd(0x01); //清屏write_cmd(0x38); //功能设置write_cmd(0x0c); //显示设置write_cmd(0x06); //输入方式从左到右delay(1);}/***************************************** 显示函数*****************************************/ void display(void){uchar i;write_cmd(0x80);for(i=0;i<3;i++){if(i==1) write_date('.'); //第二位显示小数点write_date (0x30+dis[i]);delay(5);}write_date('V'); //最后一位后显示字符'V'}/************************************************ 主函数***************************************************/ void main(void){CH=0; //选择通道0或1init_lcd1602();//液晶1602显示初始化while(1) //主循环{date=ADC0832(CH);//启动ADC0832转换并接受数据delay(1);convert(date); //数据转换成BCD码display(); //显示数值}}。
adc0832数字电压表(程序+仿真图)
![adc0832数字电压表(程序+仿真图)](https://img.taocdn.com/s3/m/e994d1b8fc4ffe473268aba2.png)
adc0832数字电压表(程序+仿真图)仿真图:/*********************************包含头文件********************************/#include <reg51.h>#include <intrins.h>/*********************************端口定义**********************************/sbit CS = P3^5;sbit Clk = P3^3;sbit DATI = P3^4;sbit DATO = P3^4;sbit P20=P2^0 ;/*******************************定义全局变量********************************/unsigned char dat = 0x00; //AD值unsigned char count = 0x00; //定时器计数unsigned char CH; //通道变量unsigned char dis[] = {0x00, 0x00, 0x00}; //显示数值/*******************************共阳LED 段码表*******************************/unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90};char code tablewe[]={ 0xfd,0xfb,0xf7,0xef,0xdf,0xfe };/**************************************** ************************************函数功能:AD转换子程序入口参数:CH出口参数:dat***************************************** ***********************************/unsigned char adc0832(unsigned char CH){unsigned char i,test,adval;adval = 0x00;test = 0x00;Clk = 0; //初始化DATI = 1;_nop_();CS = 0;_nop_();Clk = 1;_nop_();if ( CH == 0x00 ) //通道选择{Clk = 0;DATI = 1; //通道0的第一位_nop_();Clk = 1;_nop_();Clk = 0;DATI = 0; //通道0的第二位_nop_();Clk = 1;_nop_();}else{Clk = 0;DATI = 1; //通道1的第一位_nop_();Clk = 1;_nop_();Clk = 0;DATI = 1; //通道1的第二位_nop_();Clk = 1;_nop_();}Clk = 0;DATI = 1;for( i = 0;i < 8;i++ ) //读取前8位的值{_nop_();adval <<= 1;Clk = 1;_nop_();Clk = 0;if (DATO)adval |= 0x01;elseadval |= 0x00;}for (i = 0; i < 8; i++) //读取后8位的值{test >>= 1;if (DATO)test |= 0x80;elsetest |= 0x00;_nop_();Clk = 1;_nop_();Clk = 0;}if (adval == test) //比较前8位与后8位的值,如果不相同舍去。
LCD1602+ADC0832制作的数字电压表
![LCD1602+ADC0832制作的数字电压表](https://img.taocdn.com/s3/m/d3e9fe15b7360b4c2e3f6423.png)
ADC0832+LCD1602+PROTEUS仿真电路C51程序//********************************//LCD1602+ADC0832制作的数字电压表//接口方式:模拟口线//作者:曾宪阳//网址:/zxymcu//********************************#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define IO_1602 P0 //IO口sbit RS_1602=P2^0;sbit RW_1602=P2^1;sbit E_1602=P2^2;sbit CS=P1^0;sbit CLK=P1^1;sbit DIO=P1^2;void delay_ms(unsigned int t)//11.0592MHz 1ms {uchar x,y;for(t;t>0;t--){for(x=0;x<114;x++)for(y=0;y<1;y++);}}void Wr1602Cmd(unsigned char dat) {//写命令函数E_1602=0;IO_1602=dat;RS_1602=0;RW_1602=0;E_1602=1;delay_ms(1);E_1602=0;delay_ms(1);}void Wr1602Dat(unsigned char dat) {//写数据函数E_1602=0;IO_1602=dat;RS_1602=1;RW_1602=0;E_1602=1;delay_ms(1);E_1602=0;delay_ms(1);}void Init1602(void){delay_ms(20);Wr1602Cmd(0x38);delay_ms(5);Wr1602Cmd(0x38);delay_ms(5);Wr1602Cmd(0x06);Wr1602Cmd(0x0c);//Wr1602Cmd(0x01);//清屏Wr1602Cmd(0x80);//设置地址}uchar RdAdc0832(bit Hx){uchar value0,value1,i;CS=1;CLK=0;DIO=1;CS=0;DIO=1;_nop_();_nop_();_nop_();_nop_(); //写ST位 CLK=1;_nop_();_nop_();_nop_();_nop_();CLK=0;_nop_();_nop_();_nop_();_nop_();DIO=1;_nop_();_nop_();_nop_();_nop_();//写SGL位 CLK=1;_nop_();_nop_();_nop_();_nop_();CLK=0;_nop_();_nop_();_nop_();_nop_();DIO=Hx;_nop_();_nop_();_nop_();_nop_();//写通道号位CLK=1;_nop_();_nop_();_nop_();_nop_();CLK=0;_nop_();_nop_();_nop_();_nop_();DIO=1;for(i=0;i<8;i++){CLK=1;_nop_();_nop_();_nop_();_nop_();CLK=0;_nop_();_nop_();_nop_();_nop_();value0<<=1;if(DIO==1) value0|=0x01;else value0&=0xfe;}for(i=0;i<8;i++){value1>>=1;if(DIO==1) value1|=0x80;else value1&=0x7f;CLK=1;_nop_();_nop_();_nop_();_nop_(); CLK=0;_nop_();_nop_();_nop_();_nop_(); }CS=1;if(value0!=value1) P1&=0X7F;else P1|=0X80;return value0;}void main(){unsigned long i;Init1602();while(1){Wr1602Cmd(0x80);i=RdAdc0832(0);i=(i*5000/255);Wr1602Dat('C');Wr1602Dat('H');Wr1602Dat('0');Wr1602Dat('=');Wr1602Dat('0'+i/1000);Wr1602Dat('.');Wr1602Dat('0'+i%1000/100);Wr1602Dat('0'+i%1000%100/10); Wr1602Dat('0'+i%1000%100%10); Wr1602Dat('V');Wr1602Cmd(0xC0);i=RdAdc0832(1);i=(i*5000/255);Wr1602Dat('C');Wr1602Dat('H');Wr1602Dat('1');Wr1602Dat('=');Wr1602Dat('0'+i/1000);Wr1602Dat('.');Wr1602Dat('0'+i%1000/100);Wr1602Dat('0'+i%1000%100/10);Wr1602Dat('0'+i%1000%100%10);Wr1602Dat('V');}}LCD1602+ADC0809制作的数字电压表-总线连接方式//********************************//LCD1602+ADC0809制作的数字电压表//接口方式:总线扩展//作者:曾宪阳//网址:/zxymcu//******************************** #include<reg52.h>#define ADC0809Addr 0x78ff#define LCDWriteComAddr 0xa7ff#define LCDWriteDatAddr 0xafff#define uchar unsigned char#define uint unsigned intuchar Disp[6];void delay_ms(uint t){uchar x,y;for(t;t>0;t--){for(x=0;x<114;x++)for(y=0;y<1;y++);}}void Init1602(void){delay_ms(15);*((uchar xdata*)LCDWriteComAddr)=0x38; delay_ms(5);*((uchar xdata*)LCDWriteComAddr)=0x38; delay_ms(5);*((uchar xdata*)LCDWriteComAddr)=0x38;delay_ms(2);*((uchar xdata*)LCDWriteComAddr)=0x08; delay_ms(2);*((uchar xdata*)LCDWriteComAddr)=0x01; delay_ms(2);*((uchar xdata*)LCDWriteComAddr)=0x0c; delay_ms(2);*((uchar xdata*)LCDWriteComAddr)=0x06; delay_ms(2);*((uchar xdata*)LCDWriteComAddr)=0x80; delay_ms(2);}void Display(void){*((uchar xdata*)LCDWriteComAddr)=0XC0;delay_ms(2);*((uchar xdata*)LCDWriteDatAddr)='I';delay_ms(2);*((uchar xdata*)LCDWriteDatAddr)='N';delay_ms(2);*((uchar xdata*)LCDWriteDatAddr)='0';delay_ms(2);*((uchar xdata*)LCDWriteDatAddr)='=';delay_ms(2);*((uchar xdata*)LCDWriteDatAddr)=('0'+Disp[0]); delay_ms(2);*((uchar xdata*)LCDWriteDatAddr)=('.');delay_ms(2);*((uchar xdata*)LCDWriteDatAddr)=('0'+Disp[1]); delay_ms(2);*((uchar xdata*)LCDWriteDatAddr)=('0'+Disp[2]); delay_ms(2);*((uchar xdata*)LCDWriteDatAddr)=('0'+Disp[3]); delay_ms(2);*((uchar xdata*)LCDWriteDatAddr)=('V');delay_ms(2);}void ADC0809(void){unsigned long i;*((uchar xdata*)ADC0809Addr)=0;delay_ms(100);i=*((uchar xdata*)ADC0809Addr);P1=i;i=(i*5000/255);Disp[0]=(i/1000);Disp[1]=(i%1000/100);Disp[2]=(i%1000%100/10);Disp[3]=(i%1000%100%10);}void main(void){Init1602();while(1){ADC0809(); Display(); }}。
用LCD1602和ADC0832设计的两路电压表
![用LCD1602和ADC0832设计的两路电压表](https://img.taocdn.com/s3/m/d105b7f8f705cc17552709de.png)
学习情境3-数字电压表的设计之基于LCD1602和ADC0832设计的数字电压表☆点名,复习1、DS1302的引脚及其功能,以及DS1302与单片机的硬件连接?2、如何编写基于1602LCD的显示驱动程序?☆新课讲授3.1基于LCD1602和ADC0832设计的数字电压表这堂课我们来学习ADC0832芯片的应用。
模-数(AD)和数-模(DA)转换是模拟电路和数字电路进行沟通的渠道,在数字电路里,电平只有高和低两种状态,比如5V和0V,对应着1和0;模拟电路里,电平则理论上有无数个状态,比如0V、0.1V、0.2V…等等。
如何将模拟电平值在数字电路里表达出来呢?这就需要AD转换过程。
ADC0832是美国国家半导体公司生产的一种8位分辨率、双通道A/D转换芯片。
由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,且目前已经有很高的普及率。
学习并使用ADC0832可是使我们了解A/D转换器的原理,有助于我们单片机技术水平的提高。
3.1.1 ADC0832芯片ADC0832具有以下特点:(1)8位分辨率;(2)双通道A/D转换;(3)输入输出电平与TTL/CMOS相兼容;(4)5V电源供电时输入电压在0~5V之间;(5)工作频率为250KHZ,转换时间为32μS;(6)一般功耗仅为15mW;(7)8P、14P—DIP(双列直插)、PICC 多种封装;(8)商用级芯片温宽为0°C to +70°C?,工业级芯片温宽为40℃- +85℃引脚及功能:图6-1-1 DAC0832引脚图CS:片选使能,低电平有效CH0:模拟输入通道0,或作为IN+/-使用CH1:模拟输入通道1,或作为IN+/-使用GND:芯片参考0电位(地)DI:数据信号输入,选择通道控制DO:数据信号输出,转换数据输出CLK:芯片时钟输入VCC:电源输入ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。
基于ADC0832数字电压表
![基于ADC0832数字电压表](https://img.taocdn.com/s3/m/d68af420ed630b1c59eeb56a.png)
阿坝师范高等专科学校电子信息工程系课程设计基于ADC0832数字电压表学生姓名任银鹏专业名称电子信息工程技术班级电信班学号20113026基于ADC0832数字电压表一、设计要求设计一个在单片机AT89S52作用下基于ADC0832数字电压表.二、系统设计方案1. 模块图2. 模块作用该电压表由单片A/D转换器构成,在很大的电压情况下,电压表去测量时会对其并联很大的电阻分掉高压,然后再进行测量,这本来很大的电压,到后来测出来的电压就会很小,这就是A/D转换实现低压电压表测量高压三、硬件原理1.LCD1602图3.1 LCD1602外观如图3.1 LCD1602外观,从LCD1602参数手册知道芯片工作电压为4.5~5.5V,工作电流20mA。
模块最佳工作电压为5V。
引脚作用说明如下表3.1:表3.1引脚作用说明从参数手册知道LCD1602与单片机8051系列连接方式如图3.2所示,LCD1602引用电路如图3.3:图3.2 LCD1602与单片机8051系列连接方式图3.3 LCD1602引用电路如图3.3 LCD1602引用电路,单片机P2口与LCD1602的7-14脚连接,单片机14脚与LCD1602的6脚连接,单片机15脚与LCD1602的4脚连接。
2. ADC0832ADC0832具有8位分辨率;双通道A/D转换;输入输出电平与TTL/CMOS相兼容;5V电源供电时输入电压在0-5V之间,工作频率为250KHz,转换时间为32us;一般功耗仅为15Mw的特点。
ADC0832芯片引脚说明如图3.4:图3.4ADC0832芯片引脚说明:cs:片选使能,低电平芯片使能;cho:模拟输入通道0,或作为IN+/-使用;ch1:模拟输入通道:1,或作为IN+/-使用;GND:芯片参考0电位;DI:数据信号输入,悬着通道控制;DO:数据信号输出,转换数据输出;CLK:芯片时钟输入;Vcc/REF:电源输入及参考电压输入。
adc0832做的数字电压表
![adc0832做的数字电压表](https://img.taocdn.com/s3/m/8330e72bbd64783e09122b90.png)
#include<reg52.h>#define uchar unsigned char#define uint unsigned int#define ulong unsigned long#define _rrca_() CY = ACC & 0x01 //产生RRC A指令#define _rlca_() CY = ACC & 0x80 //产生RLC A指令sbit bADcs=P1^4;sbit bADcl=P1^5;sbit bADda=P1^6;sbit flag=P1^7;sbit str=P2^7;sbit d=P2^6;sbit clk=P2^5;bit choose=0;unsigned char data1;unsigned char count;unsigned char cycle;uint ge,xiao1,xiao2;unsigned long data2;//无小数点const uchar table1[17]={0x81,0xed,0x43,0x49,0x2d,0x19,0x11,0xcd,0x01,0x09,0x71,0x31,0x93,0x61,0x13,0 x17,0xff};//有小数点const uchar table2[17]={0x80,0xec,0x42,0x48,0x2c,0x18,0x10,0xcc,0x00,0x08,0x70,0x30,0x92,0x60,0x12,0 x16,0xff};uchar buffer[4]={0x00,0x00,0x00,0x00};void Delayus(uchar i){while(--i);}void display(void){uchar bit_count=0;uchar table_counter=0;uchar byte_counter=0;uchar temp_i=0;buffer[0]=xiao2;buffer[1]=xiao1;buffer[2]=ge;buffer[3]=0x00;//led_str_off;//先清零str=0;//led_clk_off;clk=0;for(byte_counter=0;byte_counter<4;byte_counter++) {bit_count=8;if(byte_counter==2)temp_i=table2[buffer[byte_counter]];elsetemp_i=table1[buffer[byte_counter]];// nop;while(bit_count>0){if((temp_i&0x80)==0){//led_d_off;d=0;}else{//led_d_on;d=1;}temp_i=(temp_i<<1);// nop;//led_clk_on;clk=1;// nop;//led_clk_off;clk=0;// nop;bit_count--;}}//led_str_on;str=1;}/*void ad(){choose=0;count = 0;bADcs = 0;//当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用.bADcl = 0;bADda = 1;//在第1 个时钟脉冲的下沉之前DI端必须是高电平.bADcl = 1;bADcl = 0;//pulse 1 downbADda = 1;bADcl = 1; bADcl = 0;//pulse 2 downif(choose == 0)bADda = 0;elsebADda = 1;bADcl = 1; bADcl = 0;//pulse 3 downbADcl = 1; bADcl = 0;//pulse 4 down//bADcl = 1;for(cycle = 8; cycle > 0; cycle-- ){bADda = 1;//bADcl = 0;//pulsebADcl = 1;CY = bADda;_rlca_(); //RRC AbADcl = 0;//pulse}data1= ACC;for(cycle = 8; cycle > 0; cycle-- ){bADda = 1;bADcl = 1;CY = bADda;_rrca_();//RLC AbADcl = 0;//pulse}//bADcl = 0;//pulse} */void ad(void){ uchar i;//data1=0;bADcs = 0;//当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用.bADcl=0;bADda=1;bADcl=1;bADcl=0;//i downbADda=1;bADcl=1;bADcl=0; // 2 downbADda=0;bADcl=1;bADcl=0; // 3 downbADda=1;bADcl=1;bADcl=0; // 4 downfor(i=8;i>0;i--){data1<<=1;bADcl=0;bADcl=1;if(bADda==1) data1|=0x01;bADda=1;}/* for(i=8;i>0;i--){bADcl=0;bADcl=1;} */bADcs=1;}void cal(){data2=((ulong)data1*493)/256; ge=data2/100;xiao1=(data2%100)/10;xiao2=data2%10;}main(){flag=1;while(1){ad();cal();display();}}。
基于ADC0832的数字电压表
![基于ADC0832的数字电压表](https://img.taocdn.com/s3/m/a68a6377f242336c1eb95ea3.png)
基于ADC0832的数字电压表#include<reg51.h> //包含单片机寄存器的头文件#include<intrins.h> //包含_nop_()函数定义的头文件sbit CS=P3^4; //将CS位定义为P3.4引脚sbit CLK=P1^0; //将CLK位定义为P1.0引脚sbit DIO=P1^1; //将DIO位定义为P1.1引脚//////////////////////////////////////////////////////////////////unsigned char code digit[10]={"0123456789"}; //定义字符数组显示数字unsigned char code Str[]={"Volt="}; //说明显示的是电压/****************************************************************************** *以下是对液晶模块的操作程序******************************************************************************* /sbit RS=P2^0; //寄存器选择位,将RS位定义为P2.0引脚sbit RW=P2^1; //读写选择位,将RW位定义为P2.1引脚sbit E=P2^2; //使能信号位,将E位定义为P2.2引脚sbit BF=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚/*****************************************************函数功能:延时1ms(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒***************************************************/void delay1ms(){unsigned char i,j;for(i=0;i<10;i++)for(j=0;j<33;j++);}/*****************************************************函数功能:延时若干毫秒入口参数:n***************************************************/void delaynms(unsigned char n){unsigned char i;for(i=0;i<n;i++)delay1ms();}/*****************************************************函数功能:判断液晶模块的忙碌状态返回值:result。
基于ADC0808模数转换器的数字电压表报告
![基于ADC0808模数转换器的数字电压表报告](https://img.taocdn.com/s3/m/f223d7e80975f46527d3e1be.png)
4×4矩阵式键盘识别一、硬件设计单片机的最小系统连接方式比较简单。
晶振使用的是12MHz。
复位电路设计成上电复位。
在单片机系统区域内,把单片机的p1.0-1.7连接到在用2位七段数码管显示时,采用动态扫描的方式将数字直观的显示出来。
在设计数码管的驱动电路时,考虑到只是在仿真,并且会使电路显得杂乱,所以为了直观的表达故省去。
采用直接连接的方式。
完整电路原理图二、软件设计在设计软件时,由于系统的功能比较简单,所以在设计软件时,只用到了三个子函数:unsigned char adc_0808(void);其函数功能是:在接收模拟电压以后,将其转换为数字量输出。
返回值就是模拟电压所对应的数字量。
void xianshi(int a,int b,int c,int d);其函数功能是:将输入的4个整型数用动态扫描的方式显示出来,其显示的并非ADC0808输出的数字量。
void delayx();其函数功能主要是起延时作用。
主函数:主要功能是将ADC0808输出的数字两转换为模拟电压的数值,转换公式为:a=ADC_0808()*19.6。
再提取每一位数字(共4位)。
然后显示。
三、联调为了能清晰的知道所显示的数值是否就是我们输入ADC0808的电压值,在ADC0808的输入端接了一个电压表。
在联调的过程中所遇到的问题有如下:1、显示电路的调试问题所在:无法完整显示2位七段数码管,或有闪烁现象。
解决方法:调整延时到最佳。
2、ADC0808电路的调试(1)、显示数值始终为0000.问题所在:未给ADC0808的CLK接口连接500k的时钟。
解决方法:在此接口添加时钟。
(2)、显示乱码问题所在:ADC0808的时序不对。
解决方法:通过查资料查得时序图如下:ADC0808时序图(3)、能完整显示4位数码管,但是显示的数值与电压表所显示不一致。
问题所在:adc0808输出的8位与单片机的P0口连接顺序不一致。
(精校版)用lcd1602和adc0808设计的数字电压表
![(精校版)用lcd1602和adc0808设计的数字电压表](https://img.taocdn.com/s3/m/c5862821aef8941ea66e055d.png)
(完整word版)用lcd1602和adc0808设计的数字电压表编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整word版)用lcd1602和adc0808设计的数字电压表)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整word版)用lcd1602和adc0808设计的数字电压表的全部内容。
学习情境6—数字电压表的设计之用lcd1602和adc0808设计的数字电压表☆点名,复习1、ADC0832的引脚及其功能,以及与单片机的硬件连接?引言:数字电压表的基本工作原理是利用A/D转换电路将待测的模拟信号转换成数字信号,通过相应换算后将测试结果以数字形式显示出来的一种电压表.较之于一般的模拟电压表,数字电压表具有精度高、测量准确、读数直观、使用方便等优点。
数字电压表的核心部件是A/D转换器,由于各种不同的A/D转换原理构成了各种不同类型的DVM。
一般说来,A/D转换的方式可分为两类:积分式和逐次逼近式。
积分式A/D转换器是先用积分器将输入的模拟电压转换成时间或频率,再将其数字化。
根据转化的中间量不同,它又分为U—T(电压—时间)式和U-F(电压-频率)式两种.逐次逼近式A/D转换器分为比较式和斜坡电压式,根据不同的工作原理,比较式又分为逐次比较式及零平衡式等。
斜坡电压式又分为线性斜坡式和阶梯斜坡式两种。
在高精度数字电压表中,常采用由积分式和比较式相结合起来的复合式A/D转换器。
本设计以AT89C51单片机为核心,以逐次比较型A/D转换器ADC0808、液晶显示器LCD1602为主体,构造了一款简易的数字电压表,能够测量1路0~5V直流电压,最小分辨率0.02V。
用ADC0832设计的两路电压表
![用ADC0832设计的两路电压表](https://img.taocdn.com/s3/m/f9d1597f1ed9ad51f11df204.png)
题目:基于ADC0832的两路电压表设计_所在院系:电气工程与自动化学院专业:10自动化入学时间:二〇一〇年九__月导师所在单位:电气工程与自动化学院完成时间:二〇一四年五月摘要数字电压表是采用数字化测量设计的电压仪表。
目前,其作为数字化仪表的基础和核心,已被广泛应用于电子和电工测量、工业自动化仪表、自动测试系统等领域,显示出强大的生命力。
与此同时,数字电压表扩展而成的各种通用及专用仪器仪表,也将电量及非电量测量技术提高到崭新水平。
本设计为直流数字电压表。
利用单片机AT89C51借助软件实现数字显示功能、自动校准、LED显示,A/D转换器采用ADC0832构成数模转换电路。
该电压表测量范围在0~5V。
由于采用高性能的单片机芯片为核心,同时利用LED数码管为显示设备,这样就使显示清晰直观、读数准确,减少了因为人为因素所造成的测量误差事件,同时提高了测量的准确度。
关键词:AT89C51;A/D转换;LED目录目录 (3)第1章绪论 (4)1.1 选题背景 (4)1.2 主要特点 (6)第2章方案论证及方案选择 (7)2.1方案论证 (7)2.2方案选择 (8)第3章主要元器件介绍 (9)3.1 ADC0832的介绍 (9)3.1.1引脚及功能介绍 (9)3.1.2 内部介绍 (10)3.1.3芯片的操作方法 (10)3.2 AT89C51的介绍 (12)3.2.1引脚及功能介绍 (12)3.2.2内部介绍 (14)3.2.3芯片的操作方法 (14)3.3 SCD1602的介绍 (15)3.3.1引脚及功能介绍 (15)3. 3. 2内部介绍 (16)3. 3. 3 芯片的操作方法 (16)第4章系统硬件设计 (17)4.1 最小系统电路 (17)4.1.1 时钟电路 (17)4.1.2 复位电路 (18)4.2 模数转换电路 (19)4.2.1转换电路 (19)4.3 液晶显示电路 (20)4.3.1显示电路 (20)4.4 硬件结构图 (21)第5章系统软件设计 (22)5.1 主程序设计 (22)5.2 A/D转换程序 (23)第6章程序清单 (24)致谢 (33)参考文献........................................................................................................................................ .37第1章绪论1.1 选题背景近年来计算机技术及微电子器件在工程技术中应用十分广泛。
基于ADC0808电路设计的数字电压表
![基于ADC0808电路设计的数字电压表](https://img.taocdn.com/s3/m/734ae16c7e21af45b307a817.png)
基于ADC0808/0809数字电压表的设计(下节试验制作万年历)作成:宗茂伟先看先成品电路:摘要:本文主要介绍基于单片机8051和ADC0808数模转换电路的制作目的:深入的学习软件的编写,初步的学习ADC电路在实际电路中的应用,加强动手能力。
从实际的电路学习联想到实际车载平台的应用。
一、设计思路:⑴根据设计要求,选择AT89C51单片机为核心控制器件。
⑵A/D转换采用ADC0808实现,与单片机的接口为P1口和P2口的高四位引脚。
⑶电压显示采用4位一体的LED数码管。
⑷LED数码的段码输入,由并行端口P0产生:位码输入,用并行端口P2低四位产生。
二:硬件平台:三、硬件介绍:STC8052就不用说了,下面主要说说ADC0808现实世界的物理量都是模拟量,能把模拟量转化成数字量的器件称为模/数转换器(A/D转换器),A/D转换器是单片机数据采集系统的关键接口电路,按照各种A/D芯片的转化原理可分为逐次逼近型,双重积分型等等。
双积分式A/D 转换器具有抗干扰能力强、转换精度高、价格便宜等优点。
与双积分相比,逐次逼近式A/D转换的转换速度更快,而且精度更高,比如ADC0809、ADC0808等,它们通常具有8路模拟选通开关及地址译码、锁存电路等,它们可以与单片机系统连接,将数字量送到单片机进行分析和显示。
一个n位的逐次逼近型A/D转换器只需要比较n次,转换时间只取决于位数和时钟周期,逐次逼近型A/D转换器转换速度快,因而在实际中广泛使用[1]。
逐次逼近型A/D转换器是由一个比较器、A/D转换器、存储器及控制电路组成。
它利用内部的寄存器从高位到低位一次开始逐位试探比较。
转换过程如下:开始时,寄存器各位清零,转换时,先将最高位置1,把数据送入A/D转换器转换,转换结果与输入的模拟量比较,如果转换的模拟量比输入的模拟量小,则1保留,如果转换的模拟量比输入的模拟量大,则1不保留,然后从第二位依次重复上述过程直至最低位,最后寄存器中的内容就是输入模拟量对应的二进制数字量[5]。
PCB项目说明书 用 ADC0832 设计的两路电压表(用 LCD1602显示)
![PCB项目说明书 用 ADC0832 设计的两路电压表(用 LCD1602显示)](https://img.taocdn.com/s3/m/fe236274783e0912a2162a1e.png)
利用单片机 STC89C52 与 ADC0832 设计一个两路电压表,将模拟信号 0~5V 之间的电压值转换成数字量信号,并在 LCD1602 显示屏上显示,通过虚拟电压表 观察 ADC0832 模拟量输入信号的电压值,LCD1602 实时显示相应的数值量。
项目要求: (1)LCD 显示清晰无鬼影不闪烁 (2) 程序设计中,要使 LCD 显示变化的电压
图 3-2 ADC0832 时序图
集成模数转换芯片 ADC0832 实现的 A/D 转换电路如图 3-2 所示。被测信号 由 ADC0832 模拟输入端输入,完成 A/D 转换后送入单片机,经相应处理后送出 显示。
4 液晶显示屏 LCD1602 简介
1602 液晶显示器它是一种专门用来显示字母、数字、符号等的点阵型液晶 模块。它有若干个 5*7 或者 5*11 等点阵字符位组成,每个点阵字符位都可以显 示一个字符。其为 5V 电压驱动,带背光,可显示两行,每行 16 个字符,内置 含 128 个字符的 ASC 字符集字库,只有并行接口,无串行接口。其中 D0~D7 与单片机的 P0.0~P0.7 相连接,RS 与单片机的 P2.0 相连接,R/W 与单片机的 P2.1 相连,E 与单片机 P2.2 相连。
当前地址指针的数值
原则上每次对控制器进行读写操作之前,都必须进行读/写检测,确保 SAT7 为 0。实际上,由于单片机的操作速度慢于液晶控制器的反应速度,因此可以不 进行读/写检测,或只进行简短的延时即可。
c)数据指针设置见表 4-3。 控制器内部设有一个数据地址指针,用户可以通过它们访问内部的全部 80B 的 RAM。
电源地
2
VDD
电源正极
3
VO
液晶显示对比度调节端
ADC0832的数字电压表设计说明
![ADC0832的数字电压表设计说明](https://img.taocdn.com/s3/m/6507c79aa8956bec0875e3d2.png)
目录1. 引言 (1)2. 方案设计 (1)2.1设计要求 (1)2.2设计方案 (1)3. 硬件设计 (2)3.1单片机最小系统 (2)3.2显示驱动部分 (2)3.3转换电路 (3)3.4单片机驱动部分 (3)4. 软件设计 (4)4.1软件流程 (4)4.2子程序模板 (5)5实验结果与讨论 (5)5.1实验仿真 (5)5.2结果讨论 (5)6心得体会 (6)7参考文献 (13)8附录8.1程序 (7)8.2原理图 (7)1. 引言随着片机技术的飞速发展,,现代的电子产品几乎渗透到了社会的各个领域,有力地推动了社会生产力的发肢和社会信息化程度的提商,人们为了寻求最好的科技,为了方便人类在使用科技产品的快速性,准确性。
例如数字电压表能够准确的,快速的量出电压。
利用ADC0832和AT89C52的结合再通过LCD来显示出来。
ADC0832是一个8位D/A转换器。
单电源供电,从+5V〜+15V均可正常工作。
基准电压的围为土10V;电流建立时间为1卩S; CMOS:艺,低功耗20mWADC0832 转换器芯片为20引脚,双列直插式封装。
该转换器由输入寄存器和DAC寄存器构成两级数据输入锁存。
使用时数据输入可以采用两级锁存(双锁存)形式,或单级锁存(一级锁存,一级直通)形式,或直接输入(两级直通)形式。
2. 方案设计2.1设计要求按系统要实现功能,设计必须达到以下的几个步骤的要求(1)主电路系统是由ADC0832单片机AT89C52和LCD显示屏组成。
(2)ADC083是模拟数字转换芯片,是将外侧电压信号转换成数字信号再通过AT89C52处理,再通过LCD显示出来(3)能测量0-5V的数字电压(4)测量误差不大于0.1V2.2设计方案2.1.1 单片机的选择本设计选用单片机AT89C52它是一种带8K字节闪烁可编程可擦除只读存储器的低电压,足够本设计之用,高性能CMOS位微处理器该器件采用ATME高密度非易失存储器制造技术制造,与工业标准的MCS-51指令系统及8052产品引脚兼容,功能强大、使用方便的AT80C52单片机适用于许多较为复杂的应用场合。
基于ADC0832的数字电压表设计报告
![基于ADC0832的数字电压表设计报告](https://img.taocdn.com/s3/m/f1907d55f56527d3240c844769eae009581ba2cc.png)
基于ADC0832的数字电压表设计报告设计题目:基于ADC0832数字一路电压表电路设计专业班级:电气工程及其自动化1024 学号:22 、32 、21姓名:杨青涛、康爱丽、孟广琴指导教师:瓮嘉民目录基于ADC0832的一路数字电压表设计 (3)1、电压表设计原理图 (3)2、PROTEUS仿真图 (4)3、原理图 (5)4、PCB图 (6)5、实物图 (7)6、报告 (8)1、设计方案 (8)2、电路特色 (9)3、功能介绍 (10)4、流程图、 (11)5、1感受(康爱丽) (13)5、2感受(孟广琴) (14)5、3感受(杨青涛) (15)6 参考资料 (16)基于ADC0832的一路数字电压表设计1、电压表设计原理图2、proteus仿真图5、实物图第二组:杨青涛孟广琴基于ADC0832的一路数字电压表设计康爱丽6、报告1、设计方案通过一个A/D(ADC0832模拟数字转换)芯片采集后将外测电压信号转换为数字信号,再由单片机(AT89S52)处理信号,输出信号,由LCD1602显示各路电压。
89S52引脚图2、电路特色设计以单片机at89s52芯片为核心的简单电压测量电路,它由5V直流电源供电。
在硬件方面,通过可变电阻调节输入电压的变化来反映检测到的电压变化。
通过A/D转换后数字量在单片机at89s52处理在转换成相应的实际电压,通过LCD1602显示器进行显示。
LCD 显示电压实现零辐射、低功耗、散热小、体积小、图像还原精确、字符显示锐利等。
3、功能介绍该电压表由单片A/D转换器构成,在很大的电压情况下,电压表去测量时会对其并联很大的电阻分掉高压,然后再进行测量,这时本来很大的电压,到后来测出来的电压就会很小,这就是A|D转换实现低压电压表测量高压液晶与89S52的接口4、流程图、(1)主程序(2)液晶模块电压显示流程图(3 ) 电压显示5、1感受(康爱丽)问1:while(1){}部分的流程图咋画?答1:这段语句说明结构体是一个死循环,这样就该明白咋画了问2:画循环时需要在横线上添加Y和N该咋添加?答2:经百度查询后我明白了一般只有封闭图形才可以直接添加文字的,比如矩形,这个问题还得用文本框解决,具体方法是设置文本框属性线条颜色和填充颜色都设置为无;这样就可以实现了。
单片机毕业论文基于LCD显示技术的数字电压表设计
![单片机毕业论文基于LCD显示技术的数字电压表设计](https://img.taocdn.com/s3/m/9132db29941ea76e59fa0499.png)
单片机毕业论文基于LCD显示技术的数字电压表设计基于LCD显示技术的数字电压表设计基于LCD显示技术的数字电压表设计摘要:本报告介绍了基于AT89S52单片机为核心的、以AD0809数模转换芯片采样、以1602液晶屏显示的具有电压测量功能的具有一定精度的数字电压表。
在实现基础功能要求之上扩展了串口通讯、时钟功能、高压报警、短路测试、电阻测量、交流电压峰峰值和周期测试等功能,使系统达到了良好的设计效果和要求。
关键词:AT89S52单片机模数转换液晶显示扩展功能Based on the LCD display technologyof digital voltmeter designAbstract: The report describes the AT89S52 based on the microcontroller as the core, AD0809 digital-to-analog converter chip sampling, to 1602 LCD display with voltage measurement function with a certain precision of digital voltage meter. In achieving functional requirements based upon the expansion of serial communications, high-pressure alarm, short circuit, electrical resistivity measurement, AC voltage and the peak of cycle testing and other functions, allowing the system to achieve good results and the design requirements.Keywords: AT89S52 SCM analog-to-digital conversion functions LCD expansion1基于LCD显示技术的数字电压表设计目录绪论.......................................................................................3 1数字电压表简介........................................................................4 1.1数字电压表的介绍 (4)1.2数字电压表的基本结构及工作原理…………………………………………4 1.3数字电压表的发展趋势……………………………………………………5 2单片机的概述………………………………………………………………62.1单片机简介………………………………………………………………6 2.2单片机的特点……………………………………………………………7 2.3单片机的应用……………………………………………………………7 3 方案论证..............................................................................8 3.1 CPU的选择...........................................................................8 3(2 液晶显示器的选择 (11)3.2.1液晶显示原理………………………………………………………………11 3.2.2液晶显示器各种图形的显示原理………………………………………11 4系统硬件设计……………………………………………………………………184.1硬件电路系统框图.....................................................................18 4.2软件设计流程图........................................................................18 4.3电源电路设计 (20)4.4 CPU系统设计………………………………………………………………20 4.5 CPU与显示器接口电路设计…………………………………………………21 4.6数字电压表硬件电路………………………………………………………23 总结体会....................................................................................24 致谢.......................................................................................25 参考文献 (26)附录 (27)附录1: 部分系统源程序附录2:运行图片及部分数据2基于LCD显示技术的数字电压表设计0绪论单片微型计算机简称单片机,又称微控制器,特别适用于控制领域。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学习情境3-数字电压表的设计之基于ADC0832和LCD160128设计的数字电压表☆点名,复习1、ADC0832的引脚及其功能,以及与单片机的硬件连接?2、PCF8591的引脚及其功能,以及与单片机的硬件连接?引言:新课讲授3.4基于ADC0832和LCD160128设计的数字电压表3.4.1 LCD160128简介LCD160128是一种图形点阵液晶显示模组。
它用T6963C作为控制器,KS0086作为驱动的160(列)X128(行)的全点阵液晶显示。
具有与INTER8080时序相适配的MPU接口功能,并有专门的指令集,可完成文本显示和图形显示的功能设置。
LCD160128液晶显示器的工作电压为+5V士10%,能够显示显示10个(/行)X8共120个(16 X 16点阵)的中文字符,共有13条操作指令。
1.芯片引脚及其功能表1引脚功能2.与主控制器的通信(1)读状态在数据读写操作之前必须进行状态检查。
T6963C的状态可以从数据总线中读取。
此时RD#和CE#引脚为低电平,WR#和C/D#引脚为高电平。
状态字格式如下所示:MSB LSBSTA7 D7STA6D6STA5D5STA4D4STA3D3STA2D2STA1D1STA0D0表2 状态子STA0 指令读写状态0:禁止;1:使能;STA1 数据读写状态0:禁止;1:使能;STA2 自动模式数据读状态0:禁止;1:使能;STA3 自动模式数据写状态0:禁止;1:使能;STA4 保留STA5 控制器操作状态0:禁止;1:使能;STA6 读屏/考屏错误标志0:无错误;1:错误;STA7 闪烁状态检查0:关显示;1:正常显示注意1:必须同时检查STA0与STA1的状态,由于硬件中断可能引起数据错误操作。
注意2:STA0与STA1用于大多数模式的状态检查。
注意3:STA2与STA3用于自动模式数据读写使能,此模式下,STA0与STA1无效。
状态检查流程:图1 状态检查流程图注意4:如果使用MSB=0命令,则必须先读取状态操作。
如果没有进行状态检查,则T6963C 不能正常操作,就是延时后也不行。
当硬件中断发生在地址计算周期期间时(每一行的最后),如果MSB=0命令在此期间发送给T6963C,则T6963C进入等待状态。
如果在下一个命令到来之前没有进行状态检查操作,则很有可能数据与命令都无法到达。
a) 一个数据情况b) 两个数据情况图2 命令发送步骤(2)数据发送在使用T6963C时,都是先发送数据,后发送命令。
(3)命令发送步骤,见图2。
当发送的数据多于两个时,最后一个数据有效。
3.命令定义LCD160128液晶显示器能够显示显示10个(/行)X8共120个(16 X 16点阵)的中文字符,共有13条操作指令。
我们主要学习其具体的用法。
表3 T6963C控制命令码表命令编码数据1 数据2 功能二进制十六进制寄存器设置0010 0001 0x21 X地址Y地址设置光标位置0010 0010 0x22 偏移地址数据00H 设置CGRAM偏移地址0010 0100 0x24 地址低8位地址高8位设置地址指针设置控制字0100 0000 0x40 地址低8位地址高8位设置文本区起始地址0100 0001 0x41 列数00H 设置文本区宽度0100 0010 0x42 地址低8位地址高8位设置图形区起始地址0100 0011 0x43 列数00H 设置图形区宽度模式设置1000 x000 0x80 -- -- 逻辑“或”模式1000 x001 0x81 -- -- 逻辑“异或”模式1000 x010 0x82 -- -- 逻辑“与”模式1000 x011 0x83 -- -- 文本特性模式1000 0xxx Bit3 =0时,内部CG ROM模式内部CG ROM模式1000 1xxx Bit3 =1时,外部CG RAM模式外部CG RAM模式显示模式1001 0000 0x90 -- -- 关闭显示1001 xx10 Bit0为光标闪烁显示开关光标显示,闪烁关闭1001 xx11 Bit1为光标显示开关光标显示,闪烁显示1001 01xx Bit2为文本显示开关文本显示,图形关闭1001 10xx Bit3为图形显示开关文本关闭,图形显示1001 11xx 文本显示,图形显示光标形状选择1010 0000 0xA0 -- -- 1行(光标占的行数)1010 0001 0xA1 -- -- 2行1010 0010 0xA2 -- -- 3行1010 0011 0xA3 -- -- 4行1010 0100 0xA4 -- -- 5行1010 0101 0xA5 -- -- 6行1010 0110 0xA6 -- -- 7行1010 0111 0xA7 -- -- 8行数据自动读/写命令1011 0000 0xB0 -- -- 数据自动写设置1011 0001 0xB1 -- -- 数据自动读设置1011 0010 0xB2 -- -- 数据自动读/写结束数据读/写1100 0000 0xC0 数据-- 数据写,地址加1 1100 0001 0xC1 -- -- 数据读,地址加1 1100 0010 0xC2 数据-- 数据写,地址减1 1100 0011 0xC3 -- -- 数据读,地址减1 1100 0100 0xC4 数据-- 数据写,地址不变1100 0101 0xC5 -- -- 数据读,地址不变屏读命令1110 0000 0xE0 -- -- 屏读命令屏拷贝命令1110 1000 0xE8 -- -- 屏拷贝命令位置位/清除1111 0xxx 0xF0 -- -- Bit3 =0时,位清除;1111 1xxx -- -- -- Bit3 =1时,位置位;1111 x000 -- -- -- Bit0(LSB)1111 x001 -- -- -- Bit11111 x010 -- -- -- Bit21111 x011 -- -- -- Bit31111 x100 -- -- -- Bit41111 x101 -- -- -- Bit51111 x110 -- -- -- Bit61111 x111 -- -- -- Bit7(MSB)4.各指令功能详细分析在T6963C指令中有的指令需要参数的补充,T6963C指令参数的输入是在指令代码写入之前。
下面是T6963C指令写入的流程图。
图3 T6963C指令写入的流程图(1)读状态字(read status)格式:T6963C的状态字由7位标志位组成,它们是:1、当计算机写指令或一次读/写数据时,S0和S1要同时有效,即“准备好”状态。
2、当计算机使用自动读/写功能时,S2或S3将取代S0和S1作为标志位,此时计算机要判断他是否有效。
3、S6标志是考察T6936C屏读或屏拷贝执行情况的标志位。
4、S5和S7表示控制器内部运行状态,在T6936C的应用上不会使用它们。
对T6936C的软件操作每一次之前都要进行判“忙”,只有有不“忙”状态下计算机对T6936C的操作才有效。
(2)地址指针设置(Register set)命令编码HEX. 功能表述数据1 数据20010 0001 21H 设置光标位置X地址Y地址0010 0010 22H 设置CGRAM偏移地址偏移地址数据00H0010 0100 24H 设置地址指针地址低8位地址高8位设置光标位置(21H)光标位置由X、Y地址来确定,光标的移动只能用该命令实现。
从MPU读写数据是不会改变光标位置的。
X、Y的值由下面指定:X地址:00H~4FH(低7位有效)(0~80列)Y地址:00H~1FH(低5位有效)(0~32行)a.单屏幕(X地址:00H~4FH)Y地址:00H~0FHb.双屏幕(X地址:00H~4FH)上屏幕Y地址:00H~0FH下屏幕Y地址:10H~1FH设置CGRAM偏移地址(22H)偏移寄存器用来确定外部字符生成RAM(CG RAM)区域起始位置,T6963C使用如下16位地址总线:当T6963C配有外部字符生成器时,字符编码80H~FFH分配给内部字符生成器。
在外部字符生成模式下,字符编码00H~7FH分配给外部字符生成器。
??16位地址的高5位定义了外部显存CG RAM区域的起始地址,随后的8位表示字符的编码。
在内部CG ROM模式下,字符编码00H~7FH代表预定义内部CG ROM字符,而字符编码80H~FFH代表用户自定义的外部CG RAM字符。
在外部CG RAM模式下,所有256个00H~FFH编码都可代表用户自定义字符。
最低3位表示8行中的1行(8点)定义了字符的形状。
显示缓存地址与偏移寄存器的关系列表偏移地址数据CG RAM hex. 地址(Start to end)00000 0000~07FFH00001 0800~0FFFH00010 1000~17FFH11100 E000~E7FFH11101 E800~EFFFH11110 F000~F7FFH11111 F800~FFFFH(例1)偏移寄存器02H字符编码80H字符生成RAM起始地址0001 0100 0000 00001 4 0 0 H(例2)显存数据与显示字符对应关系γ与ζ通过字符生成RAM显示。
设置地址指针(24H)设置地址指针命令用于指定读写外部RAM的起始地址。
设置地址指针的流程图如下所示:(3)设置控制字命令设置文本区起始地址(40H)用于文本显示的显示缓存区起始地址由该命令确定,文本起始地址指得是最上端和最左端位置。
显存地址与显示位置的对应关系TH:文本起始地址TA:文本区宽度(列数)CL:固定列数(硬件确定),可编程引脚确定。
(例)文本起始地址0000H文本区宽度(列)0020H(32列)MD2 = H, MD3 = H 32列DUAL# = H, MDS = L , MD0 = L, MD1 = H 4行(4行×32列)设置图形区起始地址(42H)用于图形显示的显示缓存区起始地址由该命令确定,图形起始地址指得是最上端和最左端位置。
显存地址与显示位置的对应关系GH:图形起始地址GA:图形区宽度(列数)CL:固定列数(硬件确定),可编程引脚确定。
(例)图形起始地址0000H图形区宽度(列)0020H(32列)MD2 = H, MD3 = H 32列DUAL# = H, MDS = L , MD0 = H, MD1 = H 2行设置文本区宽度(41H)文本区宽度(列数)由硬件确定,该命令可以用于调整文本显示列数。
(例)LCD大小20列,4行;文本区起始地址0000H文本区0014H(20列)MD2 = H, MD3 = H 32列DUAL# = H, MDS = L , MD0 = L, MD1 = H 4行设置图形区宽度(43H)图形区宽度(列数)由硬件确定,该命令可以用于调整图形显示列数。