跪求一个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,如果你觉得有错误,请自己改正,程序收回

51单片机求这个时钟的c语言程序
void delay500us(unsigned char X);\/\/延时子程序声明 void display();\/\/显示子程序声明 void display001();\/\/显示子程序声明 void display002();\/\/显示子程序声明 void keyscan();\/\/按键识别子程序声明 void main(){ init();while(1){ keyscan();} } void init()\/\/初始化子程序 { TMOD...

51单片机做数字电子钟
在Dais-52PH+单片机实验箱中,有一片8155芯片用于扩展3×3键盘,还具有6位LED数码显示器,可分别用于按键和显示控制。 在PC机上调试可使用MCS51仿真开发系统。 数字电子钟的工作过程为:从00:00:00(时:分:秒)开始计时,以24小时为一循环,最大计时时间为23:59:59。当需要校正时间时,按下调整键,小时的十位闪烁,...

求教一个51单片机程序。。(LCD电子时钟)
\/\/DS1302 时钟芯片与 C51 之间的引脚连接定义sbit IO=P3^6;sbit SCLK=P3^5;sbit RST=P3^7;sbit ACC0=ACC^0;sbit ACC7=ACC^7;\/\/校时按键与 C51 的引脚连接定义sbit key1=P3^2;\/\/设置键sbit key2=P3^3;\/\/加键sbit key3=P3^4;\/\/减键uchar code tab1[]={"20\/\/\/"};\/\/年显示的固定字符uc...

利用51单片机的定时器和实验仪的数码管电路设计一个电子时钟,显示格式X...
LED_DATA = value_tab1[value_shio % 10]; \/***小时的个位数显示***\/ Delay_1ms(5);SHUG_02 = 0;\/***分钟***\/ SHUG_03 = 1;LED_DATA = value_tab0[value_feno \/ 10]; \/***分钟的十位数显示***\/ Delay_1ms(5);SHUG_03 = 0;SHUG_04 = 1;LED_DATA = value_...

51单片机简易电子钟设计。汇编语言编写
JC LOOP7 LJMP LOOPLOOP7: JNB PAUSE,LOOP8 ;暂停状态可以输入数字键 LJMP LOOPLOOP8: MOV 33H,34H MOV 34H,35H MOV 35H,36H MOV 36H,37H MOV 37H,38H MOV 38H,KEYVAL MOV A,33H SWAP A ORL A,34H LCALL BCDH MOV HOUR,A MOV A,35H SWAP A ORL...

51单片机电子钟 通过按键调整时间 这块程序怎么写(方法)
MIN EQU 4BH SEC EQU 4CH BUFF EQU 4DH ;;主程序 MAIN: MOV HOUR,#00H ;时,分,秒,标记清零 MOV MIN,#00H MOV SEC,#00H MOV BUFF,#00H MOV SP,#60H ;设堆栈指针 MOV TH0,#3CH ;定时器赋初值 MOV TL0,#0B0H MOV 40H,#14H ;设循环次数20次 MOV...

哪位大神能帮我写一个基于单片机C51的电子时钟设计报告?
电子钟设计 1、 电路图:2功能实现:(1. 把“单片机系统”区域中的P1.0-P1.7端口用8芯排线连接到“动态数码显示”区域中的A-H端口上;(2. 把“单片机系统:区域中的P3.0-P3.7端口用8芯排线连接到“动态数码显示”区域中的S1-S8端口上;(3. 把“单片机系统”区域中的...

求一个用汇编语言编写一个8051单片机的时钟程序(急急急啊)
KEY_S: DS 1 KEY_V: DS 1 DIS_DIGIT: DS 1 SEC: DS 1 DIS_INDEX: DS 1 HOUR: DS 1 MIN: DS 1 SEC100: DS 1 DIS_BUF: DS 8 BUF_HOUR_H EQU DIS_BUF ; 小时十位 BUF_HOUR_L EQU DIS_BUF+1 ; 小时个位 BUF_MIN_H...

利用51系列单片机设计一个24小时制电子时钟
钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的

基于51单片机的数码管设计电子时钟,可以调时间的,怎么弄唉,大家帮帮...
1、数码管驱动电路设计。一般用三极管如9013或者锁存器如74HC573来驱动,使其能够正常亮灭。2、使用动态扫描的方式让数码管能够显示你想要的数字,这个可以用中断来扫描也可以不用。3、使用实时时钟芯片如DS1302来获得你想要的时间数据。这种网上有很多源程序,你可以搜索看。你要学会几点:(1)对芯片...

相似回答
大家正在搜