基于单片机的数字电压表【毕业设计】.doc

上传人:laozhun 文档编号:4148585 上传时间:2023-04-07 格式:DOC 页数:33 大小:739KB
返回 下载 相关 举报
基于单片机的数字电压表【毕业设计】.doc_第1页
第1页 / 共33页
基于单片机的数字电压表【毕业设计】.doc_第2页
第2页 / 共33页
基于单片机的数字电压表【毕业设计】.doc_第3页
第3页 / 共33页
基于单片机的数字电压表【毕业设计】.doc_第4页
第4页 / 共33页
基于单片机的数字电压表【毕业设计】.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《基于单片机的数字电压表【毕业设计】.doc》由会员分享,可在线阅读,更多相关《基于单片机的数字电压表【毕业设计】.doc(33页珍藏版)》请在三一办公上搜索。

1、广州大学松田学院 毕业论文(设计)题 目 基于单片机的数字电压表基于单片机的数字电压表设计摘要:随着电子科学技术的发展,电子测量成为广大电子工作者必须掌握的手段,对测量的精度和功能的要求也越来越高,而电压的测量甚为突出,因为电压的测量最为普遍。本设计在参阅了大量前人设计的数字电压表的基础上,利用单片机技术结合A/D转换芯片构建了一个八路电压巡检系统。然后详细的介绍了八路电压巡检系统的设计流程,以及硬件系统和软件系统的设计,并给出了硬件电路的原理图。本设计可以循环的在LCD1602上面显示八个电路的电压。可以测量05V范围。关键词:LCD1602,独立键盘,LCD显示管,多路电压采集。A vol

2、tage acquisition system based on MCUAbstract: with the development of electronic technology, electronic measuring a large number of electronic workers must master the means of measurement, the accuracy and functional requirements are increasingly high, while the voltage measurement is very prominent

3、, because the voltage measurement is most common. In the design of consulting a large number of previous design digital voltage meter based on A/D conversion chip, combined with the construction of a eight voltage inspection system using single chip computer technology. And then introduces the desig

4、n process of eight voltage inspection system, and the hardware and software design of the system, and the hardware circuit is given. This product can be recycled display eight circuit voltage at LCD1602. Can measure range of 05V.Keywords: LCD1602, keyboard, LCD display tube, a voltage acquisition.目

5、录1 绪 论51.1 目的和意义51.2 本系统主要研究内容52. 总体方案论证与设计62.1主控模块62.1.1 STC89C52单片机主要特性72.1.2 STC89C52单片机的中断系统72.1.3 STC89C52单片机的定时/计数器82.2 LCD液晶显示器简介82.2.1 液晶原理介绍82.2.2液晶模块简介82.2.3液晶显示部分与STC89C52的接口92.3键盘模块设计102.4 AD采集模块设计102.4.1 ADC0809 芯片简介102.4.2 引脚功能说明113.系统软件设计133.1系统软件总体设计133.2程序设计原理134.系统调试164.1硬件调试204.2软

6、件调试204.3调试结果205.结论22参考文献23附录24系统整体原理图24系统PCB设计图24系统源程序251 绪 论1.1 目的和意义在电量的测量中电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常,而且随着电子技术的发展,更是需要测量高精度的电压,所以基于单片机电压表测量仪器具有读数准确方便、精度高、误差小、灵敏度高和分辨率高,测量速度快等特点而倍受青睐。基于单片机电压表式采用数字化测量技术设计的电压表。具有读数直观、准确、显示范围宽、分辨率高、输入阻抗大、集成度高、功耗小、抗干扰能力强,可扩展能力强等特点,本设计从各个角度分析了由单片机组成的数字电压表的设计过程及各部分电

