跪求一个MCS51单片机的电子时钟设计程序

1. AT89S51CPU,12MHZ时钟,常规上电和手动复位电路。
2. 4位LED数码显示器(带钟点),分别显示“小时:分钟”或“分钟:秒”
3. 3个独立试按键,具体功能描述如下:
[MODE]——模式转换键,具有“正常——小时(校准)——分钟(校准)——小时(闹铃)——分钟(闹铃)”等5种模式,每按一次,转换一种模式。假设当前处于正常模式,按一下此键,“小时”闪烁,表示进入“小时”调校模式,再按一次,转入分钟模式,如此类推,正常模式下不闪烁。
[UP]——加“1”键,按下此键,被选中的项目加“1”
[DOWN]——减“1”键,按下此键,被选中的项目减“1”
4. 设计1路蜂鸣器输出驱动电路,用于报警或按键声
5. 电源:9V交流输入,全波整流,滤波,7805稳压电路,输出5V直流电源共给单片机系统。
6. 编写数字电字钟的所有软件,包括主程序,定时器中断计时程序,定时器中断扫描显示程序,键盘扫描及功能程序,BCD码转换程序,“二翻十、拆字、转码”程序,闹铃程序等等。将这些程序整合成一个完整的电子钟程序,在软件模拟器上调试,在MCS51学习机上调试,并测试其功能及性能。在设计软件时,学生可充分发挥自己的特长和想象力,自行扩充功能,如“秒表”功能,通信功能,钟控功能等。
7. 在程序调试通过后,测试计时精度,分析误差来源,提出补偿方法。
一楼的无效 我意思说不符合我的要求而已

