单片机控制系统设计与调试实训指导说明书单片机倒计时秒表

上传人:仙*** 文档编号:34307647 上传时间:2021-10-21 格式:DOC 页数:27 大小:474.50KB
收藏 版权申诉 举报 下载
单片机控制系统设计与调试实训指导说明书单片机倒计时秒表_第1页
第1页 / 共27页
单片机控制系统设计与调试实训指导说明书单片机倒计时秒表_第2页
第2页 / 共27页
单片机控制系统设计与调试实训指导说明书单片机倒计时秒表_第3页
第3页 / 共27页
资源描述:

《单片机控制系统设计与调试实训指导说明书单片机倒计时秒表》由会员分享,可在线阅读,更多相关《单片机控制系统设计与调试实训指导说明书单片机倒计时秒表(27页珍藏版)》请在装配图网上搜索。

1、 单片机控制系统设计与调试实训指导说明书 单片机倒计时秒表系 、 部: 机电工程学院 学生姓名: 指导教师: 职称 专 业: 班 级: 完成时间: 摘 要本文通过倒计时秒表的设计,阐述了单片机最小系统的概念与设计,对单片机的定时、中断等功能模块的应用有进一步的理解;本文还阐述了单片机编程的一些方法。关键字:单片机、电子秒表、定时、中断目录一、 设计课题1.1课程设计题目41.2课程设计任务41.2课程涉及研究内容4二、 硬件分析设计42.1单片机的选择42.2 LED显示器5 2.2.1 LED显示器结构及分类52.2.2 LED显示原理5 2.3键盘输入6三、 关键技术63.1定时器的使用6

2、3.1.1 作用63.1.2技术方案63.1.3具体程序实现73.2 显示与键盘8 3.2.1显示8 3.2.2键盘93.2.3利用定时中断实现显示与查键11四、 电路134.1复位电路144.2电路元件144.3 I/O口线连接15五、 程序设计165.1程序功能165.2主要变量说明165.3程序流程图165.4程序源代码16六、 设计总结26七、 参考文献26一、 设计课题1.1课程设计题目 本课程设计的课题是单片机倒计时秒表的设计1.2课程设计任务本课题的电子秒表系统需要实现以下的功能:1.用开关控制两种计时模式的选择。分别是单计时模式和连续计8个的计时模式。2.用开关控制电子秒表的启

3、动/停止/复位,七段数码管的高2位显示秒表的秒值,低2位显示秒表的百分秒值。3.可实现设定初值的倒计时功能。其中设计了三种初值调整方式,分别是增1(减1)、连续增(连续减)和快速增(快速减)。上述功能主要是为了讲述单片机定时器、键盘和LED显示器的使用方法。1.3课题涉及研究内容:1.定时器的使用:本实例通过秒表的计时详细说明了定时器的使用方法,可以使读者对单片机定时器的使用有比较深刻的理解。2.键盘的使用:本实例通过秒表的启动/停止/复位、计时模式的选择,以及倒计时初值的设定,讲述了独立式键盘的设计方法和关键技术。3.LED的使用:本实例比较详细地介绍了LED的显示原理和方法,并对其编程方法

4、做了一般性的总结。二、硬件分析设计一个完整的电子秒表电路就是一个单片机的最小系统,该系统由键盘输入电路、单片机、晶振和复位电路和LED显示电路四个方面构成。下面从单片机的选型,LED显示器的选择以及按键功能的设计这几个方面来对该系统进行进一步的分析。2.1 单片机的选择 对于本实例,由于电子秒表系统在数据处理和存储方面要求不高,所以选取片内带RAM和ROM的单片机即可,而并不需要在片外扩展RAM和ROM。在本实例中,选取的是ATMEL公司的AT89S52单片机。AT89S52单片机是ATMEL公司新近推出的高档型AT89S系列单片机中的增强型产品。AT89S52具有以下标准功能: 8k字节Fl

5、ash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻 辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。8 位微控制器 8K 字节在系统可编程 Flash AT89S52。2.2 LED显示器2.2.1 LED显示器的结构及分类。发光二极管芯片的适当连接的光学结构,可构成发

