首页 > 编程语言 >51单片机实现的时钟小程序

51单片机实现的时钟小程序

时间:2022-11-23 22:37:37浏览次数:41  
标签:DIG 51 mov T0 单片机 TIMER VAR bit 时钟

注意:没有60秒和60分

思路:存秒钟的变量CURR_NUM_L进行判断:到了59秒就清零并跳到分钟数+1的子程序中,否则+1 ~ 分钟再进行判断:若为59则清零,若不是59则+1

  1     SECOND        EQU    31H    ;second
  2     MIN        EQU    32H    ;min
  3     HOUR        EQU    35H    ;hour
  4     VAR_TIMER    EQU    33H    ;Soft timer
  5     VAR_LED        EQU    34H    ;Led value,#03FH for red led,#0CFH for green led
  6 
  7     DAT_74164    bit    P0.6
  8     CLK_74164    bit    P0.7
  9 
 10     DIG_1        bit    p0.5
 11     DIG_2        bit    p0.4
 12     DIG_3        bit    p0.3
 13     DIG_4        bit    p0.2
 14     DIG_5        bit    p0.0
 15     DIG_6        bit    p0.1
 16 
 17 ;*********************************************
 18     org    0000H        
 19     jmp    MAIN
 20 
 21     org    000BH
 22     jmp    interrupt_T0
 23 ;*******************************************    
 24     org    0030H        ;Start program from 0030H        
 25 MAIN:
 26     mov    P0,#0FFH    ;Initialize the port    
 27     mov    P1,#0FFH    
 28     mov    P2,#0FFH    
 29     mov    P3,#0FFH
 30     
 31     /*Initilize the var*/
 32     mov    SECOND,#50        ;给变量赋值1秒计数由0〜59s
 33     mov    MIN,#00
 34     mov    HOUR,#00
 35     mov    VAR_TIMER,#00H
 36     mov    VAR_LED,#03FH
 37     mov    P1,VAR_LED
 38 
 39     /*Initialize T0*/
 40     mov    TMOD,#01H
 41     mov    TH0,#0B1H    ;20ms,load number
 42     mov    TL0,#0E0H
 43     setb    TR0        ;Start T0
 44     setb    ET0        ;Enable T0 inerrupt
 45     setb    EA        ;Enable interrupt
 46     ;mov    IE,#82H    ;#10000010B
 47 
 48 MAIN_LOOP:
 49     call    DISPLAY_NUM    ;Display number
 50     jmp    MAIN_LOOP
 51 
 52     ret
 53 ;****************************************************
 54 interrupt_T0:
 55     push    acc        ;Pay attention to here
 56     push    psw
 57 
 58     ;Reset T0,must be done
 59     ;clr    TF0        ;auto clear the tag of overflow
 60     mov    TH0,#0B1H    ;20ms,reload number
 61     mov    TL0,#0E0H
 62 
 63     inc    VAR_TIMER    ;Add 20ms
 64     /*If VAR_TIMER=50,then time for 1s */
 65     mov    a,VAR_TIMER
 66     cjne    a,#50,INT_T0_EXIT
 67 
 68     mov    VAR_TIMER,#00H
 69     call    NUM_ADD_SECOND    
 70 
 71 INT_T0_EXIT:
 72     pop    psw
 73     pop    acc
 74 
 75 reti
 76 ;****************************************************
 77 DISPLAY_NUM:
 78     ;A<-A/B,显示min
 79     mov    a,SECOND
 80     mov    b,#0Ah
 81     div    ab
 82     mov    r0,a
 83 
 84     ;Display the low value
 85     mov    a,b
 86     mov    dptr,#TAB_LED
 87     movc    a,@a+dptr
 88 
 89     call    sendTo74164    ;Display the numbet
 90     setb    DIG_2        ;显示秒钟的低位
 91     clr    DIG_1
 92     setb    DIG_3
 93     setb    DIG_4
 94     setb    DIG_5
 95     setb    DIG_6
 96     call    DELAY_DISP
 97     
 98     ;Display the high value
 99     mov    a,r0