7、路的组成及其原理,并且分析了程序如何驱动单片机进而使系统运行起来的原理及方法。1.2 本系统主要研究内容数字电压表采用的是数字化测量技术,把连续的模拟量,也就是连续的电压值转变为不连续的数字量,加以处理后通过显示器显示出来。这次设计的硬件方面采用AT89C51单片机,A/D转换器采用ADC0809对输入的模拟信号进行转换,最后在LED屏显示出来。而这个设计主要拟解决的是在使用过程中避免由于传统电压表指针读书的方法而产生的读书视觉差和视觉疲劳,同时因为单片机体积小、重量轻、价格便宜,电路外围器件少,从根本上大大降低了研发成本。本系统设计制作一个基于单片机的多路电压采集系统。能实现以下几种功能:1

8、、键盘扫描,通过单片机检测用户按下的是哪个按键并执行相应的功能。2、单片机通过ADC0809采集8路的电压值并可以显示在液晶上。2. 总体方案论证与设计本系统以STC89C52单片机为控制核心,对系统进行初始化,主要完成对键盘的响应、LCD显示、AD采集等功能的控制,起到总控和协调各模块之间工作的作用。图2-1系统结构框图本系统结构如图2-1所示,本设计可分为以下模块:单片机主控模块、键盘模块、液晶模块、AD采集模块。下面对各个模块的设计方案逐一进行论证分析。2.1主控模块STC89C52单片机最初是由Intel 公司开发设计的,但后来Intel 公司把51 核的设计方案卖给了几家大的电子设计

9、生产商,譬如 SST、Philip、Atmel 等大公司。如是市面上出现了各式各样的但均以51 为内核的单片机,倒是Intel 公司自己的单片机却显得逊色了。这些各大电子生产商推出的单片机都兼容51 指令、并在51 的基础上扩展一些功能而内部结构是与51 一致的。STC89C52有40个引脚,4个8位并行I/O口,1个全双工异步串行口,同时内含5个中断源,2个优先级,2个16位定时/计数器。STC89C52的存储器系统由4K的程序存储器(掩膜ROM),和128B的数据存储器(RAM)组成。STC89C52单片机的基本组成框图见图2-2。图2-2 STC89C52单片机结2.1.1 STC89C

10、52单片机主要特性1. 一个8 位的微处理器(CPU)。2. 片内数据存储器RAM(128B),用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据等。3. 片内程序存储器ROM(4KB),用以存放程序、一些原始数据和表格。4. 四个8 位并行IO 接口P0P3,每个口既可以用作输入,也可以用作输出。5. 两个定时器计数器,每个定时器计数器都可以设置成计数方式,用以对外部事件进行计数,也可以设置成定时方式,并可以根据计数或定时的结果实现计算机控制。6. 五个中断源的中断控制系统。7. 一个全双工UART(通用异步接收发送器)的串行IO 口,用于实现单片机之间或单机与微机之间的串行

11、通信。8. 片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接。最高允许振荡频率为12MHz。2.1.2 STC89C52单片机的中断系统STC89C52系列单片机的中断系统有5个中断源,2个优先级,可以实现二级中断服务嵌套。2.1.3 STC89C52单片机的定时/计数器89C52单片机内集成有两个可编程的定时/计数器:T0和T1,它们既可以工作于定时模式,也可以工作于外部事件计数模式,此外,T1还可以作为串行口的波特率发生器。2.1.4STC98C52烧录过程1、选择我所使用的单片机型号,就是STC89C52RC2、打开文件,要烧录用户程序,调入用户的程序代码(*.bin,*hex)3

12、、选择串口,我选择的是1-COM1。4、设置是否双倍速,我选择的是双倍速,也就是Double Speed。5、选择“Download/下载”按钮,下载我所使用的程序进单片机内部,我是选择“Download/下载”按钮,然后再给单片机上电复位。2.2 LCD液晶显示器简介2.2.1 液晶原理介绍液晶显示器(LCD)英文全称为Liquid Crystal Display,它一种是采用了液晶控制透光度技术来实现色彩的显示器。和CRT显示器相比,LCD的优点是很明显的。由于通过控制是否透光来控制亮和暗,当色彩不变时,液晶也保持不变,这样就无须考虑刷新率的问题。本系统显示部分用的是LCD液晶模块,采用一

