ADC0832的数字电压表设计说明
基于ADC0832和LCD160128设计的数字电压表

学习情境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命令,则必须先读取状态操作。
用ADC0832设计的两路电压表

毕业设计题目用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,它运用的是数字化的测量技术,能够把连续的模拟量,也就是连续的电压值转变为不连续的数字量,加以数字处理然后再通过显示器件显示出来。
ADC0832数字电压表

信息与电气工程学院单片机应用系统(三级项目)设计说明书(2014/2015学年第二学期)题目:数字电压表设计与实现目录一、课程设计目的...................................................................................................................... - 1 -二、课程设计正文...................................................................................................................... - 1 -2.1 总体论述...................................................................................................................... - 1 -2.2 设计方案...................................................................................................................... - 2 -2.3 硬件元器件的选择与设计.......................................................................................... - 2 -2.3.1 AT89C51模块................................................................................................... - 2 -2.3.2 A/D数据转换模块........................................................................................... - 5 -2.3.3 LCD显示系统设计........................................................................................... - 7 -2.4 程序设计总方案.......................................................................................................... - 9 -2.4.1. 初始化程序.................................................................................................... - 9 -2.4.2显示子程序...................................................................................................... - 9 -2.4.3A/D转换子程序................................................................................................ - 9 -三、软件调试与仿真................................................................................................................ - 11 -3.1软件调试..................................................................................................................... - 11 -3.2数字电压表仿真......................................................................................................... - 11 -四、课程设计总结.................................................................................................................... - 11 -五、参考文献............................................................................................................................ - 12 - 附录 ........................................................................................................................................... - 13 -数字电压表设计与实现一、课程设计目的电压表已经有100多年的发展历史,虽然不断改进与完善,仍然无法满足现代电子测量的需求,近二十年,微电子技术,计算机技术,集成技术,网络技术等高新技术得到了迅猛发展。
ADC0832