6、光显示器的发光段和发光点,由这些发光段或发光点可以组成数码管、符号管、米字管、矩阵管等。通常把数码管、符号管、米字管共称为笔画显示器;而把笔画显示器和矩阵管统称为字符显示器。 数码管可以按字高、颜色、结构、各发光段的连接方式等进行分类。 按照各发光段的连接方式,数码管可分为共阳极和共阴极两种。 所谓的共阳方式就是笔画显示器各段发光管的阳极是公共的,而阴极是互相隔离的。 所谓的共阴方式就是笔画显示器各段发光管的阴极是公共的,而阳极是互相隔离的。2.2.2 LED显示的原理。如图2-1所示为七段LED数码管的原理图,通过该图可以很容易看出共阳极和共阴极的七段LED的工作原理的不同点。对于共阴极的数

7、码管,所有发光二极管的阴极共连后接地,而阳极引出脚用于控制LED是否点亮。若阳极引出脚接地,则LED被熄灭;若阳极引出脚接高电平,则LED被点亮。图2-1 LED数码管原理图共阳极的LED正好相反,所有发光二极管的阳极共连后接高电平,而阳极引出脚用于控制LED是否点亮。若阴极引出脚接高电平,则LED被熄灭;若阴极引出脚接地,则LED被点亮。 因此共阳极和共阴极所需要的字型码正好相反。 单片机对LED管的显示可以分为静态和动态两种。静态显示的特点是各LED管能同时稳定地显示出各自字符;动态显示是指各LED轮流一遍一遍显示各自字符,但由于显示的切换较快,在人的视觉看来是各LED管同时显示不同字符。

8、 静态显示和动态显示各有利弊:静态显示较稳定,占用CPU的时间少,但是每个显示单元都需要单独的显示驱动电路,使用的电路硬件较多;动态显示虽然有闪烁感,战胜CPU时间多,但是使用的硬件少,能节省线路板的空间。相对而言,动态显示在单片机中的应用更加广泛。2.3键盘输入 外部指令对单片机的输入一般是通过按键、键盘等输入器来实现的,而键盘的设计以及编程方法在本例中将会重点介绍。在本例中,是利用键盘来实现秒表的启停控制及功能的选择:1.按键K1。按键K1有两个功能,第一个是在单计时状态下控制秒表的启停;第二个是在倒计时初值设定的时候用于增加初值。2.按键K2。按键K2同样有两个功能,第一个是在连续计8个

9、的计时模式下控制秒表的启停;第二个是在倒计时初值设定的时候用于减少初值。3.按键K3。按键K3的功能是设定秒表的工作方式。在默认状态下,秒表始终处于准备计时的状态,按下K3后秒表进入倒计时的状态,这时通过按键K1和K2可以进行倒计时初值的调整,再按下K3则进入倒计时。4.按键RESET.起程序复位作用。三、关键技术 单片机电子秒表设计需要解决三个主要问题:一是有关单片机定时器的使用;二是如何实现LED的动态扫描显示;三是编写倒计时秒表程序。编程可用汇编,也可使用C语言。3.1 定时器的使用3.1.1 作用电子秒表的计数频率取决于单片机的定时器,而定时器的使用也是单片机应用中的一个关键的技术。在

10、本例中,秒表的计时和倒计时的实现以及键盘的延时消抖都是由单片机中的定时器来实现的。3.1.2 技术方案 单片机中定时器的使用是一项重要的内容,也是一项基本的内容。关于定时器/计数器的基本结构与操作方式,在此不再赘述。此次设计重点主要是想通过电子秒表这一实例来说明单片机中定时器的使用。 为了实现秒表的计时,需要利用单片机实现百分之一秒(10ms)的中断,在中断程序中实现数字的变化,并动态显示出来。该程序的流程图如图3-1图3-1 流程图3.1.3具体程序实现1.定义/定义共阳极字符编码表uchar code TABLE10=0xa0,0xf9,0xc4,0xd0,0x99,0x92,0x82,0