13、个161的字符型液晶显示模块。 2.2.2液晶模块简介LCD1602液晶模块采用HD44780控制器,hd44780具有简单而功能较强的指令集,可以实现字符移动,闪烁等功能,LM016L与单片机MCU通讯可采用8位或4位并行传输两种方式,hd44780控制器由两个8位寄存器,指令寄存器(IR)和数据寄存器(DR)忙标志(BF),显示数RAM(DDRAM),字符发生器ROMA(CGOROM)字符发生器RAM(CGRAM),地址计数器RAM(AC)。IR用于寄存指令码,只能写入不能读出,DR用于寄存数据,数据由内部操作自动写入DDRAM和CGRAM,或者暂存从DDRAM和CGRAM读出的数据,BF

14、为1时,液晶模块处于内部模式,不响应外部操作指令和接受数据,DDTAM用来存储显示的字符,能存储80个字符码。LCD1602液晶模块的引脚图如图2-5所示。图2-5LCD1602引脚图寄存器选择控制如表2-1。表2-1寄存器选择控制RSR/W操作说明00写入指令寄存器(清除屏等)01读busy flag(DB7)以及读取位址计数器(DB0DB6)值10写入数据寄存器(显示各字型等)11从数据寄存器读取数据2.2.3液晶显示部分与STC89C52的接口 如图2-6所示。用STC89C52的P2口作为数据线,用P3.2、P3.1、P3.0分别作为LCD的E、R/W、RS。其中E是下降沿触发的片选信

15、号,R/W是读写信号,RS是寄存器选择信号本模块设计要点如下:显示模块初始化:首先清屏,再设置接口数据位为8位,显示行数为1行,字型为57点阵,然后设置为整体显示,取消光标和字体闪烁,最后设置为正向增量方式且不移位。向LCD的显示缓冲区中送字符,程序中采用2个字符数组,一个显示字符,另一个显示电压数据,要显示的字符或数据被送到相应的数组中,完成后再统一显示.首先取一个要显示的字符或数据送到LCD的显示缓冲区,程序延时2.5ms,判断是否够显示的个数,不够则地址加一取下一个要显示的字符或数据。图2-6 LCD1602与STC89C52的接口2.3键盘模块设计图2-7键盘模块电路图硬件电路设计图如

16、上图所示。把单片机的P2.0P2.7端口通过8联拨动拨码开关连接到“4*4行列式键盘”,其中P2.0-P2.3作为列线,P2.4-P2.7作为行线,系统首先通过CPU对全部键盘进行扫描,即把第一根行线置为“0”状态,其余行线置于“1”状态,读入输入缓冲器的状态,若其状态全为“1”表明该行无键按下,再将第二根行线置为“0”状态,同样读入输入缓冲器的状态,如其状态也全为“1”,则置第一根行线置为“0”状态,以此类推5。如读入输入缓冲器的状态不全为“1”,确定哪一根列线为“0”状态,当某个键的行线和列线都为“0”状态时,表明该键按下。2.4 AD采集模块设计2.4.1 ADC0809 芯片简介ADC

17、0809具有8个通道的模拟输入线,在程序控制下对任意通道进行A/D转换。模拟输入部分有8路多路开关,可由3位地址输入ADDA、ADDB、ADDC的不同组合来选择,ALE为地址锁存信号,高电平有效,锁存这三条地址输入信号。主体部分是采用逐次逼近式的A/D转换电路,由CLK控制的内部电路的工作,START为启动命令,高电平有效,启动ADC0809内部的A/D转换,当转换完成,输出信号EOC有效,OE为输出允许信号,高电平有效,打开输出三态缓冲器,把转换后的结果送DB。图5.2 ADC0809管脚图转换数据的传送 A/D转换后得到的数据应及时传送给单片机进行处理。数据传送的关键问题是如何确认A/D转