ADC0832设计模块1、ADC0832的主要技术指标:(1)8位分辨率,逐次逼近型。
(2)5V电源供电时,基准电压为5V,输入模拟电压范围为0~5V。
(3)输入和输出电平与TTL和CMOS兼容。
(4)有两个可供选择的模拟输入通道。
(5)在250KHz时钟频率时,转换时间为32µs。
(6)一般功耗仅为15mW。
2、ADC0832引脚说明(1)/CS片选使能,低电平有效。
(2)CHO模拟通道0,差分输入时,作为IN+或IN-使用。
(3)CH1模拟输入通道1,差分输入时,作为IN+或IN-使用。
(4)GND 电源地。
(5)DI数据信号输出,选择通道控制。
(6)DO数据信号输出,转换数据输出。
(7)Vcc/Vre电源输入及参考电压输入(复用)。
(8)CLK芯片时钟信号3、ADC0832时序图4、运用ADC0832设计一个0-5V的数字电压表电路如图所示:设计要求:五位数码管动态显示,第一位显示通道状态(0、1)第二位显示C,第三位是个数,第三位和第四位数码管分别显示十分位和百分位;按键SW1选择通道0,按键SW2选择通道1,并且蜂鸣器和短时间鸣叫;调节滑动变阻器数码管的示数能在0.00~5.00之间变化。
C程序:/************************************************CAUCyeyongan*************************************************/#include <reg52.h>#include <intrins.h>#define uchar unsigned charsbit CS=P3^5;sbit Clk=P1^6; //时钟sbit DO=P3^7; //ADC0832输出引脚sbit DI=P3^6; //ADC0832输入引脚sbit key=P3^3; //按键bit keydownflg; //操作位的定义bit adc_flg;uchar dat,channel;uchar key_buffer;uchar P2_buffer;uchar Beep_cnt;uchar disp_cnt;uchar count4ms;uchar disp_buff[5]; //数码管显示缓存uchar code Tab1[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xA7,0 xA1,0x86,0x8E}; //共阳数码表uchar code Tab[5]={0x7f,0xbf,0xdf,0xef,0xf7}; //数码管位选表uchar A_D(uchar CH) //AD函数{uchar i,adval,test; //定义局部变量并初始化adval=0x00;test=0x00;Clk=0; //clk低电平DI=1; //DI初始高电平在第一个时钟脉冲的下降沿前保持高电平,表示启动信号_nop_();CS=0; //片选_nop_();Clk=1; //clk上升沿,起始位写入_nop_();if(CH==0x00) //选择通道0{Clk=0; //clk低电平DI=1;_nop_();Clk=1; //clk上升沿,通道0的第一位写入_nop_();Clk=0;DI=0;_nop_();Clk=1; //clk上升沿,通道0的第二位写入_nop_();}else{Clk=0;DI=1;_nop_();Clk=1; //clk上升沿,通道1的第一位写入_nop_();Clk=0;DI=1;_nop_(); //clk上升沿,通道1的第二位写入Clk=1;_nop_();}Clk=0;DI=1;for(i=0;i<8;i++) //从高位向低位读取八位AD值{_nop_();adval<<=1;Clk=1;_nop_();Clk=0;if(DO)adval|=0x01;elseadval|=0x00;}for(i=0;i<8;i++){test>>=1; //从低位向高位读取八位AD值if(DO)test|=0x80;elsetest|=0x00;_nop_();Clk=1;_nop_();Clk=0;}if(adval==test) dat=test; //判断两个读取值是否相等相等就把读取的数赋值给DAT_nop_();CS=1;DO=1;Clk=1;return dat;}void FillDispBuffer(void) //数码管显示缓存函数{disp_buff[0]=channel; //显示通道disp_buff[1]=12; //显示"C"disp_buff[2]=dat/51; //显示个位disp_buff[3]=dat%51*10/51; //显示十分位disp_buff[4]=((dat%51)*10%51)*10/51; //显示百分位}void dealkey(void) //按键处理{if(keydownflg) return; //keydownflg控制位为1,不对按键进行处理key_buffer=P2;if((key_buffer&0x80)!=0x80) channel=0; //选择通道0if((key_buffer&0x40)!=0x40) channel=1; //选择通道1FillDispBuffer(); //数码管显示缓存Beep_cnt=0;keydownflg=1; //keydownflg控制位置1 }void main(void) //主函数{P0=0xff; //初始化P2=0xff;dat=0x00;disp_cnt=0;count4ms=0;channel=0;TMOD=0x10;TH0=(65535-4000)/256;TL0=(65535-4000)%256;EA=1;TR0=1;ET0=1;while(1){if(adc_flg) //ADC转换控制位,防止输入与输出产生冲突{adc_flg=0;A_D(channel); //ADC函数FillDispBuffer(); //数码管显示缓存}if(!key) //按键dealkey();}}void T0_service(void) interrupt 1 //定时器0中断子函数{TH0=(65535-4000)/256;TL0=(65535-4000)%256;P2_buffer=Tab[disp_cnt]; //查表,数码管的位选择if(keydownflg) //蜂鸣器0.4s的短时间鸣叫{P2_buffer=P2_buffer&0xfe;Beep_cnt++;if(Beep_cnt==100) keydownflg=0;}P2=P2_buffer; //数码管显示数字符号if(disp_cnt==2) //第三位数码管显示小数点P0=Tab1[disp_buff[disp_cnt]]&0x7f;elseP0=Tab1[disp_buff[disp_cnt]];disp_cnt++; //if(disp_cnt==5) disp_cnt=0;count4ms++;if(count4ms==50) //0.2s ADC转换一次{adc_flg=1;count4ms=0;}}。
简易数字电压表课程设计

电子测量结课作业简易数字电压表指导教师:学院:专业班级:姓名:学号:摘要本文介绍了一种基于单片机的简易数字电压表的设计。
该设计主要由三个模块组成:A/D转换模块,数据处理模块及显示模块。
A/D转换主要由芯片ADC0832来完成,它负责把采集到的模拟量转换为相应的数字量在传送到数据处理模块。
数据处理则由芯片AT89C52来完成,其负责把ADC0832传送来的数字量经过一定的数据处理,产生相应的显示码送到显示模块进行显示;此外,它还控制着ADC0832芯片工作。
该系统的数字电压表电路简单,所用的元件较少,成本低,且测量精度和可靠性较高。
此数字电压表可以测量0-5V的1路模拟直流输入电压值,并通过一个LCD1602液晶屏显示出来。
关键词: 单片机;数字电压表;A/D转换;AT89C52;ADC0832目录1 数字电压表的简介 01.1数字电压表简介 01.2数字电压表的的背景与意义 02 设计总体方案 (2)2.1 设计要求 (2)2.2 设计思路 (2)2.3 设计方案 (2)3 硬件电路设计 (4)3.1 A/D转换模块 (4)3.2 单片机系统 (6)3.3 复位电路和时钟电路 (9)3.4 LCD显示系统设计 (10)3.5 总体电路设计 (12)4 程序设计 (13)4.1 程序设计总方案 (13)4.2 系统子程序设计 (13)5 仿真 (15)5.1软件调试 (15)5.2显示结果及误差分析 (15)5.2.1 显示结果 (15)5.2.2 误差分析 (17)结论 (19)参考文献 (20)附录............................................................................................... 错误!未定义书签。
1 数字电压表的简介1.1数字电压表简介在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。
第15章 采用ADC0832的两路电压表设计