11、xf8,0x80,0x98;uint m; /计数值uint LED0,LED1,LED2,LED3;/各位的数值uchar ms; /用于表示数码管显示位及计算是否10ms到设定定时器T0的工作方式TMOD=0x01; /T0方式1计时1msTL0=0x18;TH0=0xfc; EA=1; /开中断,启动定时器ET0=1;TR0=1;2.动态显示字符的子程序void display(void) switch(ms%4) case 0; P3=0xfe; /点亮百分一秒位的LED数码管 P1=tableLED3; /输出百分一秒位数值 P1_7=1; break; case 1; P3=0xf

12、d; P1=tableLED2; /点亮十分之一秒位的LED数码管 P1_7=1; /输出十分之一秒位数值 break; case 2; P3=0xfb; /点亮秒位的LED数码管 P1=tableLED1; /输出秒位数值 P1_7=0; /点亮小数点位 break; case 3; P3=0xf7; /点亮十秒位的LED数码管 P1=tableLED0; /输出十秒位数值 P1_7=1; break; default:return; 3.计算各位显示字符的子程序void add1(time) uint time; uint n,a; a =time/1000; LED0=a; /计算十秒位

13、数值 n=time%1000; LED1=(n/100); /计算秒位数值 n=n%100; LED2=(n/10); /计算十分一秒位数值 LED3=n%10; /计算百分一秒位数值3.2 显示与键盘3.2.1 显示 显示与键盘是单片机应用中的两个非常重要的方面。对于本例,显示采用的是动态扫描的方法。动态扫描的方法其实很简单,就是轮流点亮各数码管,同时把各数码管所需要的字符送到对应的I/O口;而中间需要有一定的延时,原因是单片机每一条指令执行的时间很短,如果切换得太快的话,发光二极管都来不及反应,在编程上可以加上一个延时子程序来解决。具体的程序如下: uchar delay; for(;)

14、display(); /调用显示子程序 for(delay=0;delay=200;delay+); /延时程序 ms+; /点亮下一个数码管 这是一个很简单的动态显示程序,完全按照动态显示的规则来编写的,一般单片机的显示都采用类似的编程方法。 但是这个程序有一个很大的问题,就是延时程序的出现。延时程序实际上就是使单片机不断地时行递减或递加计数,而在这一段时间内单片机是不能做其他任何事情的。这显然不符合我们实际应用的要求,因为在实际的应用中单片机除了显示外还有很多其他的事情是要处理的。实际应用时这个显示程序要进行改写,改写方法和程序将在后面提到。3.2.2 键盘 单片机系统中为了实现对系统的控

15、制和数据的输入,应用系统设置了键盘等输入设备,包括单片机复位作用的复位键,功能转换键及数字输入键等。在这些按键里面,除了复位键是专门的复位电路和复位功能外,其他的按键都是以开关状态来实现功能的。关于单片机的复位电路及复位键会在后面的复位电路分析中提到,这里只是对其他的按键的工作原理作讲解。 1)键盘的工作原理 键盘的最根本的功能就是当该按键按下后,单片机应用系统能够完成该按键所设定的功能。对于一组键盘,必定会通过一个接口电路与单片机相连。CPU要检测是否有键盘信息输入而且要判断是哪一个键被按下,然后根据键值来进行相应的工作。 2)键盘编程的关键技术 目前,无论是按键还是键盘,大部分都是利用机械

16、触点的合、断作用。机触点由于弹性作用的影响,在闭合断开的瞬间均有抖动现象,从而会引起电压信号的抖动,抖动时间与按键的机械特性有关,一般为5-10毫秒。为了确保正确的键输入,必须进行消除抖动处理。 常用的按键消抖方法有硬件消抖和软件消抖两种。 硬件消抖主要可以通过双稳态电路和滤波电路等消抖电路对按键进行消抖处理。常用的消抖电路如图3-2所示图3-2 软件消抖电路 通过消抖电路可以实现按键的消抖,但是增加了电路的元器件数目,也增加了硬件的成本。如果按键较多,则硬件的开销将会很大,因此常用的方法是进行软件消抖。 软件消抖其实也很简单,就是要查询该按键两次。第一次查询到该按键按下时,执行一段10ms的