18、换的完成,因为只有确认完成后,才能进行传送。 2.4.2 引脚功能说明IN0IN7:8路模拟量输入端。 2-12-8:8位数字量输出端。 ADDA、ADDB、ADDC:3位地址输入线,选通8路模拟输入中的一路 。ALE:地址锁存允许信号,输入,高电平有效。 START: A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。 EOC: A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。 OE:数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输

19、出数字量。 CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ。 REF(+)、REF(-):基准电压。 Vcc:电源,单一电源:+5V。 GND:地。2.5时钟模块的设计3.系统软件设计3.1系统软件总体设计图3-1系统流程图3.2程序设计原理软件任务分析和硬件电路设计结合进行,哪些功能由硬件完成,哪些任务由软件完成,在硬件电路设计基本定型后,也就基本上决定下来了。软件任务分析环节是为软件设计做一个总体规划。从软件的功能来看可分为两大类:一类是执行软件,它能完成各种实质性的功能,如测量,计算,显示,打印,输出控制和通信等,另一类是监控软件,它是专门用来协调各执行模块和操作者的关系,在系统

20、软件中充当组织调度角色的软件。3.2.1 ADC0809多路电压检测函数程序代码如下:void delayms(unsigned int z) /延时函数,z为多少就延时多少毫秒 unsigned int x,y;for(x = z; x 0 ; x-)for(y = 110 ; y 0 ; y-);void dep_key_scan(void) /独立键盘扫描子函数 /P1 |= 0x18; /每次扫描前,先将接键盘的引脚口拉高 if(key_1 = 0) /如果检测到有键按下 delayms(10); /延时10msif(key_1 = 0) /再次判断是否确实按下按键,进行消抖操作。 f

21、lag = flag;if(key_2 = 0) /同上,判断第二个按键情况 delayms(10);if(key_2 = 0)ax+;void main(void)LCDInit();LCDDispString(2,1,CH voltage);LCDDispString(9,2,V);TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;ET0=1;EA=1;while(1) if(ax=8)ax=0;sel_Ax(ax); /选择通道ST=0;ST=1;ST=0;while(EOC=0);OE=1;getdata=P2; /

22、获取电压值cov2V(getdata,ax);divite_num(ax);OE=0;dep_key_scan();if(count_time = 40) if(flag = 0 )/轮换显示LCDDispNum(4,1,ax+1);LCDDispString(5,2,dispbuf);ax+;if(flag = 1)LCDDispNum(4,1,ax+1);LCDDispString(5,2,dispbuf);count_time = 0;void t0(void) interrupt 1 using 0TH0=(65536-50000)/256;TL0=(65536-50000)%256;

23、count_time +;3.2.2 LCD1602程序代码如下void DelayN40us(unsigned int n)-延时函数,延时40us的整数倍,传入值n代表延时,时间到n *40us,不能实现准确延时,只能实现大概时间的延时,利用的是指令实现延时功能。开始for(i=n;i0;i-)for(j=0;j2;j+); 输入 unsigned int i; unsigned char j; void LCD init (void) -液晶初始化函数,对LCD1602进行 初始化操作,在每一次实用液晶前必须用 到的,外部可调用函数。LCD Write Command(0x38); -设

24、置8位格式,2行,5x7*LCD Write Command(0x0c) -整体显示,关光标,不闪烁LCD Write Command(0x06) -设定输入方式,增量不移位LCD Write Command(0x01) -清除屏幕显示 DelayN40us(100) -清屏延时 void LCD Write Command(unsigned char dat) -写命令函数,对LCD1602内部寄存器进 行操作。LCD_DB=dat; LCD_RS=0; - 选择写指令LCD_RW=0 -写入指令值 LCD_E=1 -使能LCD1602LCD_E=0 DelayN40us(1) -写命令延时

