;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;系统名称: 数字钟;创健人:济南, 日期:;系统功能描述:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;修改人: 修改日期:;修改原因:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;蕊片型号:AT89C51 晶振:12MHZ;-------------硬件连接---------------------;;;-----------------------------------------------;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;程序名称: 声明区;功能描述: 声明各常量和变量;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SECOND EQU 30H ;存储妙MINITE EQU 31H ;存储分HOUR EQU 32H ;存储时SPEAKER BIT BIT ;时键MINITEK BIT ;分键SECONDK BIT ;妙键FLAG BIT 00HFLAG1S BIT 01H ;1S到标志位.DISPBUF EQU 40H ; 段选标志DISPBIT EQU 48H ; 位选通标志T2SCNTA EQU 49H ; 中断次数T2SCNTB EQU 4AH ; 中断次数TEMP EQU 4BH ; 初始化位;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;程序名称:主程序;功能描述;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ORG 00HLJMP STARTORG 0BHLJMP INT_T0 ;T0中断入口START: MOV SECOND,#00H ;妙初始化0MOV MINITE,#00H ;分初始化0MOV HOUR,#12 ;时始化送12MOV DISPBIT,#00H ;位选通标志MOV T2SCNTA,#00H ;标志MOV T2SCNTB,#00H ;标志CLR FLAGCLR FLAG1SSETB SPEAKERMOV TEMP,#07FH ;初始位,让第一个位选通LCALL DISP ;调用显示处理程序MOV TMOD,#01H ;方式1MOV TH0,#0F8H ;赋值20MSMOV TL0,#030HSETB TR0 ;开中断启动SETB ET0SETB EA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;程序名称:按键程序;功能描述;调整分,秒.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WT: JNB FLAG,CCLCALL SPEAKINGCC: JB SECONDK,NK1 ;妙末按下,转去判断分键LCALL DELY10MS ;按下,延时,消抖动JB SECONDK,NK1 ;再次判断是否按下?INC SECOND ;按下,按下一次加1MOV A,SECOND ;送A判断CJNE A,#60,NS60 ;妙末到60转分MOV SECOND,#00H ;到了,回0NS60: LCALL DISPJNB SECONDK,$ ;等待妙键释放NK1: JB MINITEK,NK2 ;跟妙键分析相似LCALL DELY10MSJB MINITEK,NK2INC MINITEMOV A,MINITECJNE A,#60,NM60MOV MINITE,#00HNM60: LCALL DISPJNB MINITEK,$NK2: JB HOURK,NK3 ;时键LCALL DELY10MSJB HOURK,NK3INC HOURMOV A,HOURCJNE A,#24,NH24MOV HOUR,#00HNH24: LCALL DISPJNB HOURK,$ ;等待时键释放NK3: LJMP WT ;返回;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;程序名称:显示处理程序;功能描述;,该程序实现时,分,秒计时转换为BCD码并存储在以47H起始地址的显示;输出数据存储单元里,即显示缓冲区47H至40H单元;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DISP:MOV A,#DISPBUF ;送40HADD A,#7 ;加8;DEC AMOV R1,A ;送47HMOV A,HOUR ;送时MOV B,#10DIV ABMOV @R1,A ;存储时十位DEC R1 ;指向时个位MOV A,B ;送时个位MOV @R1,A ;存储时个位DEC R1MOV A,#10MOV @R1,ADEC R1MOV A,MINITE ; 送分,处理与时处理类似MOV B,#10DIV ABMOV @R1,ADEC R1MOV A,BMOV @R1,ADEC R1MOV A,#10MOV @R1,ADEC R1MOV A,SECOND ;送秒MOV B,#10DIV ABMOV @R1,ADEC R1MOV A,BMOV @R1,ADEC R1RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;程序名称:显示程序;功能描述;在LED上显示为12-12-12显示模式.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;INT_T0:MOV TH0,#0F8H ;重赋值MOV TL0,#030HMOV 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 ;位偏移加1MOV A,DISPBIT ;位偏移送ACJNE A,#08H,KNA ;八个数管码扫描完不?MOV DISPBIT,#00H ;描完重新开始;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;程序名称:1秒计时程序;功能描述;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KNA: INC T2SCNTAMOV A,T2SCNTACJNE A,#100,DONEMOV T2SCNTA,#00HINC T2SCNTBMOV A,T2SCNTBCJNE A,#05H,DONESETB FLAG1SMOV T2SCNTB,#00HINC SECOND ;秒加1MOV A,SECONDCJNE A,#50,BB ;50S到.MOV A,MINITECJNE A,#59,BB ;59分SETB FLAG ;打开正点响标志.BB: MOV A,SECONDCJNE A,#60,NEXT ;秒超过60了没有? 没有,调用显示处理程序MOV SECOND,#00HINC MINITE ;分加1MOV A,MINITECJNE A,#60,NEXTMOV MINITE,#00H ;分超过60,清0INC HOUR ;并时加1MOV A,HOURCJNE A,#24,NEXT ;是否超过24小时?不是,则跳至NEXTMOV HOUR,#00HNEXT: 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,#6AA: CLR SPEAKERJNB FLAG1S,$ ;延时 FLAG1SSETB SPEAKERJNB FLAG1S,$CLR FLAG1SDJNZ R5,AACLR FLAGRET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;程序名称:延时子程序;功能描述;按键消抖调用.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DELY10MS:MOV R6,#10D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1RET十、调试运行1、录入程序,并保存为.C文件。2、按硬件接线图接线。3、联机并编译。4、修改语法错误,并存盘。5、编译并把烧进单片机,并运行。6、先连续运行,如不能正常运行,再用断点运行或单步运行法进行调试,直至达到设计要求。十一、设计结果经过调试,能够顺利运行,符合设计要求,时钟走动正常,十二、参考文献单片机原理,接口及应用—嵌入式系统技术基础,李群芳 肖看 编著。清华大学出版社十三、设计心得体会通过这次单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西