17、延时程序,然后再一次查询该按键,如果该按键的状态仍然为闭合电平状态,则确认键真正有按下;若第二次查询按键不是闭合电平状态,则视为干扰。同理,第一次查询到该键松开时,执行一段10ms的延时程序,然后再一次查询该按键,如果该按键的状态仍然为断开电平状态,则确认键真正有松开;若第二次查询按键不是断开的电平状态,则视为干扰。通常情况下一次松开视为一次按键动作。软件消抖的流程图如图3-3所示 图3-3 软件消抖流程图查键子程序: bit start=0; /start为P1_2按下标志位 void scan(void) P2=0xff; /每次读I/O口输入数据时需先拉高电平 if(P2_1=0) fo

18、r(delay=0;delay=200;delay+); /延时程序 P2=0xff; if(P2_1=0)start=1; /标志位置1,确认P2_1按下 上面所示的是一般的查键程序。但是这个程序同样有个问题,因为每一次按键都有一个延时的子程序,这就造成了这种按键查询方式只能在CPU空闲的时候执行,从而造成CPU资源的浪费,而且当遇到需要复合键的时候编程就相当麻烦。所以有必要进行修改。3.2.3 利用定时中断实现显示与查键 前面所说的动态显示和键盘扫描会产生浪费单片机资源的问题,用定时中断进行显示与键盘扫描则可以避免这种情况,而且在编程上更加合理且可读性强。 1) 定时扫描键盘的工作方式 定

19、时扫描工作方式的本质是中断方式,第10ms进入一次键盘扫描子程序。定时扫描的流程图如图3-4所示 图3-4 定时扫描流程图 上图为其中一个键查键的流程图,cheak为该键消抖标志位。当没有键被按下,则cheak置0,并返回。当有按键被按下时,则检查消抖标志位cheak,如果该标志位为0,则说明了还没有进行消抖处理,将cheak置为1同时返回。因为经过10ms才再进入一次查键,所以相当于进行了10ms的键已经经过消抖处理,这时等待键的释放从而实现该键的功能。 定时扫描键盘的子程序如下: bit cheak; /cheak为P_2的消抖标志位 bit keydown; /keydown为P2_1按

20、下的标志位 bit start; /秒表启动标志位 bit stop; /秒表停止标志位 void scan(void) P2=0x0f; /读入前先将电位拉高 if(P2_1=0) if(cheak=0)cheak=1; /若cheak为0,则将cheak置1并返回 else keydown=1; /若cheak为1,则已消抖,按下标志置1 cheak=0; /同时将cheak置0 if(P2_1=0) while(keydown=1) /若P2_1和keydown均为1,则释放该键 keydown=0; if(start=0) start=1;stop=0; elsestart=0;sto

21、p=1; 从上面的子程序可以看出每一次按键工作都是以按键的释放为最终结束,程序检测到按键释放了才开始实现该按键的功能。 2)关于键盘中的组合键的用法 有一些单片机系统的设计由于电路设计上的限制,不允许设计多的按键;或人们的使用习惯,常常会用到组合键,这种组合在一些小型的仪表中的应用也是非常多的。所谓的组合键就是通过若干个按键的组合来实现更名的功能。这样的话可以减少按键的数目,同时也可以使操作更加方便。 图3-5是关于键盘组合键的程序流程图。 图3-5 程序流程图 由于上面已经给出了定时扫描键盘的子程序,所以下面只给出组合键功能所要增加的程序段。 if(P2_2=0) if(bcheak=0)b

22、cheak=1; /若bcheak为0,则将bcheak置1并返回 else b_keydown=1; /若bcheak为1,则已消抖,按下标志置1 bcheak=0; /同时将bcheak置0 if(keydown=1&b_keydown=1) /若两键同时按下,则实现组合键功能 combine=1; 上面的程序段,只要添加到void scan()里面就可以实现P2_1和P2_2同时按下的功能键了。当两键的按下标志位都为1时,证明两键已同时按下,这时将复合键标志位combine置1.当主程序检测到combine为1,则执行复合键程序。 3)利用定时中断实现显示 由于显示并不是单片机最主要的工

