采用定时中断方式编制的时钟 AT89c51电子时钟电路图: 位选段选 功能 1 、 开机时,显示12-00-00时间,开始计时; 2 、 P0.0/AD0控制“秒”的调整,每按一次加1 秒; 3 、 P0.1/AD1控制“分”的调整,每按一次加1 分; 4 、P0.2/AD2控制“时”的调整,每按一次加1 个小时; 源程序 SECOND EQU 30H MINITE EQU 31H HOUR EQU 32H HOURK BIT P0.0 MINITEK BIT P0.1 SECONDK BIT P0.2 DISPBUF EQU 40H DISPBIT EQU 48H T2SCNTA EQU 49H T2SCNTB EQU 4AH TEMP EQU 4BH ORG 00H LJMP START ORG 0BH LJMP INT_T0 ;2ms定时中断程序入口地址 ;*********************************初始化************************************** START: MOV SECOND,#00H MOV MINITE,#00H MOV HOUR,#12 MOV DISPBIT,#00H MOV T2SCNTA,#00H MOV T2SCNTB,#00H MOV SP,#50H ;设置堆栈指针 MOV TEMP,#0FEH ;多余 LCALL DISP MOV TMOD,#01H ;定时器方式1,16位 MOV TH0,#0F8H ;定时器初值 MOV TL0,#30H ;定时器初值 SETB TR0 ;启动计数 SETB ET0 ;开T0中断 SETB EA ;开总中断 ;********************************主程序*************************************** WT: MOV P0,#0FFH ;准备从P0口采集数据 JB SECONDK,NK1 ;扫描秒按键 LCALL DELY10MS ;10ms延时 JB SECONDK,NK1 ;再扫描秒按键,目的是去抖 INC SECOND MOV A,SECOND CJNE A,#60,NS60 MOV SECOND,#00H ;秒按键计数SECOND NS60: LCALL DISP ;显示数据准备,等待中断显示 JNB SECONDK,$ ;秒按键=0,等待秒按键弹起 NK1: JB MINITEK,NK2 ;扫描分按键 LCALL DELY10MS ;10ms延时 JB MINITEK,NK2 ;再扫描分按键,目的是去抖 INC MINITE MOV A,MINITE CJNE A,#60,NM60 MOV MINITE,#00H ;分按键计数 NM60: LCALL DISP ; 显示数据准备,等待中断显示 JNB MINITEK,$ ;分按键=0,等待分按键弹起 NK2: JB HOURK,NK3 ;扫描时按键 LCALL DELY10MS ;10ms延时 JB HOURK,NK3 ;再扫描时按键,目的是去抖 INC HOUR MOV A,HOUR CJNE A,#24,NH24 MOV HOUR,#00H ;时按键计数 NH24: LCALL DISP ; 显示数据准备,等待中断显示 JNB HOURK,$ ;时按键=0,等待时按键弹起 NK3: LJMP WT ;********************************* 10(5?)ms延时***********...