25、 void LCD Disp Char(unsigned char x,unsigned char y,unsigned char dat) -在某个屏幕位置上(x,y)位置显示一个字符, 可外部调用 unsigned char address;if(y=1) YES NOaddress=0x80+x; - 显示在第一排的时候的x的地址address=0xc0+xLCD Write Command(address); -显示在第二排的时候的x的地址 LCD Write Data(dat); -输入地址 -输入数据void LCD Disp Num (unsigned char x,unsign

26、ed char y,unsigned char dat) -在某个屏幕位置上(x,y)位置显示一个 数字,可外部调用unsigned char address;if(y=1) address=0xc0+x;address=0x80+x; YES NO -显示在第一排的时候的x的地址 -显示在第二排的时候的x的地 址LCD Write Command(address); LCD Write Data(dat+48); -输入地址 -输入数据void LCD Disp String(unsigned char x,unsigned char y,unsigned char *string) -在屏

27、幕上显示一串字符,考虑 到我的数值均存储于数组中,为方便而作,允许外部调用while(*string != 0) -没有检测到字符串结尾时 LCD Disp Char(x,y,*string+)x+ -逐个显示字符串 -地址+1void LCD Disp Num Int(unsigned char x,unsigned char y,unsigned int dat) -在某个屏幕位置上(x,y)位置显示一个无符号整形数字,可外部调用。 unsigned char temp5,i = 0,j=0; - -分离万千百十个各个位临时存储temp0 = dat/10000%10;temp1 = da

28、t/1000%10;temp2 = dat/100%10;temp3 = dat/10%10;temp4 = dat%10;while(tempi = 0)&(i!=4) i+ -为保证即使传入的数都是0也能显示,加上i!=4for(j=0;j5-i;j+) -依次显示各个数4.系统调试4.1硬件调试基于单片机的多路电压采集系统的电路较大,对于焊接方面更是不可轻视,庞大的电路系统中只要出于一处的错误,则会对检测造成很大的不便,而且电路的交线较多,对于各种锋利的引脚要注意处理,否则会刺破带有包皮的导线,则会对电路造成短路现象。在本基于单片机的多路电压采集系统的设计调试中遇到了很多的问题。回想这些

29、问题只要认真多思考都是可以避免的,以下为主要的问题:一开始的时候把ADC0809的数据线接错了一根导致不能正常的采集数据,后来修正后便正常工作。4.2软件调试单片机的多路电压采集系统是多功能的数字型,所以对于它的程序也较为复杂,所以在编写程序和调试时出现了相对较多的问题。最后经过多次的模块子程序的修改,一步一步的完成,最终解决了软件。在软件的调试过程中主要遇到的问题如下:1烧入程序后,LCD液晶显示闪动,而且亮度不均匀。解决:首先对调用的延时进行逐渐修改,可以解决显示闪动问题。其次,由于本作品使作动态扫描方式显示的数字,动态扫描很快,人的肉眼是无法看出,但是调用的显示程序时,如果不在反回时屏蔽

30、掉最后的附值,则会出现很亮的现象,所以在显示的后面加了屏蔽子令,最后解决了此问题。2当用户按下按键的时候,单片机读取的数值跟设定的数值不对。解决:重新检查矩阵键盘电路的连接,重新建立一个新的对应关系。4.3调试结果(1)在测试中遇到LCD液晶为不显示时,首先使用试测仪对电路进行测试,观察是否存在漏焊,虚焊,或者元件损坏.经过一系列的问题查找后系统最终能正常工作,并完成所有的功能。ChanelVoltageCh10.07VCh20.39VCh30.25VCh40.11VCh50.29VCh60.41VCh70.07V5.结论通过这次毕业设计,我学到了不少课本上没有的知识,也锻炼了自己的动手能力,