23、作,在显示程序中耗费大量的时间是不合适的,所以显示也是在中断中实现才比较合适。下面是具体的中断子程序: void time0(void)interrupt 1 using 1 TL0=0x18; TH0=0xfc; /重装计时器数据 ms+; if(ms=10) /到10ms则执行一次键盘扫描程序 ms=0; scankey=1; display(); /调用一次显示程序 从上面的程序段可以看出每1ms单片机中断一次,在中断服务子程序中实现两个功能:一是看是否到10ms,若到了则将键盘扫描标志位scankey置1,则中断返回后主程序中就会调用键盘扫描程序;二是调用显示子程序display(),

24、从display()中可以看出每一次调用就是点亮一个数码管,而每次调用所耗费的时间是非常短的。四、 电路 图3-6为单片机倒计时秒表的电路图。从电路图可以看出电子秒表的电路并不复杂,下面对其中一些部分略作说明。 图3-6 倒计时秒表电路图 4.1 复位电路 复位电路在单片机系统中是必不可少的。所谓的复位就是将单片机重新启动,这时单片机内部的所有寄存器都回到初始状态。本例电路是对应的复位电路如图4-1所示。 图4-1 复位电路 对于AT89S52单片机来说,它是高电平复位,也就是说只要将单片机的RESET脚接高电平并保持一定的时间就可以实现单片机的复位。从上面的电路可以看出实现的是上电复位和按键

25、复位两个复位功能。上电的一瞬间,单片机的RESET脚接到高电平,同时电容C1开始充电,经过一定的时间后电容充电饱和,10K的下拉电阻把RESET脚拉回到低电平状态,实现了单片机的复位。同样道理,在单片机工作的时候按下复位按钮,单片机的RESET脚接到了高电平,电容C1马上放电完毕;松开该按钮后电容C1开始充电,经过一定时间后电容充电饱和,10K下拉电阻把RESET脚拉回到低电平状态,实现了单片机的复位。4.2 电路元件 AT89S52:单片机,控制LED显示。 LED1LED4:七段码LED,用于显示秒表数据。 SS9012:由于数码管需要较大的电流驱动,单靠AT89S52的I/O口直接驱动效

26、果不好,需加放大电路。在本例中,所用的数码管为共阴极的,所以三极管选用了SS9012.NPN型三极管。当然,也可以选用共阳极的数码管,则三极管应选用PNP型的。 按键K1:在正常情况下,用于控制单一计时下秒表的启动、停止。在倒计时设定的情况下为倒计时初值的增加按键,按一下K1,倒计时初值增加1;按住K1不放,倒计时初值连续增加;加速连接两下K1然后不放,则倒计时初值快速增加,增加的速度是连续增加的10倍。 按键K2:在正常情况下,用于控制连续计时8个的计时模式下秒表的启动/停止。在倒计时初值设定的情况下为倒计时初值减少按键,按一下K2,倒计时初值减少1;按住K2不放,倒计时初值连续减少;快速按

27、两下K2然后不放,则倒计时初值快速减少,减少的速度是连续减少的10倍。 按键K3:用于秒表的功能的选择,在默认情况下,为秒表的计时准备模式;按下K3后秒表进入倒计时状态,这时通过按键K1和K2可以进行倒计时初值的调整,再按下K3则进入倒计时。 按键RESET:在复位电路中,对单片机起复位作用。 LED5:用于显示单片机的工作状态,在准备计时的时候,LED5点亮;在计时的时候,LED5闪烁;在倒计时初值设定和倒计时工作的时候,LED5熄灭。 LED6:用于显示单片机的工作状态,在准备计时和计时工作的时候,LED6熄灭;在倒计时初值设定的时候,LED6点亮;在倒计时工作的时候,LED6闪烁。4.3

28、 I/O口线连接 P1.0P1.7:与数码管的各个位相连,用于传送数码管的位段码。 P3.0P3.3:与数码管LED1LED4相连,通过单片机的P3.0P3.3可以控制LED的显示。 P2.1:和按钮K1相连,用于决定单一计时模式下的秒表启动/停止和倒计时初值的增加。 P2.0:和按钮K2相连,用于决定连续计8个的计时模式下秒表启动/停止和倒计时初值的减少。 P2.2:和按钮K3相连,用于单片机工作模式的选择。 P2.6:和LED6相连,用于显示单片机的工作状态。 P2.7:和LED5相连,用于显示单片机的工作状态。五、 程序设计 电子秒表的程序设计主要有三个方面:第一是利用定时器来完成秒表的

