单片机课程设计数字电压表_第1页
单片机课程设计数字电压表_第2页
单片机课程设计数字电压表_第3页
单片机课程设计数字电压表_第4页
单片机课程设计数字电压表_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGEII单片机技术课程设计说明书数字电压表院、部:电气与信息工程学院学生姓名:指导教师:职称专业:班级:完成时间:2PAGE20摘要在现代检测技术中,常需用高精度数字电压表进行现场检测,将检测到的数据送入微计算机系统,完成计算、存储、控制和显示等功能。本文中的数字电压表的控制系统采用ATMEL89C51单片机,A/D转换器采用TLC549为主要硬件,实现数字电压表的硬件电路与软件设计。该系统的数字电压表电路简单,所用的元件较少,成本低,调节工作可实现自动化。电压表在生活中应用非常广泛,而一种简单方便的数字电压表则更能受到人们的欢迎。所以设计一个简易数字电压表很有必要。本电压表采用ATMEL公司的AT89S52单片机为核心,使用12MHz晶振与单片机AT89S52相连接,通过软件编程的方法实现电压测试,同时液晶显示电压值要求。该电压表设有配套的行列式键盘,进行相应的操作就可实现进入、确认功能。测压准确、显示直观、运行稳定等优点。具有极高的推广应用价值。关键词数字单片机;数字电压表;A/D转换;模拟信号目录设计课题任务、功能要求说明及方案介绍…………1设计课题任务……………………1功能要求说明……………………1设计总体方案介绍及原理说明…………………1设计课题硬件系统的设计……………2设计课题硬件系统各模块功能简要介绍………2设计课题电路原理图、PCB图…………………3设计课题元器件清单……………3设计课题软件系统的设计……………4设计课题使用单片机资源的情况………………4设计课题软件系统各模块功能简要介绍………4设计课题软件系统程序流程框图………………4设计课题软件系统程序清单···································7设计结论、测试结果、误差分析、教学建议………14设计课题的设计结论及使用说明……………14设计课题的测试结果…………14设计课题的误差分析…………16设计体会………………………16教学建议………………………16参考文献………………17附录………………181设计课题任务、功能要求说明及方案介绍1.1设计课题任务设计一个能够测量直流电压的数字电压表。测量电压范围0~5V,测量精度小数点后两位。该电压表上电或按键复位后能自动显示系统提示符作者信息,进入测量准备状态,按测量开始键则开始测量,并将测量值显示在液晶显示器上。按退出键完成电压表的测量。1.2功能要求说明设计一个能够测量直流电压的数字电压表。测量电压范围0~5V,测量精度小数点后两位。该电压表上电或按键复位后能自动显示系统提示符作者信息,进入测量准备状态,按测量开始键则开始测量,并将测量值显示在液晶显示器上。调动滑动变阻器,显示电压数值随之改变。1.3设计课题总体方案介绍及工作原理说明本电压表主要由单片机、4*4行列式键盘、显示接口电路和复位电路构成,设计课题的总体方案如图1.1所示:液晶显示行列式键盘液晶显示行列式键盘AT89C51电源及复位电路等TCL549模数转换电源及复位电路等TCL549模数转换图1.1总体设计方案图本电压表的所有的软件、参数均存放在AT89S52的FlashROM和内部RAM中,减少了芯片的使用数量简化了整体电路也降低了整机的工作电流。行列式键盘采用动态扫描方式。利用单片机定时器及计数器产生定时效果通过编程形成数字电压表效果,再利用液晶显示单片机内部处理的数据,同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。2设计课题硬件系统的设计设计课题硬件系统各模块功能简要介绍本设计的硬件系统主要采用以下基本模块来实现,单片机最小系统模块,输入模块、输出模块、显示模块、电源模块。(1)复位电路:复位是由外部的复位电路来实现的。片内复位电路是复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2,由复位电路采样一次。复位电路通常采用上电自动复位和按钮复位两种方式,此电路系统采用的是上电与按钮复位电路,如图所示。当时钟频率选用6MHz时,C取22μF,Rs约为200Ω,Rk约为1K。(2)键盘电路:当非编码键盘的按键较少时,采用独立式键盘比较方便,但液晶板则适合行列式键盘,占用口线少,使用也相对方便,所以本设计采用行列式键盘。行列式键盘的工作方式是先用列线发送扫描字,然后读取行线的状态,查看是否有按键按下。键盘部分提供一种扫描的工作方式,可以和具有64个按键的矩阵键盘相连接,能对键盘不断扫描、自动消抖、自动识别按下的键,并给出编码,能对双键或n个键同时按下的情况实行保护。键盘电路原理图如图2.4所示(3)显示电路:显示器普遍地用于直观地显示数字系统的运行状态和工作数据,按照材料及生产工艺,单片机应用系统中常用的显示器有:发光二极管LED显示器、液晶LCD显示器、CRT显示器等。LCD显示器是现在最常用的显示器之一。本设计用的是HS12864液晶显示器,通过单片机输出的数据在液晶屏上显示。(4)电源电路:现在市面上销售的编程器有很多都是由PC机的USB口直接供电,为了降低本设计的成本及节省设计时间,没有另外设计编程器。(5)TLC549电路:TLC549带有片内系统时钟,该时钟与I/OCLOCK是独立工作的,无需特殊的速度或相位匹配。当CS为高时,数据输DATAOUT端处于高阻状态,此时I/OCLOCK不起作用。这种CS控制作用允许在同时使用多片TLc549时,共用I/OcLOCK,以减少多路(片)A/D使用时的I/O控制端口。一组通常的控制时序操作如下:(1)将Cs置低,内部电路在测得CS下降沿后,在等待两个内部时钟上升沿和一个下降沿后,再确认这一变化,最后自动将前一次转换结果的最高位(D7)位输出到DATAOUT端;(2)在前四个I/OCLOCK周期的下降沿依次移出第2、3、4和第5个位(D6,D5,D4,D3),片上采样保持电路在第4个I/OCLOCK下降沿开始采样模拟辅人:(3)接下来的3个I/OCLOCK周期的下降沿可移出第6、7、8(D2,D1,D0)各转换位(4)最后,片上采样保持电路在第8个I/OCLOCK周期的下降沿将移出第6、7、8(D2,D1,D0)各转换位。然后使保持功能持续4个内部时钟周期,接着开始进行32个内部时钟周期的A/D转换。在第8个I/OcLCOK后,CS必须为高或I/OLOCK保持低电平,这种状态需要维持36个内部系统时钟周期以等待保持和转换工作的完成。如果CS为低时,I/OCLOCK上出现一个有效干扰脉冲,则微处理器,控制器将与器件的I/O时序失去同步;而在cs为高时若出现一次有效低电平,则将使引脚重新初始化,从而脱离原转换过程。在36个内部系统时钟周期结束之前,实施步骤(1)~(4),可重新启动一次新的A/D转换,与此同时,正在进行的转换将终止。但应注意,此时的输出是前一次的转换结果而不是正在进行的转换结果。若要在特定的时刻采样模拟信号,则应使第8个I/OCLOCK时钟的下降沿与该时刻对应。因为芯片虽在第4个I/OCLOCK时钟的下降沿开始采样,却在第8个I/OCLOCK的下降沿才开始保存。TLC549的电路原理如图2.4所示。2.2设计课题电路原理图、PCB图、元器件布局图图2.1电路原理图图2.2PCB图2.3设计课题元器件清单图2.3元器件清单3设计课题软件系统的设计3.1设计课题使用单片机资源的情况设计课题使用单片机资源的情况如下:在本次设计中用到了P0和P3、P1口。P0口接液晶显示器的D0-D7,进行数据的读写功能;P3口接的是“|E,RS,R/W”对液晶进行读写控制命令,P1口接行列式键盘,通过行列式键盘按键的控制来完成电压表的制作设计课题软件系统个模块功能简要介绍本设计的软件系统主要采用以下基本模块来实现,主程序、中断服务程序、键盘输入程序模块、液晶显示程序模块。主程序:主要是用于对模拟输入信号的处理、输出信号的控制和对各个功能程序模块的运用及其控制,通过调用子程序来完成模数转换的功能。中断服务程序:主要是用于电压表的准确运行、数据输入过程中的等待处理。行列式键盘输入程序模块:主要是用于确定按键并得到特定的键码值。液晶及其驱动模块:主要用于显示单片机处理后的数字电压值。延时模块:程序中有两种延时子程序,一种是短延时用于判键按下等,一种是长延时;按键去抖和等待模拟信号的输入采样。3.3设计课题软件系统程序流程框图系统软件采用汇编语言按模块化方式进行设计,然后通过Keil软件开发平台将程序转变成十六进制程序语言。主程序流程框图如3.1所示;键盘扫描子程序框图如3.2所示;电压转换流程图如3.3所示;液晶显示程序流程图如图3.4所示;开始开始调用显示子程序调用显示子程序调用键扫子程序调用键扫子程序电压测量确认键按下?电压测量确认键按下?N电压测量电压测量电压数据处理电压数据处理调用键扫描子程序调用键扫描子程序退出键按下?N退出键按下?调用显示子程序调用显示子程序结束结束图3.1主程序流程框图图3.2键盘扫描子程序图3.3电压转换流程图开电源开电源设定控制命令字设定控制命令字串行数据的输出串行数据的输出初始化完成初始化完成图3.4液晶显示程序图3.4设计课题软件系统程序清单/********************名称:电压表作者:吴强时间:2012.1.1功能:s10是确认键,s11是分层退出键,s16是总退出键。//进入菜单界面,按数字键3跟确认键之后进入电压表,再按数字键2确认之后开始测量电压,并显示在液晶屏上**********************/ #include<absacc.h>#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#defineTa500ucharkeyscan();uchartime,flag;ucharv,n=0;intNum_Index;bitrs=P3^1;sbitrw=P3^6;sbiten=P3^7;sbitCS=P3^4;//片选信号sbitIOCLK=P3^3;//时钟信号sbitDATAOUT=P3^2;//数据口ucharcodeyejingtable[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x2e,0x76};//0--9ucharfind_code[3];/******************延时函数*********************/voiddelay(uintm){while(--m);}/***************************************************/ uchartlc549() { uchari,T1=0; CS=1; IOCLK=0;CS=0; //使能549 _nop_(); _nop_(); for(i=0;i<8;i++) { IOCLK=1;//准备好数据 delay(10); T1=T1<<1;//左移1位 if(DATAOUT==1)T1=T1+1;//保存本次移出的位 IOCLK=0;//打出下一位数据 } CS=1;//释放对TLC945的控制 returnT1; delay(20); } /******************键扫描函数*********************/ucharkeyscan(void){ucharscan,tmp; //列号,行号P1=0xf0;//发全行0扫描码if((P1&0xf0)!=0xf0)//若有键按下{delay(1000);//延时去抖if((P1&0xf0)!=0xf0)//延时再判键是否还按下{scan=0xfe;while((scan&0x10)!=0)//逐行扫描{P1=scan;//输出行扫描码if((P1&0xf0)!=0xf0)//本行有键按下{tmp=(P1&0xf0)|0x0f; delay(50000); //按键判释放return((~scan)|(~tmp));}//还回键值 elsescan=(scan<<1)|0x01;//行扫描码左移一位}}} return(0);//无键按下,还回0}/*****************延时2s************************/voiddelay2s() { TMOD=0X01; TH0=0x3C; TL0=0xB0; EA=1; ET0=1; TR0=1; do{}while(time<40); time=0; TR0=0; } voidtimer_()interrupt1{ time++; TH0=0x3C; TL0=0XB0; } //===========液晶写命令函数voidwritecommand(ucharcommand){ delay(100); rs=0; rw=0; en=1; P0=command;//液晶数据线P0 en=0;}//============液晶写数据函数voidwritedata(uchardate){ delay(100); rs=1; rw=0; en=1; P0=date; en=0;}//==============液晶设置函数voidlcdset(void){writecommand(0x30);//基本指令集 writecommand(0x01);//清屏,DDRAM的地址归零 writecommand(0x02);//地址归位 writecommand(0x0c);//显示开,光标关,反白关 writecommand(0x06);//DDRAM地址加1}//===========液晶显示函数voiddisplay(uchary,ucharx,uchar*p){switch(y){case1:writecommand(0x7f+x);break;//液晶第一行case2:writecommand(0x8f+x);break;//0x90+(x-1)case3:writecommand(0x87+x);break;case4:writecommand(0x97+x);break;default:break;}while(*p) writedata(*p++);}/*************************确认函数*****************/voidsure(){uchari=2,j=2;do{v=keyscan(); if(v!=0x44&&v!=0) {lcdset(); n=v; display(i++,j++,"确认?"); if(i==5) {i=1; j=1;} } }while(v!=0x44&&v!=0x84&&v!=0x88); }voiddisplay1(void){writecommand(0x92);writedata(yejingtable[find_code[0]]);writedata(yejingtable[11]); writedata(yejingtable[find_code[1]]);writedata(yejingtable[find_code[2]]);writedata(yejingtable[12]); }voidmain(){ lcdset(); delay(1000); display(2,1,"电气与信息工程院"); display(3,2,"电气本4班"); display(4,2,"吴强");writedata(0x03); delay2s();while(1){ display(1,3,"电压表");sure(); flag=1; writecommand(0x01); switch(n) { case0x41: while(flag==1) { longinti,temp; i=tlc549(); temp=(i*5)*39.1;从TLC549里读取数据 find_code[0]=temp/10000;百位 find_code[1]=(temp/1000)%10;十位 find_code[2]=(temp/100)%10;个位 display(1,3,"测量电压"); for(i=0;i<100;i++) {display1();} n=keyscan(); if(n==0x88) flag=0; }writecommand(0x01); } } }4设计结论、仿真结果、误差分析、教学建议4.1设计课题的设计结论及使用说明液晶板子是在暑假做的,那是第一次做,所以花了一周的时间来完成PCB板的制作,在电路板上安装元件,并焊接。经过将近三天的电路焊接,系统电路焊接基本完成,本设计用液晶做为显示器,它显示电压值;行列式键盘为按键,其中S3为启动键(显示电压表字形),S10为确认键,S1为进入测试键,进入测试,调滑动变阻器显示不同值电压。该设计主要是利用TLC549的模数转换功能来实现在液晶屏上显示相应的电压值,测量的结果是很准确的,基准误差很小,这样的结果与设计要求完全相符,本设计成功。完成了设计任务。4.2设计课题的结果在液晶板上运行程序,结果如图4.1与4.2所示。实现功能:电压表工作状态:(1)、显示设计者的相关信息;(2)、运行状态的显示;图4.1初始状态图4.2运行状态4.3设计课题的误差分析,该电压表在运行中存在一定的误差,误差产生有三种可能,首先是采用的测压方案是软件测的,测的优势是利用定时器中断来实现的。然后电路板做工不够精细,各元件自身老化电阻过大,所以就产生了一定的误差,当然这个误差是避免不了的,误差分析表格如图4.3所示。4.4设计体会为期二周的课程设计终于结束了,这次课程设计给了我很多启发,同时也培养了我对陌生问题的分析和解决的能力,在这里非常感谢吴老师,是他强调课程设计不是做实验,而是培养分析问题和解决问题的能力。在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,只有我们去试着做了,才能真正的掌握,学习的理论有些东西是很难理解的,更谈不上掌握。从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。4.5教学建议首先,在此真的很感谢吴老师,老师兢兢业业,尽职尽责,真的很让我钦佩,我们都很喜欢听老师讲的课,不管是理论课还是实验课,我们都学到了很多知识,在我们遇到困难的时候老师都详细的给我们讲解,直到我们完全懂了,老师辛苦了。听说老师还要叫我们微机原理,真的很高兴吴老师能继续带领我们一起学习;和老师一起学习我们很快乐,希望吴老师以后把课后习题讲解得更加详细.透测,那样我们就更加容易吸收和学以致用。参考文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论