{Wr1602Cmd(0x80+0x03);
i=RdAdc0832(0);
//读取Adc0832 0通道的
值
i=(i*5000/255);
Wr1602Dat('C');
//显示Adc0832 0通道的
值
Wr1602Dat('H');
Wr1602Dat('0');
Wr1602Dat('=');
Wr1602Dat('0'+i/1000);//个位
// LCD1602初始化函数
{ delay_ms(20);
Wr1602Cmd(0x38);
delay_ms(5);
Wr1602Cmd(0x38);
delay_ms(5);
Wr1602Cmd(0x06);
Wr1602Cmd(0x0c);
Wr1602Cmd(0x01); //清屏
Wr1602Cmd(0x80); //设置地址
Wr1602Dat('.');
Wr1602Dat('0'+i%1000/100); //小数点后一位
Wr1602Dat('0'+i%1000%100/10); //小数点后两位
Wr1602Dat('0'+i%1000%100%10); //小数点后三位
Wr1602Dat('V');
Wr1602Cmd(0xC0+0x03);
CLK=0;_nop_();_nop_();_nop_();_nop_();
DIO=Hx;_nop_();_nop_();_nop_();_nop_();//写通道号位
adc0832数字电压表(程序+仿真图)

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位的值,如果不相同舍去。
基于ADC0832数字电压表

阿坝师范高等专科学校电子信息工程系课程设计基于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:电源输入及参考电压输入。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录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单片机适用于许多较为复杂的应用场合。
2.1.2总体设计及系统原理数字电压表的整体设计比较简单,包括单片机,ADC0832的芯片和LCD的显示电路组成。
先通过ADC0832芯片将外侧电压信号转换成数字信号,再通过由AT89C52组成的电路处理转换成相应的实际电压,再通过LCD显示电路显示出来。
3.1.单片机最小系统单片机最小系统选用AT89C52,自动复位和手动复位电路可对单片机进行复位操作。
3.2.显示驱动部分本设计是选用LCD1602显示器进行显示,用来显示电压的数值。
LCD1602显示器成本低,配置灵活与单片机接口简单,在单片机应用系统中广泛应用 本设计采用LCD1602,它是一种专门用来显示字母,数字和符号等的点阵型的液晶模块。
它由若干个5×7或者5×11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔。
LCD1602显示器与AT89C52相连。
1602液晶模块部的控制器控制指令时 钟 电 路 A/D 转 换 部 分复 位 电 路AT89C52LCD 显 示 部3.3转换电路本设计是采用ADC0832芯片,ADC0832为8位分辨率A/D 转换芯片,,其最高分辨率可达256级,可以适应一般的模拟量的转换要求。
其部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V 之间,芯片转换时间仅为32μs 具有双数据输出可作为数据检控,以减少数据误差。
转换速度快且稳定性强。
独立的芯片使能输入,使多器件挂接和处理器控制变得更加方便。
通过DI 数据输入CS 1CH02CH13GND 4VCC 8CLK 7DI 5DO6U2ADC083251%RV11kC310uF一种8位分辨率,双通道A/D 转换芯片。
由于它体积小,兼容性,性价比高而深受单片机爱好者及企业欢迎。
ADC0832 为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。
其部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。
芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。
独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。
通过DI 数据输入端,可以轻易的实现通道功能的选择。
表:ADC0832配置位4,软件设计4.1软件流程在本设计实验里面单片机是对ADC0832的控制,在正常情况下ADC0832与单片机的接口应为4条数据线,分别是CS,CLK,DO.DI。
但由于DO端与DI端在通信时并未同事有效并与单片机的接口是双向的,,所以电路设计将DO和DI端并联在一根数据线上使用。
当ADC0832未工作时器CS输入端为高电平,此时芯片禁用CLK和DI/DO的电平可任意。
当进行A/D转换时,必须将CS使能端置于低电平并且保持低电平直到转换完全结束。
此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK输入时钟冲,DO/DI端则使用DI端输入通道功能选择的数据信号。
在第1个时钟脉冲的下沉之前DI端必须是高压平,表示启始信号。
在第2、3个脉冲下沉之前DI端输入2用于选择通道功能。
当此2位数据位“1”“0”时,只对CHO进行单通道转换。
当2位数据为“1”、“”时,只对CH1进行单通道转换。
当2位数据位“0”、“0”时,将CHO作为正输入端IN+,CH1作为负输入端IN—进行输入。
当2位数据位“0”、“1”时,将CHO作为负输入端IN-,CH1作为正输入端IN+进行输入。
到第3个脉冲的下沉之后DI端的输入电平就失去输入作用,此后DO/DI端则开始利用数据输出DO进行转换数据的读取。
从第4个脉冲下沉开始由DO端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。
直到第11个脉冲时发出最低位数据DATAO。
一个字节的数据输出完成。
也正是从此位开始输出一个相反字节的数据,即从第11个字节的下沉输出DATAO。
随后输出8位数据,到第19个脉冲时输出完成。
也标志着一次A/D转换的结束。
最后将CS置高平禁用芯片,直接将转换后的数据进行处理就可以了4.2子程序模块主要控制子程序说明如下:(1)delay:延时子程序;void delay(uint z)(2)void LCD_init(),是LCD1602的功能设定。
例如; LCD_write_cmd(0x38);delay(1);//功能设置,数据长度为8位,双行显示,5×7点阵字体。
(3)void LCD_display(uchar add,uchar s[])是lcd的显示程序。
5实验结果与讨论5.1实验仿真依据各功能模块的功能要求和工作过程画出程序的流程图,然后根据流程图和系统的硬件连接写出详细的程序,接着对各个子程序进行编译,调试,运行,看看是否能达到其功能,然后再将整个程序糅合在一起进行整体软件调试。
在整体调试中,需注意寄存器组不能重复,在进入中断时,哪些寄存器容和参数需入栈保护,以及调用子程序时各参数必须统一,在编译通过时,最好能把整个程序再单步执行一遍。
单步执行时看看每步执行完后数据各个特殊功能寄存器中数据的变化,这样才能确保整个程序按照系统的工作过程和功能要求执行。
仿真结果。
5.2讨论结果本设计以AT89C52单片机为系统的控制核心,采用proteus仿真软件进行测试。
Proteus是一款比较常用的单片机仿真软件,用proteus和keil配合进行仿真提高系统运行效率与稳定性。
6.心得体会通过这次设计,使我深入了解了AT89S52单片机和ADC0832(A\D转换器)的结构和特点及数字电压表的工作原理,加深了对课本理论知识的理解,锻炼了实践动手能力,理论知识与实践设计相结合,培养了创新开发的思维。
在此次课程设计中,收获知识的同时,我还收获了阅历。
此次单片机课程设计需要运用到许多之前所学过的知识,令我认识到自己以前学习的一些不足之处,例如对以前所学知识的理解不够深刻,掌握得不够牢固,运用不够灵活。
这让我懂得了认真学习的重要性,以及要孜孜不倦地钻研所学过的知识,做得融会贯通,不能一览而过,不求甚解。
在边学习边动手的过程中,我对电子时钟的构造以及原理有了进一步的了解,同时也加深和巩固了我对单片机语言的认识。
除此之外,由于是第一次做单片机,因此在此次课程设计的过程中,无论是电路绘制还是汇编语言编写都难免遇到了不少困难和障碍,例如C语言编写出错、电路元件无从入手等。
在面对困难和障碍时,我庆幸自己没有退缩和逃避,而是通过各种方法,迎难而上,以坚持、耐心和努力勇敢无畏地面对困难,克服困难,解决困难。
让我发现问题、分析问题、解决问题以及动手实践的能力都有了很大的提高,并了解到理论知识与实践相结合的重要意义。
7.1参考文献[1] 吴炳胜,80C51单片机原理及应用技术.北京.冶金工业个2008.[2] 林立,俊亮单片机原理及应用.北京.电子工业 2013[3] 蓝和慧,宁武,闫晓金,单片机应用技能.北京.电子工业 2009[4] 王宜怀.单片机原理及其嵌入式应用教程[M].北京希望电子,2002.[5] 蔡朝洋.单片机控制实习与专题制作.北京.北京航空航天大学 2006[6] 高禹.C语言程序设计.北京.清华大学 20118.附录1:程序1.)文件ADC0832.h#ifndef _ADC0832_H_#define _ADC0832_H_uchar ADC_read_data(uchar ch){uchar i,dat0=0,dat1=0;cs=0;clk=0;dio=1;delay_us();clk=1;delay_us(); //第一次下降沿之前DIO置高,起始信号clk=0;dio=1;delay_us();clk=1; //第二次下降沿输入dio=1delay_us();clk=0;dio=ch; //第三个下降沿,设DIO=0;delay_us();clk=1;delay_us();/*********二,三个下降沿选择通道1************************/ clk=0;dio=1; //第四个下降沿之前,设DIO=1delay_us();for(i=0;i<8;i++)//第4~11共8个下降沿读数据(MSB->LSB){clk=1;delay_us();clk=0;delay_us();dat0=dat0<<1|dio;}for(i=0;i<8;i++) //第11~18共8个下降沿读数据(LSB->MSB){dat1=dat1|((uchar)(dio)<<i);clk=1;delay_us();clk=0;delay_us();}cs=1; //判断dat0与dat1是否相等return (dat0==dat1)?dat0:0;}void ADC_change(uchar ch){dat=ADC_read_data(ch)*500.0/255;//dat变量要全局变量,重要LCD_buffer[ch][8]=dat/100+'0';LCD_buffer[ch][10]=dat/10%10+'0';LCD_buffer[ch][11]=dat%10+'0';}#endif2.)文件LCD1602.h#ifndef _LCD1602_H_#define _LCD1602_H_uchar LCD_check_busy(){uchar state;rs=0;rw=1;delay(2);en=1;state=P0;delay(2);en=0;delay(2);return state;}void LCD_write_cmd(uchar cmd){while((LCD_check_busy()&0x80)==0x80);rs=0;rw=0;delay(2);en=1;P0=cmd;delay(2);en=0;delay(2);}void LCD_write_data(uchar dat){while((LCD_check_busy()&0x80)==0x80); rs=1;rw=0;delay(2);en=1;P0=dat;delay(2);en=0;delay(2);}void LCD_display(uchar add,uchar s[]) {uchar i;LCD_write_cmd(0x80+add);for(i=0;i<16;i++)LCD_write_data(s[i]);}void LCD_init(){LCD_write_cmd(0x38);delay(1);LCD_write_cmd(0x0c);delay(1);LCD_write_cmd(0x06);delay(1);LCD_write_cmd(0x01);delay(1);}#endif3.)文件define.h#ifndef _DEFINE_H_#define _DEFINE_H_#define uchar unsigned char#define uint unsigned intsbit cs=P3^0;sbit clk=P3^1; //控制端口定义sbit dio=P3^2;sbit rs=P2^0;sbit rw=P2^1;sbit en=P2^2;uint j,add,dat;uchar LCD_buffer[][16]={{" CH1 = . V "},{" CH2 = . V "}};#endif4.)文件delay.h#ifndef _DELAY_H_#define _DELAY_H_void delay(uint z){uint x,y;for(y=z;y>0;y--)for(x=10;x>0;x--);}void delay_us(){_nop_();_nop_();}#include<reg52.h>#include<intrins.h>#include"define.h"#include"delay.h"#include"LCD1602.h"#include"ADC0832.h"5.)主函数void main(){LCD_init();while(1){for(j=0;j<2;j++){ if(j==0)add=0x00;elseadd=0x40;ADC_change(j);LCD_buffer[j][8]=dat/100+'0';LCD_buffer[j][10]=dat/10%10+'0';LCD_buffer[j][11]=dat%10+'0';LCD_display(add,LCD_buffer[j]);delay(1);}}}。