第1个回答  2008-06-27
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;系统名称: 数字钟
;创健人:济南, 日期:2005.6.19
;系统功能描述:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;修改人: 修改日期:
;修改原因:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;蕊片型号:AT89C51 晶振:12MHZ
;-------------硬件连接---------------------
;
;
;-----------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序名称: 声明区
;功能描述: 声明各常量和变量
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SECOND EQU 30H ;存储妙
MINITE EQU 31H ;存储分
HOUR EQU 32H ;存储时
SPEAKER BIT P3.7
HOURK BIT P3.2 ;时键
MINITEK BIT P3.3 ;分键
SECONDK BIT P3.0 ;妙键
FLAG BIT 00H
FLAG1S BIT 01H ;1S到标志位.
DISPBUF EQU 40H ; 段选标志
DISPBIT EQU 48H ; 位选通标志
T2SCNTA EQU 49H ; 中断次数
T2SCNTB EQU 4AH ; 中断次数
TEMP EQU 4BH ; 初始化位
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序名称:主程序
;功能描述;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 00H
LJMP START
ORG 0BH
LJMP INT_T0 ;T0中断入口
START: MOV SECOND,#00H ;妙初始化0
MOV MINITE,#00H ;分初始化0
MOV HOUR,#12 ;时始化送12
MOV DISPBIT,#00H ;位选通标志
MOV T2SCNTA,#00H ;标志
MOV T2SCNTB,#00H ;标志
CLR FLAG
CLR FLAG1S
SETB SPEAKER
MOV TEMP,#07FH ;初始位,让第一个位选通
LCALL DISP ;调用显示处理程序
MOV TMOD,#01H ;方式1
MOV TH0,#0F8H ;赋值20MS
MOV TL0,#030H
SETB TR0 ;开中断启动
SETB ET0
SETB EA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序名称:按键程序
;功能描述;调整分,时
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WT: JNB FLAG,CC
LCALL SPEAKING
CC: JB SECONDK,NK1 ;妙末按下,转去判断分键
LCALL DELY10MS ;按下,延时,消抖动
JB SECONDK,NK1 ;再次判断是否按下?
INC SECOND ;按下,按下一次加1
MOV A,SECOND ;送A判断
CJNE A,#60,NS60 ;妙末到60转分
MOV SECOND,#00H ;到了,回0
NS60: LCALL DISP
JNB SECONDK,$ ;等待妙键释放
NK1: JB MINITEK,NK2 ;跟妙键分析相似
LCALL DELY10MS
JB MINITEK,NK2
INC MINITE
MOV A,MINITE
CJNE A,#60,NM60
MOV MINITE,#00H
NM60: LCALL DISP
JNB MINITEK,$
NK2: JB HOURK,NK3 ;时键
LCALL DELY10MS
JB HOURK,NK3
INC HOUR
MOV A,HOUR
CJNE A,#24,NH24
MOV HOUR,#00H
NH24: LCALL DISP
JNB HOURK,$ ;等待时键释放
NK3: LJMP WT ;返回
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序名称:显示处理程序
;功能描述;,该程序实现时,分,秒计时转换为BCD码并存储在以47H起始地址的显示
;输出数据存储单元里,即显示缓冲区47H至40H单元
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISP:
MOV A,#DISPBUF ;送40H
ADD A,#7 ;加8
;DEC A
MOV R1,A ;送47H
MOV A,HOUR ;送时
MOV B,#10
DIV AB
MOV @R1,A ;存储时十位
DEC R1 ;指向时个位
MOV A,B ;送时个位
MOV @R1,A ;存储时个位
DEC R1
MOV A,#10
MOV @R1,A
DEC R1
MOV A,MINITE ; 送分,处理与时处理类似
MOV B,#10
DIV AB
MOV @R1,A
DEC R1
MOV A,B
MOV @R1,A
DEC R1
MOV A,#10
MOV @R1,A
DEC R1
MOV A,SECOND ;送秒
MOV B,#10
DIV AB
MOV @R1,A
DEC R1
MOV A,B
MOV @R1,A
DEC R1
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序名称:显示程序
;功能描述;在LED上显示为12-12-12显示模式.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INT_T0:
MOV TH0,#0F8H ;重赋值
MOV TL0,#030H
MOV A,#DISPBUF ;段偏移存储
ADD A,DISPBIT ;位偏移量
MOV R0,A ;段偏移存储
MOV A,@R0 ;段偏移量
MOV DPTR,#TABLE ;指向字形表
MOVC A,@A+DPTR ;取字形
MOV P0,#0 ;防闪烁
MOV P0,A ; 字形选P1口显示
MOV A,DISPBIT ;位移偏量
MOV DPTR,#TAB ;指向位选
MOVC A,@A+DPTR ;取位选通
MOV P2,A ;位送P3口选通
INC DISPBIT ;位偏移加1
MOV A,DISPBIT ;位偏移送A
CJNE A,#08H,KNA ;八个数管码扫描完不?
MOV DISPBIT,#00H ;描完重新开始
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序名称:1秒计时程序
;功能描述;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KNA: INC T2SCNTA
MOV A,T2SCNTA
CJNE A,#100,DONE
MOV T2SCNTA,#00H
INC T2SCNTB
MOV A,T2SCNTB
CJNE A,#05H,DONE
SETB FLAG1S
MOV T2SCNTB,#00H
INC SECOND ;秒加1
MOV A,SECOND
CJNE A,#50,BB ;50S到.
MOV A,MINITE
CJNE A,#59,BB ;59分
SETB FLAG ;打开正点响标志.
BB: MOV A,SECOND
CJNE A,#60,NEXT ;秒超过60了没有? 没有,调用显示处理程序
MOV SECOND,#00H
INC MINITE ;分加1
MOV A,MINITE
CJNE A,#60,NEXT
MOV MINITE,#00H ;分超过60,清0
INC HOUR ;并时加1
MOV A,HOUR
CJNE A,#24,NEXT ;是否超过24小时?不是,则跳至NEXT
MOV HOUR,#00H
NEXT: LCALL DISP ; 调用显示处理程序
DONE: RETI ;中断返回
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H ;0到9字形(40表示横扛)
TAB: DB 07FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序名称:正点报时子程序
;功能描述; 前十秒报第一声,每隔一秒报一声.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SPEAKING:MOV R5,#6
AA: CLR SPEAKER
JNB FLAG1S,$ ;延时1S.
CLR FLAG1S
SETB SPEAKER
JNB FLAG1S,$
CLR FLAG1S
DJNZ R5,AA
CLR FLAG
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序名称:延时子程序
;功能描述;按键消抖调用.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELY10MS:MOV R6,#10
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
第2个回答  2008-06-26
如果无效是不可能的,这是课设,我的分数是95,如果你觉得有错误,请自己改正,程序收回
相似回答
大家正在搜