单片机的数字钟设计_第1页
单片机的数字钟设计_第2页
单片机的数字钟设计_第3页
单片机的数字钟设计_第4页
单片机的数字钟设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、设计题目:单片机的数字钟设计设计目的:此课程设计介绍了基于单片机的数字钟的设计,详细讨论了它从软件上实现的过程,重点在时钟调整的方式:查询和中断的比较,然后,对数字钟的稳定性和精确性作了相关的讨论。 设计目标:实现了数字钟的主要部分和秒表的主要部分,以及产生报时信号,定时设置。 任务下达时间: 2010年3月1日任务完成时间: 2010年3月12日指导教师评语: 年 月 日设计成绩:摘要:本次课程设计介绍了基于单片机的数字钟的设计,详细讨论了它从软件上实现的过程,重点在时钟调整的方式:查询和中断的比较,然后,对数字钟的稳定性和精确性作了相关的讨论。最后,给出了采用中断方式实现的数字钟的源程序。

2、关键词:单片机,数字钟,数据缓冲区,中断,定时,消抖引言:在单片机技术日趋成熟的今天,其灵活的硬件电路的设计和软件的设计,让单片机得到了广泛的应用,几乎是从小的电子产品,到大的工业控制,单片机都起到了举足轻重的作用。单片机小的系统结构几乎是所有具有可编程硬件的一个缩影,可谓是“麻雀虽小,肝胆俱全”,单片机的学习和研究是对微机系统学习和研究的简捷途径。1. 方案论证1.1 数字钟硬件框图1.2 程序整体设计:定时模块,显示模块,数据调整模块,状态调整模块。1、总体介绍此部分主要介绍定时模块,和显示模块。定时部分采用经典的定时器定时。它实现了数字钟的主要部分,和秒表的主要部分,以及产生报时信号,定

3、时设置。显示模块是实现数字钟的又一重要部分,其模块的的独立程度直接影响到数字钟的可视化程度。在此部分的设计中,设置专用显示数据缓冲区40h-45h,与分,时及其他数据缓冲区数据区别,在其中存放的是显示段码,而其他缓冲区存放的是时间数据。在显示时,首先将时间十进制数据转化为显示段码,然后送往数码管显示。显示段码采用动态扫描的方式。在要求改变显示数据的类别时,只须改变R0(指向数据缓冲区的指针)指向的十进制数据缓冲区即可。2、数据调整数据调整有多种方式。一,可以直接进入相关状态进行有关操作,二,将调整分两步,先进入状态,然后执行操作,这两步分别由两个键控制。方式一,比较直接,设计思想也比较简单,但

4、是,这种方式存在操作时间和控制键数目的矛盾。如果用比较少的键,那么可能会在进入状态后处于数据调整等待状态,这样会影响到显示的扫描速度(显示部分可以采用8279芯片来控制,可以解决此问题)。 当然在这种方式下,还可以使用多个状态键,每个状态键,完成一个对应数据的调整。如果采用二的方式,就不会出现这种情况。因为状态的调整,与状态的操作可以分别由两个键控制,其状态的调整数可以多达256个(理论上),操作的完成是这样的,一键控制状态的调整,一键控制数据的调整(具体操作如图2)。以上两种方式的实现都可以采用查询和中断的方式。两种方式必须注意的问题是两者进行相关操作的过程不能太长否则会影响显示的扫描。利用

5、查询的方式,方法传统,对此就不作过多的讨论,以下是采用中断的方式实现的数字钟的一些讨论和有关问题作的一些处理。基于以上的讨论可以设计如下:将调整分为状态调整和数据调整两部分,每次进入中断只执行一次操作,然后返回,这样,就不必让中断处于调整等待状态,这样,可以使中断的耗时很小。R1MBFR1HOURR1FSR1SSR1NULL状态1状态2状态3状态4状态5状态6在状态进入后,调整指针的指向如右图所示:在右图中R1表示指向数据缓冲区的指针,它主要是为数据的调整而设立的,在图中:MBF ,HOUR,FS,SS,分别表示时钟的分,时,定时设置分,时,的数据缓冲区。状态5是秒表进入状态,状态6是时钟正常

