|
实在不行了,东拼西凑写了一个数字钟的程序,调试了将近一个月了,还是不能运行,在这里麻烦各位老师帮帮忙吧。
其实就是一个很简单的数字钟,12时制显示,秒点闪烁,带有消隐无效零的功能(因为用的是18:88的LED屏,所以必需要消隐无效零,否则无法读数)。
- ;简单的89C2051时钟程序
- ;显示方式为.12:34
- ;P1口输出段数据,P3口输出位数据
- ;P1.7为秒点,P3.7为PM输出
- ;P3.4校时,P3.5校分
- ;晶振12MHz
- flash equ 21h
- sec equ 22h ;定义秒存储位置
- min equ 23h ;定义分存储位置
- hour equ 24h
- hourk bit p3.4 ;调时按钮
- mink bit p3.5 ;调分按钮
- pm bit p3.7 ;PM输出端
- org 0000h
- ljmp start
- org 000bh
- ljmp int_t0
- org 0030h
- start: mov a,#00h ;清0
- mov flash,a
- mov sec,a ;秒清0
- mov min,a ;分清0
- mov hour,#01
- setb pm ;PM清0
- mov p1,#0ffh
- mov p3,#0ffh
- mov ip,#02h ;IP,IE初始化
- mov ie,#82h
- mov tmod,#01h ;设定定时器0工作于方式1
- mov tl0,#0b0h ;设定定时初始值50ms
- mov th0,#3ch
- setb tr0 ;启动定时
- setb et0
- setb ea
- mov sp,#60h ;重设堆栈指针
- next: lcall disp ;调用显示子程序
- lcall key ;调用按键检测子程序
- jz next ;没有键按下返回
- lcall ankey ;调用按键处理子程序
- sjmp next ;重新循环
- int_t0:push acc ;保护现场
- push psw
- mov tl0,#0b0h ;赋定时初值
- mov th0,#3ch
- inc 20h ;20H地址加1
- mov a,20h
- cjne a,#10,reti1
- mov 20h,#00h ;半秒钟时间到
- inc flash ;半秒加1
- mov a,flash
- cjne a,#2,reti1
- mov flash,#00h
- inc sec ;秒加1
- mov a,sec
- cjne a,#60,reti1
- mov sec,#00h ;一分钟时间到
- inc min ;分加1
- mov a,min
- cjne a,#60,reti1
- mov min,#00h ;一小时时间到
- inc hour ;时加1
- mov a,hour
- cjne a,#12,reti1
- mov hour,#00h ;12小时到,清零.
- cpl pm ;PM取反
- reti1: pop psw ;恢复现场
- pop acc
- reti ;中断返回
- disp: mov a,#10 ;显示子程序
- mov b,a
- mov a,hour
- div ab
- cjne a,#01,zero
- ajmp normal
- zero: mov a,#11
- normal:mov r1,a
- mov a,@r1
- mov dptr,#tab
- movc a,@a+dptr
- mov p1,a
- clr p3.0
- lcall dely
- setb p3.0
- mov a,b
- mov r1,a
- mov a,@r1
- mov dptr,#tab
- movc a,@a+dptr
- mov p1,a
- clr p3.1
- lcall dely
- setb p3.1
- mov a,#10
- mov b,a
- mov a,min
- div ab
- mov r1,a
- mov a,@r1
- mov dptr,#tab
- movc a,@a+dptr
- mov p1,a
- clr p3.2
- lcall dely
- setb p3.2
- mov a,b
- mov r1,a
- mov a,@r1
- mov dptr,#tab
- movc a,@a+dptr
- mov p1,a
- clr p3.3
- lcall dely
- setb p3.3
- mov a,flash
- cjne a,#00,light
- setb p1.7
- light: clr p1.7
- ret ;子程序返回
- tab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,0ffh;共阳段码表0123456789不亮
- dely: mov r6,#10
- d1: mov r7,#20
- d2: djnz r7,d2
- djnz r6,d1
- ret
- key: lcall disp ;按键处理子程序
- jb hourk,mmm
- hhh: lcall disp
- lcall dely
- jnb hourk,hhh
- inc hour
- mmm: jb mink,key
- nnn: lcall disp
- lcall dely
- jnb mink,nnn
- inc min
- ret
- end
复制代码 |
评分
-
1
查看全部评分
-
|