100     mov    dptr,#TAB_LED
101     movc    a,@a+dptr
102 
103     call    sendTo74164    ;Display the number
104     setb    DIG_1        ;显示秒钟的高位
105     clr    DIG_2
106     setb    DIG_3
107     setb    DIG_4
108     setb    DIG_5
109     setb    DIG_6
110     call    DELAY_DISP
111 
112     ;
113     ;A<-A/B,显示second
114     mov    a,MIN
115     mov    b,#0Ah
116     div    ab
117     mov    r0,a
118 
119     ;Display the low value
120     mov    a,b
121     mov    dptr,#TAB_LED
122     movc    a,@a+dptr
123 
124     call    sendTo74164    ;Display the numbet
125     setb    DIG_1        ;显示分钟的低位
126     setb    DIG_2
127     clr    DIG_3
128     setb    DIG_4
129     setb    DIG_5
130     setb    DIG_6
131     call    DELAY_DISP
132     
133     ;Display the high value
134     mov    a,r0
135     mov    dptr,#TAB_LED
136     movc    a,@a+dptr
137 
138     call    sendTo74164    ;Display the numbet
139     setb    DIG_2        ;显示分钟的高位
140     setb    DIG_1
141     setb    DIG_3
142     clr    DIG_4
143     setb    DIG_5
144     setb    DIG_6
145     call    DELAY_DISP
146 
147     ;A<-A/B,显示hour
148     mov    a,HOUR
149     mov    b,#0Ah
150     div    ab
151     mov    r0,a
152 
153     ;Display the low value
154     mov    a,b
155     mov    dptr,#TAB_LED
156     movc    a,@a+dptr
157 
158     call    sendTo74164    ;Display the numbet
159     setb    DIG_2        ;显示时低位
160     setb    DIG_1
161     setb    DIG_3
162     setb    DIG_4
163     clr    DIG_5
164     setb    DIG_6
165     call    DELAY_DISP
166     
167     ;Display the high value
168     mov    a,r0
169     mov    dptr,#TAB_LED
170     movc    a,@a+dptr
171 
172     call    sendTo74164    ;Display the number
173     setb    DIG_1        ;显示时高位
174     setb    DIG_2
175     setb    DIG_3
176     setb    DIG_4
177     setb    DIG_5
178     clr    DIG_6
179     call    DELAY_DISP
180 
181     ret
182 ;*******************************************
183 ;Send data of A to chip 74LS164
184 sendTo74164:
185     push    07h
186     push    acc
187 
188     mov    r7,#08        ;send 8 bits      
189 SEND164_LOOP:
190     clr    CLK_74164    ;clear clock-line for reading data
191     rlc    a
192     mov    DAT_74164,c    ;move data-bit to data-line    
193     setb    CLK_74164    ;send data to 74164
194     djnz    r7,SEND164_LOOP
195     clr    CLK_74164    ;clear clock-line for reading data
196         
197     pop    acc
198     pop    07h
199     ret
200 ;****************************************************
201 NUM_ADD_SECOND:
202     ;Get previos value
203     mov    a,SECOND
204     inc    a
205     mov    SECOND,a
206     ;到了1秒看变量是不是59,是变量赋0(分钟数+1),不是则+1
207     cjne    a,#59,NUM_ADD_EXIT
208 
209 
210 
211 NUM_ADD_RESET_SECOND:
212     
213     mov    SECOND,#00        ;
214 
215 
216 NUM_ADD_MIN:
217     
218     ;到了59min,分钟数清零,没到加一
219     ;判断MIN是不是59,是的话清零,不是+1
220     ;get previous value
221     mov    a,MIN
222     inc    a
223     mov    MIN,a
224     cjne    a,#59,NUM_ADD_EXIT
225 
226 NUM_ADD_RESET_MIN:
227     
228     mov    MIN,#00        
229     
230 NUM_ADD_HOUR:
231     
232     ;到了59hour。小时数清零,没到加一
233     ;判断HOUR是不是59,是的话清零,不是+1
234     ;get previous value
235     mov    a,HOUR
236     inc    a
237     mov    HOUR,a
238     cjne    a,#24,NUM_ADD_EXIT
239 
240 NUM_ADD_RESET_HOUR:
241     
242     mov    HOUR,#00
243 
244 NUM_ADD_EXIT:    
245     
246     ret
247 ;****************************************************
248 
249     
250 ;****************************************************
251 DELAY_DISP:
252     mov    r7,#5
253 DELAY_DISP_LOOP:
254     mov    r6,#200
255     djnz    r6,$
256     mov    r6,#200
257     djnz    r6,$
258 
259     djnz    r7,DELAY_DISP_LOOP
260     ret
261 ;****************************************************
262 ;****************************************************
263 ;LED code
264 TAB_LED:    
265     DB    0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
266 ;****************************************************
267     END    

 