6、显示状态。 在程序中R1为专用指针,它的值只在状态调整时改变,每次运行图示模块,只改变一次状态,就跳出程序。调整数据只须改变R1中的数据即可。3、中断方式应注意的问题: 采用中断的方式,最好将定时器中断的优先级设置为最高级,关于程序数据的稳定性应注意两个问题:一,在低优先级中断响应时,应在入栈保护数据时禁止高优先级的中断响应。二,在入栈保护有关数据后,对中断程序执行有影响的状态位,寄存器,必须恢复为复位状态的值。例如,在以下程序中,由于用到了十进制调整,所以在中断进入时,将PSW中的AC,CY位清零,否则,十进制调整出错。4、定时准确性的讨论程序中定时器,一直处于运行状态,也就是说定

7、时器是理想运作的,其中断程序每隔0.1秒执行一次,在理想状态下,定时器定时是没有系统误差的,但由于定时器中断溢出后,定时器从0开始计数,直到被重新置数,才开始正确定时,这样中断溢出到中断响应到定时器被重新置数,其间消耗的时间就造成了定时器定时的误差。如果在前述定时器不关的情况下,在中断程序的一开始就给定时器置数,此时误差最小。误差大约为:每0.1秒,误差712个机器周期。当然这是在定时器定时刚好为0.1秒时的情况,由以上分析,如果数字钟设计为查询的方式或是在中断的方式下将定时器中断设置为最高级,我们在定时值设置时,可以适当的扣除9个机器周期的时间值。但如果在中断的情况下,没有将定时器中断设置为

8、最高级,那就要视中断程序的大小,在定时值设置时,扣除相应的时间值。5、软件消抖    消抖可以采用硬件(施密特触发器)的方式,也可以采用软件的方式。在此只讨论软件方式。软件消抖有定时器定时,和利用延时子程序两种方式。一,定时器定时消抖可以不影响显示模块扫描速度,其实现方法是:设置标志位,在定时器中断中将其置位,然后在程序中查询。将其中断优先级设置为低于时钟定时中断,那么它就可以完全不影响时钟定时。二,在采用延时子程序时,如果显示模块的扫描速度本来就不是很快,此时可能会影响到显示的效果,一般情况下,每秒的扫描次数不应小于50次,否则,数码的显示会出现闪烁的情况。因此

9、,延时子程序的延时时间应该小于20毫秒,如果采用定时器定时的方式,延时时间不影响时钟。以下图1和图2是三种消抖方法的程序流程图:图1 查询方式消抖键按下延时键按下Y处理程序结束按键下,开定时器中断中断入口定时器中断关执行操作延时N开关定时器图2 采用中断方式消抖中断入口关本中断置位标志位BZ出口查询标志位BZBZ为1延时N时间开中断,清BZYN定时延长设置0.3秒,甚至更长,而不影响计数2. 基于以上,数字钟详细设计如下:2.1数字钟的操作如下:按键KEY0状态1:KEY0=1,数字钟正常时钟显示状态。状态2:KEY0=2,调整数字钟的分数据。状态3:  KEY0=3, 调整数字钟的

10、时数据。状态4: KEY0=4,数字钟的定时设置分值。状态5: KEY0=5,数字钟的定时设置时值。状态6: KEY0=6,秒表进入状态。说明:状态N表示KEY0键按下N次。22流程图:  程序设计的基本流程图如下:显示状态是否切换查询取代码段送到缓冲单元六位显示完?开始各缓冲区初始化各定时器中断设置开始计数显示缓冲区单元地址R0段显示单元值段扫描值送为数据口P1让调整位DPD点亮延时一小段时间显示单元地址加一扫描值右移一位YN三个要显示状态秒表数据单元定时设置数据单元时钟数据显示中断入口定时器置初值时间计数单元加一计数值等于10?计数值等单元清零秒值加一秒值等于60?秒值清零分值加

