1、电子跑表单片机开发与设计工程师考试文档单片机开发与设计工程师考试文档题目:电子跑表学 校: 湖南人文科技学院 学生姓名: 朱亚锟 龙新茂 起止日期: 2010年6月12日 2010年6月22日摘 要本设计利用单片机实现的电子跑表具有编程灵活,精确度高等特点,便于其他功能的扩充,即可为该电子跑表实现更多的显示功能。由单片机AT89C52芯片和LED数码管以及按键电路为核心,辅以必要的电路,构成了一个单片机电子跑表。利用C语言进行软件设计,增加了程序的可读性和可移植性,利用AT89C52单片机制成电子跑表电路,采用软件和硬件结合的方法,控制LED数码管输出。利用按键实现时钟显示和秒表显示两大功能,
2、其中秒表还可以利用按键来进行暂停、复位功能。利用C51系列单片机的最大特点是:硬件电路简单,安装方便易于实现,显示直观,功能多样,成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。关键词:电子跑表;AT89C52单片机;LED数码管;按键电路;C语言电子跑表设计要求利用单片机作为控制核心,设计一个电子跑表。具体要求如下:基本部分:1、具有电时钟和跑表功能;2、做时钟时在4位LED 显示器上显示分、秒;3、做跑表时显示范围000.0秒999.9秒;4、当按下启动按钮跑表开始计时,按下停止按钮停止计时,当按下复位按钮跑表回零。1 方案论证与对比1.1 方案一此方案以MCS-51系
3、列单片机为核心,计时单元由单片机内部的定时器/记数器来实现,时间显示功能通过LED数码管动态扫描来实现,表的模式转换、复位/清零功能由三个按键来实现。原理框图如图1所示:图 1方案一系统方框图1.2 方案二此方案也是以MCS-51系列单片机为核心,计时单元由单片机编程软件延时来实现,时间显示功能通过LED数码管动态扫描来实现,表的启动/复位/清零功能由PC机通过串口输入命令来实现。原理框图如图2所示:图 2 方案二系统方框图该方案有以下两个缺点:1. 需要一个大型外部设备:PC机。2. 软件延时计时不精确。1.3方案对比与选择以上方案大致思路是一样的,都是以MCS-51系列单片机为核心,加上计
4、时模块、选择模块和显示模块。方案一:通过单片机内部的定时器/记数器来实现方案一的计时单元,外部中断0来实现方案一的选择单元,按键电路实现电子跑表的暂停、清零功能。方案二:通过单片机编程软件利用循环限时来实现方案二的计时单元,PC机由串口输出命令来实现方案二的选择单元。显然由于方案一的计时模块相对于方案二计时模块更为精确,而选择方式更加灵活、方便。故选用方案一作为本次设计的方案。2 单元电路设计与计算2.1 按键电路的设计根据设计要求,采用矩阵式键盘,这样可以更合理地利用硬件资源。矩阵式键盘是只有若干个按键组成的开关矩阵。4行4列矩阵式键盘由图3所示。这种键盘适合采取动态扫描的方式进行识别,即如
5、果采取低电平扫描,回送线必须被上拉为高电平;如果采取高电平扫描,回送线必须被下拉为低电平。图3给出了低电平扫描的电路。这种键盘的优点是使用较少的I/O口线可以实现对较多键的控制。实际上,我们是利用此原理,但只是设置了3个开关,开始和暂停由一个开关控制。当键盘上的某一键闭合时,则该键所对应的扫描线和回送线被短路。若X0X3均为高电平,说明无键闭合;任一条回送线变为低电平,则说明该回送线上有键闭合。与此键相连的扫描线也一定处于低电平(正在扫描)。由此可以确定扫描线与回送线的编号,这样闭合按键的位置就确定了。图 3 4行4列矩阵式键盘的连接图CPU对键盘扫描可以采用以下方式:a) 程序控制随机方式,
6、CPU空闲时扫描键盘。b) 定时控制方式,每隔一段时间,CPU对键盘扫描一次,CPU可以定时响应键输入情况c) 中断方式,当键盘上有间闭合时,向CPU请求中断,CPU响应键盘输入中断,对键盘扫描,以识别哪一个键处于闭合状态,并对输入的信息的进行处理。CPU对键盘上闭合键的键号的确定,可以根据扫描线和回送线的状态计算求得也可以根据行线和列线的状态查表求得。2.2计时模块的设计由单片机内部的定时器/记数器来实现。若设单片机系统主频为12MHz,则各种工作防守定时器的最大定时时间为:工作方式0:Tmax=2131s=8.192ms工作方式1:Tmax=2161s=65.536ms工作方式2和工作方式
7、3:Tmax=281s=0.256ms本次设计使用了计时器T0、T1,工作方式为方式均为1,计时基本单位是50ms,其初始值的设定是:TH0 = (6553650000)256; TL0 = (6553650000)%256;TH1 = (6553650000)256; TL1 = (6553650000)%256;2.3 可编程并行口I/O芯片扩展设计单片机系统常用的8255A芯片是一个典型的可编程通用并行接口芯片,用来扩展单片机的端口,它具有三个八位的并行口,有三种工作方式,可作为单片机与各种外部设备连接的接口电路。在本次设计中,共阳极七段数码管和4行4列矩阵开关就是由这个芯片连接的。其操
8、作状态表如表1示:表 1 8255A的操作状态A1A0操 作说明00010A口 数据总线输入操作(读)01010B口 数据总线10010C口 数据总线00100数据总线 A口输出操作(写)01100数据总线 B口10100数据总线 C口11100数据总线 控制寄存器XXXX1数据总线三态禁止操作11110非法操作XX110数据总线三态8255A有三种工作方式:方式0(基本输入输出方式):这种方式不需要任何选通信号,适合无条件传输数据的设备,数据输出有锁存功能,数据输入有缓冲功能。方式1(选通输入/输出方式):这种方式A组包括A口和C口的高四位(PC7PC4),A口可由程序设定为输入口和输出口,
9、C口的高四位则用来作为输入/输出操作的控制和同步信号;B组包括B口和C口的第四位(PC3PC0),功能和A组相同。方式2(双向I/O口方式):仅有A口有这种工作方式,B口无这种工作方式。此方式下,A口为8位双向I/O口,C口的PC7PC3用来作为输入输出的控制和同步信号。此时B口可工作在方式0或方式1。2.4显示电路的设计在本次设计中,使用了6个共阳极八段数码管作为显示部分,每个数码管的八段是由芯片8255的PB口控制亮灭,每个数码管的公共脚是由8255的PA0PA5经三极管扩流后进行控制。采用动态扫描,可以同时显示多个数码管显示时钟和电子跑表中的不同部分。使共阳极七段数码管时,要注意他的接法
10、。为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。以下是显示16进制数的编码:30xA0, /*0*/;0xBB, /*1*/;0x62, /*2*/;0x2A, /*3*/;0x39, /*4*/40x2C, /*5*/;0x24, /*6*/;0xBA, /*7*/;0x20, /*8*/;0x28, /*9*/共阳极七段数码管原理图如图6示:图 3 共阳极七段数码管原理图动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉
11、好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。在本次设计中我们选择了1K的限流电阻。3 系统软件设计流程图3.1 主函数设计1主程序开始后,经过一轮按键扫描,执行标志位flag判断,在返回到主程序,接着对flag进行一个判断,若flag=1,进入秒表模式;若flag!=1,则进入时钟模式。其原理框图如图4所示。图 4 主函数的原理框图2计时器初始化,先将计数器T0初始化:TMOD |= 0x01、EA = 1、ET0 = 1,TR0 = 1,并设定计时器T0的初始值:TH0 = (65536-50000)/256、TL0 = (65
12、536-50000)%256。计数器T1初始化:TMOD |= 0x10、EA = 1、ET1 = 1,TR1 = 0(一开始秒表不用工作,故将TR1=0,即计时器1停止工作),并设定计时器T1的初始值:TH1 = (65536-50000)/256、TL1 = (65536-50000)%256。3键盘扫描子函数。令8255芯片PA=0x01,再一次扫描PC上的电平。当PC=0x01时,进行时钟与秒表的切换;当PC=0x02,暂停与开始秒表;当PC=0x04,秒表清零。程序如下,其原理框图如图5所示。void scan_keyboard() /键盘子函数 uchar kdata; PA=0x
13、01; kdata=PC; if(kdata=0x01) /秒表与时钟切换键 delay(5); kdata=PC; if(kdata=0x01) while(PC) PB=0xff; flag=!flag; if(kdata=0x02) /开始和暂停秒表 delay(5); kdata=PC; if(kdata=0x02) while(PC) display(miao4,miao3,miao2,miao1); TR1=!TR1; if(kdata=0x04) delay(5); kdata=PC; if(kdata=0x04) /清零秒表 while(PC) display(miao4,mi
14、ao3,miao2,miao1); TR1=0; miao1=0;miao2=0;miao3=0; miao4=0; 图5 键盘扫描子函数的原理框图4显示子函数服务程序。void display(uchar a,uchar b,uchar c,uchar d) PA=0xff; PB=0xff; PA=0xfb; PB=tablea; delay(5); PB=0xff; / 最低位显示 PA=0xf7; PB=tableb; delay(5); PB=0xff; / 第二位显示 PA=0xef; PB=tablec; delay(5); PB=0xff; / 第三位显示 PA=0xdf; P
15、B=tabled; delay(5); PB=0xff; / 最高位显示3.2时钟函数的设计1计时器T0中断服务程序,再次设置计数器T0的初始值:TH0 = (65536-50000)/256、TL0 = (65536-50000)%256;设立标志位temp,执行temp+,每当特,temp执行20次,即过1秒,temp=0,为时钟显示函数服务的标志位miao+。程序如下,其原理框图如图6所示。void time0() interrupt 1 uchar temp; TH0=(65535-50000)/256; TL0=(65535-50000)%256; / 计时器设初值,0.05s为一个
16、单元 temp+; if(temp=20) / temp自加20次为一秒 temp=0; miao+; / temp 置零,为显示准备标志位miao if(miao=60) / miao 大于60,进位 miao=0; fen+; / miao 置零,为显示准备标志位fen if(fen=60) fen=0; / fen 大于60,置零 图 6 T0中断服务程序原理框图2显示部分。对标志位miao 取余、miao取商分别赋给形参uchar a和uchar b;对标志位fen 取余、fen取商分别赋给形参uchar c和uchar d。即调用显示子函数的时候,使用如下形式:display(a,b
17、,c,d),其中a=fen/10,b=fen%10,c=miao/10,d=miao%10。3.3秒表函数的设计1计时器T1中断服务程序,再次设置计数器T1的初始值:TH1 = (65536-50000)/256、TL1 = (65536-50000)%256;设立标志位temp1,执行temp1+,每当temp执行20次,即过1秒,temp1=0,为秒表显示函数服务的标志位s+。程序如下,其原理框图如图7所示。void time1() interrupt 3 uchar temp; TH1=(65535-50000)/256; TL1=(65535-50000)%256; / 计时器设初值,
18、0.5s为一个计时单元 temp+; if(temp=2) / temp每自加2次为0.1秒 temp=0; miao1+; if(miao1=10) miao1=0; miao2+; if(miao2=10) miao2=0; miao3+; if(miao3=10) miao3=0; miao4+;/ 以上均逢十进一,且把原位置零 if(miao4=10) miao4=0; / 当最高位大于10,全部归零 图 9 计时器T1中断服务程序原理框图2显示部分。miao4,miao3,miao2,miao1分别赋给形参uchar a,uchar b,uchar c,uchar d。4详细仪器清单
19、表格 2 仪器清单仪器名称数量 STC89C52RC芯片1个 11.0592M晶振1个轻触开关4个8255A芯片1个共阳极八段数码管6个电阻 1K18个电容30pF2个参考文献1 张鑫.单片机原理及应用.M 北京:电子工业出版社,2008 2 楼然苗,李光飞.单片机课程设计指导.M 北京:北京航天航空大学出版社,20073 朱定华,戴汝平.单片微机原理与应用.(M) 北京:清华大学出版社,20034 田立.田清.代方震.51单片机C语言程序设计快速入门.M 北京:人民邮电出版社,20075 谭浩强.C程序设计.M 北京:清华大学出版社,20066 林锐.高质量C编程指南. Z 北京:电子工业出版社,20017 何立民.MCS-51 系列单片机应用设计.M 北京:航空航天大学出版社,1990
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1