标签:DIG,51,mov,T0,单片机,TIMER,VAR,bit,时钟
From: https://www.cnblogs.com/luoxiaoluo/p/16920381.html

相关文章

  • 使用ZLG7289,51单片机驱动的时钟显示小程序
    1;*******ZLG7289PARAMETERS*******2ZLG_BIT_CNTEQU30H;Thenumberofdatasended;循环次数3ZLG_REC_BUFEQU31H;T......
  • 【《硬件架构的艺术》读书笔记】03 处理多个时钟(2)
    3.6握手信号方法 1)X将数放在数据总线上兵发出xreq信号,表示有效数据已经发到接收器Y的数据总线上。2)xreq信号同步到接收器时钟域ylk上。3)Y在识别xreq同步的信号yreq2......
  • 漂亮的时钟
    一个漂亮的时钟demo:http://lc-lmduqymx.cn-n1.lcfile.com/OfaLwPXSvkljp3sFODBDrolJsCcMRpzz/index.html代码<!DOCTYPEhtml><htmllang="en"><title>时钟</tit......
  • 51 nod 1056 最长等差数列 V2
    ​​1056 最长等差数列 V2​​基准时间限制:8 秒空间限制:131072 KB分值: 1280 ​​难度:9级算​​法题例如:13568910121314等差......
  • 51 nod 1851 俄罗斯方块
    ​​1851 俄罗斯方块​​基准时间限制:1 秒空间限制:131072 KB分值: 160 ​​难度:6级算法题​​ 给一个黑白图,每次能将某些区域的格......
  • 51 nod 算法马拉松28 先序遍历与后序遍历
     ​​先序遍历与后序遍历​​ ​​​Scape​​​ (命题人)​​​tangjz​​​ (测试)基准时间限制:1 秒空间限制:131072 KB分值: 40对于给定......
  • Keil软件 fail to excute "C://C51//BIN//C51.exe"解决方案
    原因:编译器的路径因修改过而导致的错误解决方法:重新设置编译器的默认路径1、在Project->Components,Environment,Books...  2、Folders/Extensions 修改ToolB......
  • TM4C123G学习记录(1)--时钟
    为了准备电赛临时学一下TM4C123G,简单记录学习内容大家可以在​​这里​​下载我收集的资源,非常全面,花了很大功夫收集来的,还有书籍、例程代码等还可以在TI官网下载相关文档​......
  • 单片机定时器寄存器配置方法
    单片机定时器寄存器配置方法 定时器的使用方法1.选择工作方式(设置M1,M0) 设置TMOD的值选择控制方式(设置GATE)选择定时器还是计数器模式(设置C/......
  • 【《硬件架构的艺术》读书笔记】03 处理多个时钟(1)
    3.1介绍单时钟设计更易于实现,也更少出现亚稳态、建立和保持时间违例方面的问题。但在实践中,很少有设计只在一个时钟下运行。3.2多时钟域多个始终可以有以下一种或多种......