11、一分值等于60?分值清零时值加一时值等于24?时值清零结束YYYY标志位为1?秒表计数单元YN分值比较分时设定值等于时钟值?标志位BS置1,输出报时脉冲YN3.源代码NAME    ZFPORT    EQU   0CFA0HHOUR    EQU   26H    ;设置数据缓冲区BUF     EQU   23H     

12、SBF     EQU   22H       MBF     EQU   21H SA      EQU   27HFA      EQU   28HHH      EQU   29HMB0  &#

13、160;  EQU   2AHMB1     EQU   2BHMB2     EQU   2CH MM0     EQU   2DH CSEG AT 0000H        LJMP START   ;中断初始化CSEG AT 0003H     

14、;   LJMP KEY0      CSEG AT 0013H        LJMP KEY1CSEG AT 401BH        LJMP CLOCKCSEG AT 4100HSTART:  MOV    R0, #40H   ;数据缓冲区初始化       

15、  MOV    R6,#00H         MOV    A, #00H           MOV    R0, A           INC    R0     

16、60;      MOV    R0, A        INC    R0        MOV    R0, A        INC    R0      

17、;  MOV    R0, A        INC    R0        MOV    R0, A        INC    R0        MOV  

18、60; R0, A        MOV    SP,  #30H        MOV    TMOD, #10H         MOV    TH1, #38H           MOV

19、60;   TL1, #00H        MOV    BUF, #00H          MOV    SBF, #00H        MOV    MBF, #00H        MOV

20、    HOUR,#00H        MOV    SA,  #00H        MOV    FA,  #00H        MOV    HH,  #00H      

21、;  MOV    MB0,  #00H        MOV    MB1,  #00H        MOV    MB2,  #00H        MOV    MM0,   #00H 

22、60;      SETB   ET1        SETB   EX1        SETB   PT1        SETB   EA        SETB  

23、; P3.5        CLR    P3.0        MOV    TCON,  #45H        MOV    R5,  #01HDS1:    MOV    R0, #40H  

24、 ;扫描显示        MOV    R2, #20H    DS2:    MOV    DPTR, #PORT            MOV    A, R0          &#

25、160;   ACALL  TABLE        CJNE   R5, #02 ,L3        SJMP   L2L3:     CJNE   R5, #04H,L1 ;让调整位的DP点亮L2:     CJNE   R0, #42H,L0 

26、0;      ADD    A,#80H        SJMP   L0L1:     CJNE   R5,#03H, L4        SJMP  L5L4:     CJNE   R5, #05H,L0L5: 

27、    CJNE   R0, #44H,L0        ADD    A,#80HL0:     MOVX   DPTR, A        MOV    A, R2           

28、;   CPL    A        MOV    P1, A         MOV    R3, #07FH DEL:    NOP        DJNZ   R3, DEL     

29、;    INC    R0                CLR    C        MOV    A, R2        RRC    A  

30、;               MOV    R2, A       S2:    CJNE   R5,#06H,S3  ;切换到显示秒表计数        SETB   EX0    &#

31、160;   SJMP MIAOBIAOS3:    CJNE   R5,#04H,S1 ;切换到定时设置状态的显示        SJMP   DINGSHI  S1:   CJNE   R5,#05H,S0        SJMP   DINGSHI  S0:  

32、JNZ    DS2         MOV    R0, #40H   ;取缓冲区到显示缓冲区         MOV    A, SBF              ACALL  GET 

33、        MOV    A, MBF            ACALL  GET         MOV  A, HOUR         ACALL  GET   

34、0;     SJMP   DS1MIAOBIAO:JNZ    DS2       ;秒表显示         MOV    R0, #40H         MOV    A, MB0    &#

35、160;     ACALL  GET         MOV    A, MB1         ACALL  GET         MOV  A, MB2         A

36、CALL  GET         AJMP   DS1        DINGSHI: JNZ    DS2     ; 定时设置显示         MOV    R0, #40H    

37、0;    MOV    A, HH              ACALL  GET         MOV    A, FA          ACALL  GET   

38、0;     MOV  A, SA         ACALL  GET         AJMP   DS1 TABLE:          INC    A       

