1、多功能电子钟设计一、80C51 单片机功能介绍下面是 8051 单片机引脚图及引脚功能介绍:40 个引脚按引脚功能大致可分为 4 个种类:时钟、控制和 I/O引脚。 电源: VCC - 芯片电源,接+5V; VSS - 接地端; 时钟:XTAL1 、XTAL2 - 晶体振荡电路反相输入端和输出端。 控制线:控制线共有 4 根, ALE/PROG:地址锁存允许/片内 EPROM 编程 ALE 功能:用来锁存 P0 口送出的低 8 位地址 PROG 功能:片内有 EPROM 的芯片,在 EPROM 编程期间,此引脚输入编程脉冲。 PSEN:外 ROM 读选通信号。 RST/VPD: 复位/备用电源
2、。 RST(Reset)功能:复位信号输入端。 VPD 功能:在 Vcc 掉电情况下,接备用电源。 EA/Vpp:内外 ROM 选择/片内 EPROM 编程电源。 EA 功能:内外 ROM 选择端。 Vpp 功能:片内有 EPROM 的芯片,在 EPROM 编程期间,施加编程电源 Vpp。 I/O 线80C51 共有 4 个 8 位并行 I/O 端口:P0、P1、P2、P3 口,共 32 个引脚。P3 口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线) 。二 单片机课程设计目的1 进一步熟悉和掌握 8051 单片机的结构及工作原理。2 掌握单片机的接口技术及相关外围芯片的外特性,控
3、制方法。3 通过课程设计,掌握以单片机核心的电路设计的基本方法和技术。 4 通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。5 通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发一单片机应用系统的全过程,为今后从事相应打下基础。6.掌握 SPI 串口进行数据传输的应用,并学会使用外部芯片辅助项设计. 7.锻炼通过自学与自己探索的方式解决问题的能力. 8.通过此次课程设计将单片机软硬件结合起来对程序进行编辑,校验,锻炼实践能力和理论联系实际的能力.三、 设计任务1基本任务:利用定时器/计数器中段和静态显示,实现电子钟的时分秒精确走时和校准。时间日期显示用四个数码管分别显示
4、时、分;月、日。时间正常走时小数点闪烁,日期显示时小数点不闪烁。2. 功能增加型任务:可以正确定时,默认显示时间,可切换显示时间,可校时,校日期。校正时校正对应的内容闪烁。四设计要求1、设计用四个数码管分别显示时分/月日,采用静态显示方法。2、资源分配:K1、 时间日期切换键 P1.4K2、 校正键 P1.5 进入校正状态,显示日期,月闪烁,显示指针+1,对应内容闪烁K3、 +键 P1.6 闪烁内容加 1K4、 确定键 P1.7 退出校正状态,显示定时时间: 1/16S 计数单元:2FH秒分时日单元:30H33H时间/日期标志:20H.0 为 1,时间标志20H.0 为 0,日期标志校正标志:
5、 20H.1校正指针: 21H:00H 月 01H 日10H 时 11H 分3、校正功能:若开始为时间,按下 K2,进入时间时校正状态,按下 K2,进入分校正状态,按下 K2 进入月校正状态,按下 K2,进入日校正状态,按下 K4,确定状态。若开始为按下 K1 切换为日期,则先进行日期校正,再进入时间校正。五、设计思路1、主程序部分思路通过对时间日期初始化,时间日期标志,校正标志,初始化按键信息,定时器计数器初值等设置。2、计时部分设计规律思路该设计采用 80C51 单片机内部的定时器计数器 1,中断系统,独立式键盘,串行口方式 1,进行设计一个多功能单片机数字钟。 。设计的电子时钟通过数码管
6、显示,并能通过按键实现设置时间、校时、启动控制等。用定时计数器 T1,工作于定时,采用方式 1,对 12MHZ 的系统时钟进行定时计数,初值设为 0BDCH。形成定时时间为 62500ms。用片内 RAM 的 2FH 单元对 62500ms 计数,计 16 次产生秒计数器 34H 单元加 1,秒计数器加到 59 则分计数器 33H 单元加1,分计数器加到 59 则时计数器 32H 单元加 1,时计数器加到 23 则时计数器清 0。然后把分、时 、日、月计数器分成分单元和时单元放到 4 个数码管的显示缓冲区,通过数码管显示出来。显示格式为小时高位、小时低位-分高位、分低位和显示日期格式为月高位、
7、月低位-日高位、日低位。3、判键处理程序思路先读按键信息,进而对时间日期切换键,校正键等判断,分析各种可能,最后把时间日期送显缓,详细思路看流程图。4、校正状态程序设计思路先判断与上次按键是否相同,防止连击,再次判断是否校正键,通过校正指针看是对哪个单元校正,校正中进行加键处理,通过指针内容加 1 进行处理,校正结束后确定,显示送显缓,详细思路看流程图。5、显示程序思路把我们设计好的送显缓,通过静态显示方法,四个数码管分别显示时分/月日,小数点在第二个数码管上显示,若显示时间,小数点闪烁,若显示日期,小数点不闪烁。六、实验电路图七、流程图计时程序2FH 单元内容减一2FH 单元内容为零2FH
8、单元重赋初值,秒单元加一并调整为十进制数到 60s?秒单元清零,分单元加一,并调整为十进制到 60 分?分单元清零,小时单元加一并调整为十进制数到 24 小时?小时单元清零,日单元加一并调整为十进制数到 31 天?天单元置一,月单元加一并调整为十进制数到 13 月?月单元置一判键程序YYYYYYYYYYNNNNNYN八、程序ORG 0000HSJMP MAINORG 001BH ;设置定时器、计数器 1 入口地址LJMP JISHUORG 0030H;主程序初始化MAIN: MOV 50H,#0FFH ;按键信息MOV 30H,#01H ;月单元置 1MOV 31H,#01H ;日单元置 1M
9、OV 32H,#00H ;时单元置 0MOV 33H,#00H ;分单元置 0MOV 34H,#00H ;秒单元置 0MOV 2FH,#00H ;计数单元清 0CLR 20H.1 ;清校时标志SETB 20H.0 ;时间,日期标志MOV TMOD,#10H ;定时器计数器方式 1MOV TH1,#0BH ;初值,以 62.5MS 定时MOV TL1,#0DCH MOV IE ,#88H ;EA 为 1,ET1 为 1SETB TR1 ;启动运行定时器计数器 1SJMP $ ;等待中断;正常计数JISHU:MOV TH1,#0BH ;重新赋初值MOV TL1,#0DCHMOV A,2FHINC
10、AMOV 2FH,ACJNE A,#0FH,KEY ;判断一秒到否?到了则进位MOV 2FH,#00 ;重新对计数单元清 0MOV A,34H ;进行秒单元计数ADD A,#01HDA A ;十进制调整MOV 34H,ACJNE A,#60H,KEY ;判断 1 分钟是否到?MOV 34H,#00HMOV A,33HADD A,#01HDA AMOV 33H,ACJNE A,#60H,KEY ;判断一小时是否到?MOV 33H,#00HMOV A,32H ;进行小时单元计数ADD A,#01HDA AMOV 32H,ACJNE A,#24H,KEYMOV A,#00HMOV A,31H ;进行
11、日单元计数ADD A,#01HDA AMOV 31H,ACJNE A,#31H,KEYMOV 31H,#01HMOV A,30H ADD A,#01HDA AMOV 30H,ACJNE A,#12H,KEYMOV 30H,#01H;判断按键KEY: JNB 20H.1,ZOUSHI ;校时标志不为 1,则跳转LJMP JIAOSHI ;为 1 跳转为校时ZOUSHI: MOV A,P1 ;读按键信息CJNE A,50H,KEY1 ;判断与上一次按键是否相同LJMP NONE1 ;跳转到无按键处理KEY1:MOV 50H,A JNB ACC.4,SWITCH1 ;是否 P1.4 切换键,即时间日
12、期切换键是否按下JNB ACC.5,SET1 ;是否 P1.5 校正键,校正键是否按下LJMP NONE1 ;都不是则跳转到无按键处理SWITCH1:CPL 20H.0 ;切换键按下,取反时间日期标志NONE1: JNB 20H.0,DATE1 ;显示时间日期标志MOV 3BH,32H ;时间送显缓MOV 3AH,33H LJMP DISP ;跳转到显示程序DATE1:MOV 3BH,30H ;日期送显缓MOV 3AH,31HLJMP DISPSET1:SETB 20H.1 ;校正键按下MOV 21H,#00 ;校正指针清 0CLR 20H.0 ;切换到日期MOV 3BH,30H ;显示日期M
13、OV 3AH,31H LJMP DISP ;跳转到显示程序;校正JIAOSHI:MOV A,P1CJNE A,50H,KEY2 ;判断与上次是否按键相同?JNB P1.6,KEY2LJMP NONE2 ;没有键按下,调用显缓KEY2: MOV 50H,A ;有键按下JNB ACC.5,SET2 ;是否校正键JNB ACC.6,ADD2 ;是否加键JNB ACC.7,SURE ;是否确定键LJMP NONE2 ;无键按下处理SET2: INC 21H ;按下校正键,校正下一个状态ANL 21H,#03H ;修改校正标志SJMP NONE2ADD2: MOV A,2FHANL A,#07HCJNE
14、 A,#04H,NONE2MOV A,#30H ;处于校正,按下加键ADD A,21H ;判断校正哪个单元MOV R0,A MOV A,R0ADD A,#01H ;指针内容加 1DA AMOV R0,ACJNE R0,#30H,DATE ;判断是否校月CJNE R0,#13H,NONE2 ;判断校月是否超出范围MOV R0,#01HSJMP NONE2DATE:CJNE R0,#31H,HOUR ;判断是否校日CJNE R0,#32H,NONE2MOV R0,#01HSJMP NONE2HOUR: CJNE R0,#32H,MIN ;判断是否校时CJNE R0,#24H,NONE2MOV R0
15、,#00HSJMP NONE2MIN: CJNE R0,#60H,NONE2 ;校分MOV R0,#00HSJMP NONE2SURE:CLR 20H.1 ;是确定键,清校正状态SJMP TIME2NONE2:JNB 21H.1,DATE2TIME2:SETB 20H.0 ;时间送显缓MOV 3BH,32HMOV 3AH,33HLJMP DISPDATE2:CLR 20H.0 ;日期送显缓MOV 3BH,30HMOV 3AH,31H;显示缓冲器内容送入程序DISP: MOV A,3BH ;第一个数码管显示ANL A,#0F0H ;保留高四位SWAP AMOV 43H,ACJNE A,#00H,
16、LP1MOV 43H,#0AHLP1: MOV A,3BH ANL A,#0FH ;保留低位MOV 42H,AMOV A,3AH ANL A,#0F0H ;保留高位SWAP AMOV 41H,AJB 20H.0,LL ;时间日期标志为 1 则跳转CJNE A,#00H,LLMOV 41H,#0AHLL: MOV A,3AHANL A,#0FHMOV 40H,A ;解压成四个 BCD 码JNB 20H.1,DISP1 ;判断是否校正?非校正则正常显示JNB P1.6,DISP1JNB 2FH.3,DISP1 ;校正,判断半秒到否?未到正常显示JNB 21H.0,LP ;半秒到,判断数码管哪个闪M
17、OV 41H,#0AH ;送灭码MOV 40H,#0AHSJMP DISP1LP: MOV 43H,#0AHMOV 42H,#0AHDISP1:MOV DPTR,#TABMOV A,43HMOVC A,A+DPTR ;查表显示MOV SBUF,A ;送出静态码JNB TI,$ ;发送中断CLR TIMOV A,42H ;小数点显示程序MOVC A,A+DPTRMOV C,2FH.3ANL C,20H.0MOV ACC.0,CMOV SBUF,A JNB TI,$ CLR TIMOV A,41HMOVC A,A+DPTR MOV SBUF,AJNB TI,$CLR TIMOV A,40HMOVC
18、 A,A+DPTRMOV SBUF,AJNB TI,$CLR TIRETITAB: DB 09H,7DH,07H,15H,71H,91H,81H,3DH,01H,11H,0FFHEND九、实验中出现的问题及分析1、调试过程中出现一些标识符,符号等问题2、数码管时间显示时高位为 0 时开始是灭的,可加到 10 以上还是不能显示,解决办法:CJNE A,#00H, LP1 MOV 43H,#0AH3、显示过程中,小时加到了 24 点且分钟加到了 60 分,解决办法:小时 MOV 32H,A CJNE A,#24H,KEY MOV A,#00H分钟 CJNE A,#60H,KEY MOV 34H,#00H MOV A,33HADD A,#01H十、心得体会通过本次实验,让我对 80C51 单片机有了更好的了解,懂得如何去使用定时器计数器,中断,串行口,数码管显示,按键等知识,让自己对单片机产生了更大的兴趣。能够完全实现数字钟的功能,让自己所学的东西应用到实践中,感觉到了单片机的重要性。能够通过单片机,完成各种成品的设计。最后感觉到要好好学好单片机就要好好多去编程,自己动手去实现功能,同时希望自己以后在单片机方向有个好的发展,在此也感谢老师的悉心栽培。姓名:罗龙(09045202)日期:11 年 12 月 21 号指导老师:陈老师