29、定时周期;第二是利用定时中断来实现键盘的扫描,从而确定单片机的工作状态;第三是利用单片机控制LED的输出显示。5.1程序功能 电子秒表程序主要完全如下功能: (1)两种计时模式的启动/停止/复位功能的秒表。 (2)可设定初值的倒计时定时器。5.2主要变量的说明 在程序中用到的关键变量如表5-1所示。 表5-1 在程序中用到的关键变量5.3 程序流程图 主程序完成的工作是检测各个标志位的状态,以确定单片机的工作情况。键盘查询和数据显示的部分在定时中断服务子程序中完成。 由于程序较大,所以将程序的各个功能模块的流程图分别列出。 图5-1 秒表计时功能。 图5-1 秒表计时功能流程图 图10和图11

30、:倒计时初值的设定 图5-2 倒计时初值设定 图5-3 倒计时初值设定图12: 倒计时的功能图5-4 倒计时功能流程图 5.4 程序源代码 全部的程序包括了头文件、变量的定义、主程序及各子程序。 1)头文件和变量定义 (1)包含reg52.h头文件。 (2)变量定义: 在程序中用到的变量如表1所示。 /头文件及变量声名 #include #define uchar unsigned char #define uint unsigned int /定义各管脚 sbit P2_0=P20; sbit P2_1=P21; sbit P2_2=P22; sbit P1_7=P17; sbit P2_6

31、=P26; sbit P2_7=P27; /各变量的声名 uchar code TABLE10=0xa0,0xf9,0xc4,0xd0,0x99,0x92,0x82,0xf8,0x80,0x98;/段位码 uchar ms,mm; uint m,tab8; uint LED0,LED1,LED2,LED3; /各位的数字 bit add; bit bit_add1; bit bit_sub; bit scankey; bit cheak; bit keydown; bit fast_add; bit double_key; bit K2_keydown; bit fast_sub; bit d

32、ouble_sub; bit sub; bit K3_keyup; bit K3_keydown; bit count_down; bit start; bit stop; bit eight_start; bit eight_stop; 2)主程序 在主程序中需要完成以下的功能:首先调用初始化函数对各个变量进行初始化,再对定时器的定时初值进行设定,接着根据各个标志位的值来判断单片机的工作模式及工作状态。键盘扫描由scan()来完成,各个位的数值的计算由add1()来完成。 void main(void) begin1(); /调用初始化函数 TMOD=0x01; TL0=0x18; TH0=

33、0xfc; EA=1; ET0=1; TR0=1; for(;) if(scankey=1) /进行键盘扫描 scankey=0; scan(); if(double_key=1) /倒计时初值快速增加 P2_6=0; P2.7=1; m=m+10; add11(m); if(fast_add=1) /倒计时初值连续增加 P2_6=0; P2_7=1; m+; add1(m); bit_add1=0; if(add=1) /倒计时初值增加1 P2_6=0; P2_7=1; add=0; m+; add1(m); if(double_sub=1) /倒计时初值快速减少 P2_6=0; P2_7=

34、1; m=m-10; add1(m); if(fast_sub=1) /倒计时初值连续减少 P2_6=0; P2_7=1; m-; add1(m); bit_sub=0; if(sub=1) /倒计时初值减少1 P2_6=0; P2_7=1; sub=0; m-; add1(m); if(start=1) /计时开始 if(mm=0)P2_7=!P2_7; P2_6=1; m+; if(m=6000)m=0; add1(m); if(stop=1)start=0; /计时停止 if(count_down=1) /倒计时开始 if(m0)m-; p2_7=1; if(mm=0)P2_6=!P2_