31、将以前学过的零散的知识串到一起。经过我长时间的设计及调试,本系统基本能实现单片机的多路电压采集系统的所有功能。不足之处有:1.硬件的稳定性有待进一步提高2.系统人性化还不足。我的综合设计主要涉及硬件和软件两方面的内容,通过这些我的硬件和软件开发能力都获得了提高。首先硬件方面,基本了解了电子产品的开发流程和所要做的工作。基本掌握了Protel99SE原理图的方法,并设计了一个单片机最小系统。通过开发板的设计和硬件搭建的过程,使我对51系单片机的接口有了更深层次的理解,熟悉了一些单片机常用的外围电路引脚和连接方法,如LCD液晶,键盘等。并且我学会了分析问题解决问题的能力,加深了对所学理论知识的理解

32、和运用。我的动手能力得到了很大的提高,创新意识得到了锻炼。参考文献1 刘振忠.数字电压表发展概况和原理.电讯工程.1998,12 李全利.单片机原理及接口技术.高等教育出版社.2010.93 沙占友.新型数字电压表原理与应用.机械工业出版社.2006,1-64 余永权 ATMEL89系列单片机应用技术.北京航天航空大学出版社.2005 宋凤娟 李国忠等.基于89C51单片机的数字电压表设计.20076 杨栓科 模拟电子技术基础.高等教育出版社.20057 胡大可 基于单片机8051的嵌入式开发指南.电子工业出版社.20018 和卫星 李长杰 汪少华 电子电路CAD实用技术.中国科学技术大学出版

33、社9 ATMEL Corporation.Microcontroller Data Book.Oct199510 Grinev.V.G,Grineva.L.V. Amplitude digital voltmeter.Instruments and Experimental Techniques,1975,114-11711 李建忠单片机原理及应用西安:西安电子科技大学,2002年12 韩志军等.单片机应用系统设计M.机械工业出版社,200413 周润景等. Proteus在MCS-51&ARM7系统中的应用百例M.电子工业出版社,200614 马忠梅等.单片机的C语言应用程序设计M.北京航空

34、航天大学出版社,200615 刘树中,孙书膺,王春平.单片机和液晶显示驱动器串行接口的实现J.微计算机信息,2007附录系统整体原理图系统PCB设计图系统源程序#include #includeLCD1602.hunsigned char dispbuf8=0;float AD_res8 = 0;unsigned int count_time = 0;sbit ST=P30;sbit OE=P32;sbit EOC=P31;sbit ADDA = P15;sbit ADDB = P16;sbit ADDC = P17;sbit key_1 = P13;sbit key_2 = P14;bit

35、flag = 0;unsigned char getdata;unsigned int ax = 0;void sel_Ax(unsigned char Ax)if(Ax & 0x01) = 0x01)ADDA = 0;else ADDA = 1;if(Ax & 0x02) = 0x02)ADDB = 0;else ADDB = 10;if(Ax & 0x04) = 0x04)ADDC = 0;else ADDC = 1;void cov2V(unsigned char res,unsigned char Ax)float temp;temp = (double)res/255*5.0;AD_

36、resAx = temp-255;void divite_num(unsigned char Ax)dispbuf0=(int)AD_resAx%10+48;dispbuf1=.; dispbuf2=(int)(AD_resAx*10)%10+48;dispbuf3=(int)(AD_resAx*100)%10+48; void delayms(unsigned int z) /延时函数,z为多少就延时多少毫秒 unsigned int x,y;for(x = z; x 0 ; x-)for(y = 110 ; y 0 ; y-);void dep_key_scan(void) /独立键盘扫描子函数 /P1 |= 0x18; /每次扫描前,先将接键盘的引脚口拉高 if(key_1 = 0) /如果检测到有键按下 delayms(10); /延时10msif(key_1 = 0) /再次判断是否确实按下按键,进行消抖操作。 flag = flag;if(key_2 = 0) /同上,判断第二个按键情况 delayms(1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号