39、60; ;查表取段码         MOVC   A, A+PC         RET         DB     3FH         DB     06H &

40、#160;       DB     5BH         DB     4FH         DB     66H         DB   &

41、#160; 6DH         DB     7DH         DB     07H         DB     7FH         DB

42、60;    6FH         DB     40HGET:          ;将一个两位十进制数放入两个数码管对应的两个缓冲区         MOV    R4, A      

43、   ANL    A, #0FH             MOV    R0, A         INC    R0         MOV    A, R4   &

44、#160;      SWAP   A                      ANL    A, #0FH         MOV    R0, A   &

45、#160;     INC   R0                RETCLOCK:                      ;定时器中断服务程序    &

46、#160;     JNB  P3.0,D4       ;产生定时输出脉冲          CPL  P3.4    D4:  MOV    TL1, #0AFH          MOV    TH1, #3CH&

47、#160;        PUSH   PSW         PUSH   ACC         JNB    P3.5,C0   ;秒表计数模块         INC  &

48、#160; MB0               MOV    A, MB0             CJNE   A, #0AH,C0         MOV    MB0, #00H  &

49、#160;       MOV    A, MB1         INC    A                 DA     A      &#

50、160;          MOV    MB1, A         CJNE   A, #60H, C0            MOV    MB1, #00H         

51、;  MOV    A, MB2         INC    A                   DA     A           

52、;       MOV    MB2, A         CJNE   A, #60H, C0         MOV    MB2, #00H      C0:   JNB    78H, Z1 

53、   ;时钟计数程序         INC    R6         CJNE   R6,#05H,Z1         MOV    R6,#00H         CLR&

54、#160;   78H         SETB   EX0    Z1:  JNB    79H, Z2     ;去抖延时程序         INC    R6        

55、; CJNE   R6,#0FH,Z2         MOV    R6,#00H         CLR    79H         SETB   EX1   Z2:    INC  

56、  BUF         MOV    A, BUF             CJNE   A, #0AH,QUIT         MOV    BUF, #00H       

57、;    MOV    A, SBF         INC    A          DA     A                 MOV &

58、#160;  SBF, A         CJNE   A, #60H, QUIT          MOV    SBF, #00H          MOV    A, MBF       &#

59、160;                         CLR   P3.0     ;定时脉冲输出一分钟  D2:     INC    A       &

60、#160;            DA     A         MOV    MBF, A          MOV    A, FA      ;定时比较分值  &

61、#160;      CJNE   A, MBF,D0                SJMP   D1 D0:     MOV    A,  MBF         CJNE  

62、 A, #60H, QUIT          MOV    MBF, #00H          MOV    A, HOUR         INC    A         DA &#

63、160;   A         MOV     HOUR ,A D1:        MOV    A,SA    ;定时比较时值         CJNE   A, HOUR,D3      &#

64、160;  SETB   P3.0 D3:     MOV    A, HOUR         CJNE   A,#18H,QUIT         MOV    HOUR,#00HQUIT:    POP    ACC

65、0;        POP    PSW         RETI    KEY0:    CLR  ET1    ;外部中断零服务程序         PUSH  ACC     

66、;    PUSH  PSW         SETB ET1         CLR  EX0         CLR   CY    ;清与十进制调整有关的状态位        

67、; CLR   AC         SETB  78H        JB  P3.5,K0        MOV    MB0,  #00H ;  秒表数据清零        MOV   

68、; MB1,  #00H        MOV    MB2,  #00H   K0:   MOV   A,R1     ;完成加一操作        INC   A        DA    A&#

69、160;       CJNE  R1, #26H,K2  ;调整数据的限制        SJMP  K3  K2:   CJNE  R1, #27H,K4        SJMP  K3    K4:   CJNE A #60H,K1   

70、60;    MOV  A,#00H   K3:   CJNE A #24H,K1        MOV  A,#00H             K1:   MOV  R1,A        POP  PSW        POP  ACC        RETI KEY1:   CLR  ET1       ;外部中断一中断程序,完成状态的调整       

温馨提示

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

评论

0/150

提交评论