《单片机课程设计测量电阻和电容(20页).doc》由会员分享,可在线阅读,更多相关《单片机课程设计测量电阻和电容(20页).doc(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-单片机原理及应用课程设计报告设计课题:电容、电阻参数单片机测试系统的设计专业班级: 电子信息工程 学生姓名: ? 指导教师: 何老师 2012 年 6 月-第 18 页-目 录目 录11 设计任务书21.1 基本设计要求21.2 选作项目22 设计阐明312.1设计内容31.2设计要求31.3设备及工作环境33 系统方案整体设计43.1 设计思路43.2 系统整体框图44 硬件设计54.1 系统硬件设计54.1.1 按键电路设计54.1.2 LCD显示器54.2 系统工作原理论述55 软件设计65.1 分析论证65.1.1 显示模块65.1.2 产生脉冲模块65.1.3 转换模块73.1.4
2、 启动/暂停,复位模块75.1.5 整体功效75.2 程序流程图75.3程序清单86 调试过程及分析177 设计总结18参 考 文 献1 设计任务书1.1 基本设计要求(1)在综合单片机实验箱的硬件结构上编写软件完成设计。(2)程序的首地址应使目标机可以直接运行,即从0000H开端。在主程序的开端部分必须设置一个合适的栈底。程序放置的地址须持续且靠前,不要在中间留下大批的空间地址,以使目标机可以应用较少的硬件资源。(3)在液晶显示屏上显示测量的电阻电容,第一行显示measures第二行显示测的的值,如R=00.0K或者C=00.00uF(4)在电路中设定三个按键一个是换电阻的按键,其余分别为测
3、电容和测电阻时的按键,当按下测电阻键时,显示相应的电阻值,当按下电容值时显示测得的电容值(5)软件设计必须应用8052片内定时器,采用定时中断结构,可以采用软件中断的延时法。1.2 选作项目1、另设三个键,分别作液晶显示器的调校。 2、可以通过硬件电路,编写相应的软件程序,实现显示字幕的左移,右移等功能,本程序没有 3、同时也可以设置相应的量程来设计,本程序有相应的硬件电路,但软件读者可以自己编写2 设计阐明12.1设计内容用ZY15MCU12BD型综合单片机实验箱及串口电路设计实现显示时间并能够调校时间的时钟,还能够实现秒表的启动/暂停,复位功能。说明设计中包含的内容1.2设计要求(1) 在
4、ZY15MCU12BD型综合单片机实验箱的硬件结构上编写软件完成设计。(2) 程序的首地址应使目标机可以直接运行,即从0000H开端。在主程序的开端部分必须设置一个合适的栈底。程序放置的地址须持续且靠前,不要在中间留下大批的空间地址,以使目标机可以应用较少的硬件资源。 (3)在液晶显示屏上显示测量的电阻电容,第一行显示measures第二行显示测的的值,如R=00.0K或者C=00.00uF (4)在电路中设定三个按键一个是换电阻的按键,其余分别为测电容和测电阻时的按键,当按下测电阻键时,显示相应的电阻值,当按下电容值时显示测得的电容值 (5)软件设计必须应用8052片内定时器,采用定时中断结
5、构,可以采用软件中断的延时法。 (6) 上机调试程序。 (7) 写出设计报告。1.3设备及工作环境 (1) 硬件:盘算机一台、ZY15MCU12BD型综合单片机实验箱一台、通信电缆一根。 (2) 软件:Windows操纵系统、Keil C51软件。3 系统方案整体设计3.1 设计思路或设计方案论证 对电阻的测量,可将待测电阻与一标准电阻串联后接在+5V的电源上,根据串联分压原理,利用ADC测定电阻两端电压后,即可得到其阻值。对电容的测量,可将其与已知阻值的电阻RA和RB组成基于NE555的多谐振荡器如下页图。其产生的方波信号频率为 : 故通过测定方波信号的频率可以比较精确的测定C的值。测定方波
6、信号频率的方法,。测量频率有测频法和测周法两种。 (1)测频法,利用外部电平变化引发的外部中断,测算1s内的波数,从而实现对频率的测定; (2)测周法,通过测算某两次电平变化引发的中断之间的时间,实现对频率的测定。简而言之,测频法是直接根据定义测定频率,测周法是通过测定周期间接测定频率。理论上,测频法适用于较高频率的测量,测周法适用于较低频 率的测量。 经过调校,在测量低频信号时,本项目中测频法精度已高于测 周法,故舍弃测周法,全量程采用测频法。3.2 系统整体框图 复位电路 输入电阻R ADC 0804 AT89S52 开关控制 输入电容 NE555 图1 系统整体框图4 硬件设计4.1 系
7、统硬件设计4. 1. 1按键电路设计 按键是实现人机对话的比较直观的接口,可以通过按键实现人们想让单片机做的不同的工作。键盘是一组按键的集合,键是一种常开型开关,平时按键的两个触点处于断开状态,按下键是它们闭合。键盘分编码键盘和非编码键盘,案件的识别由专用的硬件译码实现,并能产生键编号或键值的称为编码键盘,而缺少这种键盘编码电路要靠自编软件识别的称为非编码键盘。在单片机组成的电路系统及智能化仪器中,用的更多的是非编码键盘。就是一种比较典型的按键电路,在按键没有按下的时候,输出的是高电平,当按键按下去的时候,输出的低电平4.1.2 LCD显示器1602液晶也叫1602字符型液晶它是一种专门用来显
8、示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔每行之间也有间隔起到了字符间距和行间距的作用,正因为如此所以他不能显示图形 (用自定义CGRAM,显示效果也不好) n1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。 n目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。+5V电压,对比度可调 内含复位电路 提供各种控制命令,如:清屏、字符闪烁、光标闪
9、烁、显示移位等多种功能 有80字节显示数据存储器DDRAM 内建有192个5X7点阵的字型的字符发生器CGROM 8个可由用户自定义的5X7的字符发生器CGRAM电压,对比度可调 内含复位电路 提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能 有80字节显示数据存储器DDRAM 内建有192个5X7点阵的字型的字符发生器CGROM 8个可由用户自定义的5X7的字符发生器CGRAM4. 1. 3 ADC0804转换ADC0804是一个8位CMOS型逐次比较式A/D转换器,具有三态锁存输出功能,最短转换时间为100us,CS:片选信号,低电平有效;RD:外部读取转换结果的控制信号
10、,当RD为高电平时,DB0-DB7为高阻态;当RD为低电平时,数据才会通过DB0-DB7输出;WR:A/D转换器启动控制信号,当WR由高电平变为低电平时,转换器被清零,当WR由低电平变为高电平时,A/D转换正式开始;CLK IN和CLK R:时钟输入端,在ADC0804片内有时钟发生器,采用内部时钟时,在CLK IN CLK R 和地线之间连接RC电路即可,ADC0804的工作频率约为100-1460khz,若使RC电路作为时钟,其振荡频率为1/(1.1RC);INTR:中断请求输出信号,当A/D转换结束时,INTR引脚输出低电平,只有当数据被取走后(单片机发出读数据指令),此引脚才会变为高电
11、平;VIN+和VIN-:差动模拟电压输入端,若输入为单端正电压,VIN-应接地,若差动输入,则输入信号直接加入VIN+和VIN-;AGND.DGND:模拟信号地与数字信号地,若系统对抗干扰要求严格,则这两条地线必须分接地;VREF/2:参考电压值的一半,若在ADC0804组成的电路中需要的参考电压为5V,则此引脚可以悬空。若电路中需要使用的参考电压小于5V,即参考电压值的一半小于2.5V,这时可将此引脚连接到需要的参考电压值(如4V)的1/2电压值上(如 2V),在ADC0804芯片内部会自动判断参考电压的选择,当VREF/2引脚的电压值低于2.5V时,芯片会自动选择由VREF/2引脚电压放大
12、2倍以后的电压值作为参考电压。DB0-DB7:8位数字输出端。 4.2 系统工作原理论述1. 实验硬件设备:LCD1602液晶显示器一块,ADC0804芯片一片,两个滑动变阻器,一个150pF电容,两个200欧姆的电阻,一个10K欧姆的电阻,STC89C51芯片,电源,地线,按键(复位电路和晶振电路另加),杜邦线诺干。2. ADC0804在使用时,外围电压的连接比较简单,只需要对参考电压和时钟输入端进行设计即可。通常情况下,时钟的输入可以选用RC谐振电路,ADC0804可以进行A/D转换的时钟频率为1001460KHZ,典型值为640KHZ,这里选用R=10K欧姆.C=150PF的谐振电路,利
13、用公式1/(1.1RC)计算后,此时的时钟频率约为606KHZ,与典型值十分接近。3. 模拟电压的计算:这里选用的是8位A/D转换器,数值的变化范围是0255(00H-FFH),模拟电压的输入范围是0-5V,每个数码的变化,对应的电压值的变化为0.0196V,所以要计算模拟电压值,就可以利用下面的公式进行计算: V=D*0.0196式中,V为计算出的模拟电压值,D为A/D转换器转换后的数字量。4. 克服浮点运算方法:从上式不难看出,在计算过程,需要乘以一个0.0196,这是一个小数,在计算机中称为浮点数。而对于8位单片机来说,不具有浮点运算能力,如果一定要计算浮点数,将占用单片机中大量的内存单
14、元和CPU时间。这里采用一种简单的方法:就是将从A/D读取进来的数字量直接乘以196,即进行整数运算,运算结果是真正值的1000倍,这个整数运算的速度是非常快的,不会占用过多的CPU时间。由于是两个8位的二进制数相乘,得到的结果不会超过16位二进制数。5. 电压值的显示:最常用到的二进制转换成BCD码的方法是用除法。先用得到的16位二进制数除以10000,得到的商就是模拟电压值的整数部分(模拟电压的输入为0-5V,所以整数部分只有1位),得到的余数是模拟电压值的小数部分;接下来用余数除以1000,商是十分位,余数作为被除数再除以100,商为百分位,余数再除以10,商为千分位。这样就将16位的二
15、进制数转换成了4位BCD码。 6. 再将电压值转化为电阻值,并显示 7.电容的测量是利用555产生方波,采用8052内部定时器,计算得到的脉冲数,在利用公式即可求出电容值 5 软件设计5.1 分析论证此电容、电阻参数单片机测试系统的设计与实现,主要采用了1LCD显示屏,8052内部二进制8位定时器/计数器,ADC0804模数转换,NE555芯片,包含显示模块,产生脉冲模块和转换模块三大功效模块。5.1.1 显示模块用LCD显示屏的显示功效来设计。采用LCD1602来显示,1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字
16、符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔每行之间也有间隔起到了字符间距和行间距的作用,正因为如此所以他不能显示图形 (用自定义CGRAM,显示效果也不好) n1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。 n目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。+5V电压,对比度可调 内含复位电路 提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能 有80字节显示数据存储器DDRAM 内建有192
17、个5X7点阵的字型的字符发生器CGROM 8个可由用户自定义的5X7的字符发生器CGRAM电压,对比度可调 内含复位电路 提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能 有80字节显示数据存储器DDRAM 内建有192个5X7点阵的字型的字符发生器CGROM 8个可由用户自定义的5X7的字符发生器CGRAM5.1.2 产生脉冲模块NE555是属于555系列的计时IC的其中的一种型号,555系列IC的接脚功能及运用都是相容的,只是型号不同的因其价格不同其稳定度、省电、可产生的振荡频率也不大相同;而555是一个用途很广且相当普遍的计时IC,只需少数的电阻和电容,便可产生数位电路
18、所需的各种不同频率之脉波讯号。NE555的作用范围很广,但一般多应用于单稳态多谐振荡器(Monostable Mutlivibrator)及无稳态多谐振荡器(Astable Multivibrator)。5.1.3 转换模块 ADC0804是属于连续渐进式(Successive Approximation Method),即AD转换器,这类型的A/D转换器除了转换速度快(几十至几百us)、分辨率高外,还有价钱便宜的优点,普遍被应用于微电脑的接口设计上。 以输出8位的ADC0804动作来说明“连续渐进式A/D转换器”的转换原理,动作步骤如下表示(原则上先从左侧最高位寻找起)。 第一次寻找结果:1
19、0000000 (若假设值输入值,则寻找位=假设位=1) 第二次寻找结果:11000000 (若假设值输入值,则寻找位=假设位=1) 第三次寻找结果:11000000 (若假设值输入值,则寻找位=该假设位=0) 第四次寻找结果:11010000 (若假设值输入值,则寻找位=假设位=1) 第五次寻找结果:11010000 (若假设值输入值,则寻找位=该假设位=0) 第六次寻找结果:11010100 (若假设值输入值,则寻找位=假设位=1) 第七次寻找结果:11010110 (若假设值输入值,则寻找位=假设位=1) 第八次寻找结果:11010110 (若假设值输入值,则寻找位=该假设位=0) 这样
20、使用二分法的寻找方式,8位的A/D转换器只要8次寻找,12位的A/D转换器只要12次寻找,就能完成转换的动作,其中的输入值代表图1的模拟输入电压Vin 。各管脚的作用: D0-D7:八位数字量输出端; CLK:为芯片工作提供工作脉冲,时钟频率计算方式是:fck=1/(1.1RC) CS:片选信号; WR:写信号输入端; RD:读信号输入端; INTR:转换完毕中断提供端; 其他管脚连接如图,是供电和提供参考电压的管脚输入端。3.1.4 启动/暂停,复位模块该模块的功能是实现秒表的启动/暂停,复位。本实验中第一次按下09键进入测量程序,开始测量,第二次按下09键暂停测量,并返回到主程序,在电路中
21、设定三个按键一个是换电阻的按键,其余分别为测电容和测电阻时的按键,当按下测电阻键时,显示相应的电阻值,当按下电容值时显示测得的电容值,此外还有量程更改的键,程序未编写,但画图有。5.1.5 整体功效 当按下测量电阻按键是,液晶屏第一行显示measures,第二行显示R?.?K,当按下测量按键时,液晶屏第一行显示measures,第二行显示?u,若同时按下,则轮流显示。按复位键时,程序会自动重新执行,电阻的测量在K较准确,电容只能测量u。当然,可以通过程序更改5.2 程序流程图略5.3程序清单 #include#include#define DATA P0#define uchar unsign
22、ed char#define uint unsigned int sbit adcs=P23;/可以硬件直接接地sbit adrd=P25;sbit adwr=P24; sbit RW=P21;/1602写数据sbit RS=P20;/1602写地址sbit EN=P22; /1602工作使能sbit b_test=P37; /开始测量电容的按键输入sbit c_test=P36;sbit _reset=P35; /555时基芯片工作控制信 uint T_flag,N,D,C,i,Dis1,Dis0;uchar get_ad(); uint A,F,H,A1,A2;uint r=R,=,0,0
23、,.,0,K,0Xf4;uint b9=C,=,0,0,.,0,0,u,F; /显示C=00.00UFuint Data1;/*延时1MS*/void Delay1ms(uint mm)uint i;for(;mm0;mm-) for(i=0;i0;x-)for(y=110;y0;y-);/*检查忙否*/void Checkstates() uchar dat; RS=0; RW=1; doEN=1;/下降沿 _nop_();/保持一定间隔_nop_(); dat=DATA; _nop_();_nop_(); EN=0; while(dat&0x80)=1);/*LCD写命令函数*/void
24、wcomd(uchar cmd) Checkstates(); RS=0; RW=0; DATA=cmd; EN=1; _nop_(); _nop_(); _nop_(); _nop_(); EN=0;/*LCD写数据函数*/void wdata(uchar dat) Checkstates(); RS=1; RW=0; DATA=dat; EN=1; _nop_(); _nop_(); _nop_(); _nop_(); EN=0;/*初始化*/void LCDINIT() Delay1ms(15); wcomd(0x38);/功能设置 Delay1ms(5); wcomd(0x38);/功
25、能设置 Delay1ms(5); wcomd(0x01);/清屏 Delay1ms(5); wcomd(0x08);/关显示 Delay1ms(5); wcomd(0x0c);/开显示,不开光标/*显示函数*/void Display(void) /显示函数 uchar i,j; uchar a12=0X4D,0X45,0X41,0X53,0X55,0X52,0X45,0X4D,0X45,0X4E,0X54,0X53;/显示measurements for(i=0;i12;i+)/写显示第一行 wcomd(0x80+i); Delay1ms(1); wdata(ai); Delay1ms(1)
26、; for(j=0;j9;j+)/写显示第二行 wcomd(0xc0+j); Delay1ms(1); wdata(bj); Delay1ms(1); Delay1ms(150);void Display1() /显示函数 显示电阻 uchar i,j; uchar a12=0X4D,0X45,0X41,0X53,0X55,0X52,0X45,0X4D,0X45,0X4E,0X54,0X53;/显示measurements for(i=0;i12;i+)/写显示第一行 wcomd(0x80+i); Delay1ms(1); wdata(ai); Delay1ms(1); for(j=0;j50
27、00) /设置最长等待时间 _reset=0; /最长等待时间到还没有中断,停止555 if(N5000) /如果计数值大于5000,显示LARGER,表示应换用大一点的量程 b6=0x15; b5=0x17; b4=0x22; b3=0X11; b2=0X1C; if(N=100 & N=5000) C=N/100;D=N%100; /计算电容的大小 b2=C/10; /计算电容值的十位 b3=C-b2*10; /计算电容值的各位 b5=D/10; b6=D-b5*10; Display(); /显示电容的大小 wcomd(0x80+0x42); Delay1ms(5); wdata(0x3
28、0+b2); Delay1ms(5); wcomd(0x80+0x43); Delay1ms(5); wdata(0x30+b3); Delay1ms(5); wcomd(0x80+0x45); Delay1ms(5); wdata(0x30+b5); Delay1ms(5); wcomd(0x80+0x46); Delay1ms(5); wdata(0x30+b6); Delay1ms(1000); if(!c_test=1) Display1();Data1=get_ad();A=100*Data1;H=A/(256-Data1);A1=H/10;A2=H%10; wcomd(0x80+0
29、x43); Delay1ms(5); wdata(0x30+A1); Delay1ms(5); wcomd(0x80+0x45); Delay1ms(5); wdata(0x30+A2); Delay1ms(1000); void int0(void) interrupt 0 /第一次中断开始计数,第二个中断停止计数 T_flag=!T_flag; if(T_flag=1) TR0=1; /开始计时 if(T_flag=0) TR0=0; /停止计时 EX0=0; /关闭中断 _reset=0; /停止发出方波 N=TH0*256+TL0; /计算计数器的值 N=N*5/3; TH0=0x00
30、; /恢复初值 TL0=0x00; 执行显示图 ,当电阻测量键按下时,仿真结果当电容测量键按下时,仿真结果调试过程及分析编写好的源程序在 Keil 编译后呈现很多错误,这些错误有很多时平时的实验碰到过的,例如:字母开头忘加0,零和字母O弄混杂了,有些标号用了几次,CJNE写成了CJNZ等等,幸好这些错误在平时的实验中碰到了,所以改错误很轻易,。除了常见的错误外,还有几条错误时在前几次实验都没有出现过,如:AJMP跳转指令跳不回指定的地位,是由于跳转的长度大于AJMP跳转的长度,最后只好用LJMP跳转后才跳到指定的地位。在前期的程序编写和几天的上机调试,使我又获得了很多新的知识,由于前期编写程序
31、时查了很多材料学到了很多知识,这几天的调试更时获得很新的知识,由于程序中又很多的错误,为了修正错误必须看书或向别人请教,在这个过程中无意识的获得了很多知识。同时也使我对单片机更感兴趣了,这点我感到很重要,相信这会对以后的学习有所帮助。7 设计总结本次课程设计是用ZY15MCU12BD综合单片机实验箱及串口电路设计一个时钟秒表,经过一个星期的调试,成果满足基本设计请求,验证无误。设计重要用到了多种芯片,程序也比较长,比较麻烦,同时也碰到了不少艰苦,尤其是关于校时模块和时钟与秒表之间切换的设计实现。关于显示模块,在以前的实验中做过,所以题目很轻易解决。通过本次设计,我懂得了时钟的设计流程,尤其是硬、软件的设计方法以及键盘显示电路的基础功效及编程方法和键盘电路和显示电路的一般原理,也进一步了解了8031定时器的应用和中断CPU程序的编程方法,开辟了思路,提高了分工协作才能和分析题目,解决题目的能力。参 考 文 献 1.胡汉才编著,单片机原理及其接口技术清华大学出版社,2004。2.楼然苗等编著,51系列单片机设计实例北京航空航天大学出版社,2006。3.汪道辉编著,单片机系统设计与实践 电子工业出版社 2005参考文献8-10篇