35、6; 3)初始化子程序 初始化子程序通常是在一开始就被调用,用来初始化各个变量,同时也显示了单片机上电后的工作状态。虽然有些变量在定义的时候已被默认初始化了,但是为了自己检查方便,还是应该加上初始化的子程序。 void beginl(void) fast_add=0; bit_add1=0; mm=0; m=0; ms=0; LED0=0; LED1=0; LED2=0; LED3=0; add=0; double_key=0; scankey=0; keydown=0; K3_keydown=0; count_down=0; P2_6=1; P2_7=0; 4)定时器中断子程序 这里的秒表的

36、计时、键盘的扫描及数值显示等都是利用定时中断来完成的。定时时间设为1ms,用于数值显示;同时利用累加的方法实现10ms和200ms的定时,用于键盘的扫描及控制显示灯的闪烁。 void time0(void) TL0=0x18; TH0=0xfc; ms+; if(ms=10) ms=0; mm+; if(mm=20)mm=0; scankey=1; display(); 5)显示子程序 显示程序其实包括了display()和add1(time)两个子程序。add1(time)是用来计算数码管各个位要显示的数值的子程序,display()是查段位码表及进行动态扫描的子程序。 void add1(

37、time) uint time; uint n,a; a=time/1000; LED0=a; /计算十秒位数值 n=time%10000; LED1=(n/100); /计算秒位数值 n=n%100; LED2=(n/10); /计算十分一秒位数值 LED3=n%10; /计算百分一秒位数值 void display(void) switch(ms%4) case 0; P3=0xfe; P1=tableLED3; P1_7=1; break; case 1; P3=0xfd; P1=tableLED2; P1_7=1; break; case 2; P3=0xfb; P1=tableLED

38、1; P1_7=1; break; case 3; P3=0xf7; P1=tableLED0; P1_7=1; break; default:return; 6)键盘扫描 键盘扫描的子程序完成的任务是每10ms进行一次键盘的查询,根据查询的结果对应的标志位进行赋值。因为要实现比较多的功能,所以键盘扫描的子程序比较复杂。 void scan(void) char a ; P2=0x0f; if(count_down=0&P2_2=0) if(cheak=0)cheak=1; elseK3_keydown=1; cheak=0; P2=0x0f; if(K3_keydown=1&P2_2=1 K

39、3_keyup=1; K3_keydown=0; if(K3_keyup=1) if(mm=0) if(bit_add1=1&keydown=1) double_key=1; elsebit_add1=0; if(mm=0) if(bit_sub=1&K2_keydown=1) double_sub=1; elsebit_sub=0; if(mm=0&keydown=1) fast_add=1; if(mm=0&K2_keydown=1) fast_sub=1; if(P2_1=0) if(cheak=0) cheak=1; mm=0; else keydown=1; if(P2_2=0) i

40、f(cheak=0) cheak=1;mm=0; else K2_keydown=1; if(P2_1=1&keydown=1) keydown=0; add=1; bit_add1=1; if(double_key=1) bit_add1=0; cheak=0; fast_add=0; double_key=0; mm=0; if(P2_0=1&K2_keydown=1) K2_keydown=0; sub=1; bit_sub=1; if(double_sub=1)bit_sub=0; cheak=0; fast_sub=0; double_sub=0; mm=0; if(P2_2=0)

41、if(cheak=0)cheak=1; else count_down=1; P2=0x0f; if(P2_1=0) if(cheak=0)cheak=1; elsekeydown=1; cheak=0; if(P2_1=1) if(keydown=1) keydown=0; if(start=0)start=1;stop=0; elsestart=0;stop=1; if(P2_0=1) if(K2_keydown=1) if(eight_start=0&eight_stop=0) K2_keydown=0; eight_start=1; if(eight_start=1) K2_keydown=0; taba=m; a+; if(a=8) eight_stop=1; eight_start=0; if(eight_stop=1) m=taba; if(a0)a-; 六、设计总结 本实例是一个单片机的最小系统的设计。在硬件设计上除了最基本的单片机系统外,还有键盘和七段数码管作为输入输出设备,这样就构成了单片机电子秒表的硬件。在软件设计上,尽量充分利用单片机的各种资源,比如定时器、中断等,这样可以使软件的编写更加合理。 七、参考文献

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!