140 likes | 328 Views
项目四 制作数字时钟. 日常生活中的时钟有机械的、数字的,其中数字时钟的特点是使用灵活、方便,在各种场合都经常使用。有的数字时钟除了计时外还有很多其他功能,可以完成很多与时间有关的控制,如定时开关机、微电脑控制打铃仪等。下面我们就来动手制作一个单片机电子时钟。 知识目标 1 .了解定时器的相关知识。 2 .掌握定时器的应用与编程。 3 .理解并运用相关指令。 技能目标 1 .掌握 1 秒定时闪烁电路的制作。 2 .掌握数字时钟电路的制作。 3 .掌握相应电路的程序编写。.
E N D
项目四 制作数字时钟 • 日常生活中的时钟有机械的、数字的,其中数字时钟的特点是使用灵活、方便,在各种场合都经常使用。有的数字时钟除了计时外还有很多其他功能,可以完成很多与时间有关的控制,如定时开关机、微电脑控制打铃仪等。下面我们就来动手制作一个单片机电子时钟。 • 知识目标 • 1.了解定时器的相关知识。 • 2.掌握定时器的应用与编程。 • 3.理解并运用相关指令。 • 技能目标 • 1.掌握1秒定时闪烁电路的制作。 • 2.掌握数字时钟电路的制作。 • 3.掌握相应电路的程序编写。
数字时钟要完成的功能是显示小时、分钟和秒,是一个按秒计数并显示的计数器,其中秒和分钟是60进制,小时是24进制(也可用12进制)计数。我们常见的数字时钟一般采用数码管作为显示工具,有的具有调时和定时等功能。数字时钟要完成的功能是显示小时、分钟和秒,是一个按秒计数并显示的计数器,其中秒和分钟是60进制,小时是24进制(也可用12进制)计数。我们常见的数字时钟一般采用数码管作为显示工具,有的具有调时和定时等功能。 实训目的 (1)掌握数码管动态显示及编程。 (2)掌握定时/计数器的使用及编程。 (3)掌握独立按键的使用及编程。 (4)掌握使用编程器和ISP下载线烧写程序。 实训内容 任务要求:数字时钟应具有显示小时、分钟和秒的功能,并具有计时和调时的功能。
一、硬件电路制作 1.电路原理图 根据任务要求,数字时钟电路的硬件电路如图4-2所示。
2.电路制作 对于简单电路,可以在万能实验板上进行电路的插装焊接。制作步骤如下: ①按如图4-2所示电路原理图在万能实验板中绘制电路元器件排列布局图; ②按布局图分别进行元器件的排列、插装; ③按焊接工艺要求对元器件进行焊接,背面用φ0.5~φlmm镀锡裸铜线连接(可以使用双绞网线),直到所有的元器件连接并焊完为止。 数字时钟电路装接图如图4-3所示。
3.电路的调试 通电之前先用万用表检查各种电源线与地线之间是否有短路现象。 给硬件系统加电,检查所有插座或器件的电源端是否有符合要求的电压值,接地端电压是否0V。
二、编写程序 1.程序流程图 根据数字时钟系统实现的功能,软件要完成的工作是按键扫描和处理、延时1s并计时、显示数值BCD码转换、动态扫描显示程序等。 初始化程序及主程序:初始化程序主要完成定义变量内存分配、初始化缓冲区、初始化T0定时器、初始化中断,开中断、启动定时器;主程序循环执行调用按键处理子程序、调用BCD码转换子程序、调显示子程序,主程序流程图如图4-4所示。 按键扫描子程序:根据硬件电路,两个按键的作用是完成调时,即SW1小时加1、SW2小时加1。扫描过程为逐一轮流检查按键是否按下,如果没有按下,则继续检查下一按键;如果按键按下,延时去抖后执行按键相应功能指令,按键扫描子程序流程图如图4-5所示。 定时器中断服务程序:利用定时器/计数器TO进行50ms的定时,R3计数20次,完成Is计时并加l,判断是不是到60s,到60s分钟加l,判断是不是到60min,到60min小时加1,小时到24时置0,定时器中断服务程序流程图如图4-6所示。
BCD码转换子程序:小时数值HOUR送A,除以10,A中商为小时十位,送HOUR_2保存,B中余数为小时个位,送HOUR_1保存。分钟数值MIN送A,除以10,A中商为分钟十位,送MIN_2保存,B中余数为分钟个位,送MIN_l保存。 显示时间程序采用动态扫描的方法,PO口输出段码,P2口的P2.0、P2.1、P2.2、P2.3输出位码,依次显示小时十位、小时个位、分钟十位和分钟个位,同时P2.4控制两个发光二极管闪烁。 2. 数字时钟程序 参考程序: HOUR EQU 40H ;小时变量 MIN EQU 41H ;分钟变量 SEC EQU 42H ;秒变量 HOUR_1 EQU 50H ;小时BCD码个位 HOUR_2 EQU 51H ;小时BCD码十位 MIN_1 EQU 52H ;分钟BCD码个位 MIN_2 EQU 53H ;分钟BCD码十位 SW1 BIT P3.2 ;小时加1按键 SW2 BIT P3.3 ;分钟加1按键 ;*****************************************************************
ORG 0000H LJMP START ;转移到初始化程序 ORG 000BH LJMP CT0S ;到定时器0的中断服务程序 ORG 0030H START: ;初始化部分 MOV HOUR,#12 ;初始时间12:00 MOV MIN,#00 MOV R3,#20 ;初始化R3(20次50ms的中断) MOV TMOD,#01H ;初始化T0定时器,T0工作方式1 ,定时50ms MOV TH0,#04BH ;送定时器初值 MOV TL0,#0FFH SETB EA ;开总中断 SETB ET0 ;开定时器0中断 SETB TR0 ;启动定时器 MAIN: LCALL KEYPRESS ;调按键处理子程序 LCALL BCD8421 ;调BCD码转换子程序 LCALL DISPLAY ;调显示子程序 LJMP MAIN ;***************************************************
DELAY: MOV R7,#255 ;延时子程序 D2: DJNZ R7,D2 RET ;*************************************************** KEYPRESS: ;按键处理子程序,p3.2、P3.3为按键的接口 SETB SW1 ;设置为输入 JB SW1,KEY1 ;按键没有按下,查询下一按键 LCALL DELAY ;若按下,延时去抖 JB SW1,KEY1 MOV A,HOUR ;小时变量送A INC A ;小时数加1 MOV HOUR,A ;保存小时数 CJNE A,#24,KEY0 ;如果不等于24,等待按键释放 MOV HOUR,#00H ;如果等于24,则使小时变量送0 KEY0: LCALL DISPLAY ;调显示起延时去抖作用,保证扫描显示不停止 JNB SW1,KEY0 ;没有释放,继续等待 LCALL DISPLAY JNB SW1,KEY0 KEY1: SETB SW2 JB SW2,KRET LCALL DELAY
JB SW2,KRET MOV A,MIN INC A ;分钟变量加1 MOV MIN,A CJNE A,#60,KEY10 ;如果不等于60,等待按键释放 MOV MIN,#00H ;如果等于60,则使分钟变量送0 KEY10: LCALL DISPLAY JNB SW2,KEY10 LCALL DISPLAY JNB SW2,KEY10 KRET: RET ;************************************************** CT0S: ;走时部分。延时1s,秒加1,秒满60分钟加1,分钟满60小时加1 PUSH A ;保护现场 MOV TH0,#04BH ;重新送定时器初值 MOV TL0,#0FFH DJNZ R3,TIMEEND ;中断次数不足20次直接返回 MOV R3,#20 ;中断次数满20次为1秒,重新送计数初值 MOV A,SEC ;秒增加1 INC A MOV SEC,A CJNE A,#60,TIMEEND MOV SEC,#00H MOV A,MIN ;满60秒,分钟加1
INC A MOV MIN,A CJNE A,#60,TIMEEND MOV MIN,#00H MOV A,HOUR ;满60分,小时加1 INC A MOV HOUR,A CJNE A,#24,TIMEEND MOV HOUR,#00H TIMEEND:POP A ;恢复现场 CPL P2.4 RETI ;*********************BCD码转换子程序,变量不大于60,没有百位 BCD8421:MOV A,HOUR MOV B,#0AH DIV AB ;除以10,商为十位,余数为个位 MOV HOUR_2,A MOV HOUR_1,B MOV A,MIN MOV B,#0AH DIV AB MOV MIN_2,A MOV MIN_1,B RET ;*****************************************************************
DISPLAY: ;以下是显示子程序,P1口输出段码,P2口输出位码 MOV P2,#00H ;显示小时的部分 MOV DPTR,#CHAR MOV A,HOUR_2 MOVC A,@A+DPTR MOV P1,A MOV P2,#0FDH LCALL DELAY MOV A,HOUR_1 MOVC A,@A+DPTR MOV P1,A MOV P2,#0FEH LCALL DELAY MOV A,MIN_2 ;显示分钟的部分 MOVC A,@A+DPTR MOV P1,A MOV P2,#0F7H LCALL DELAY MOV A,MIN_1 MOVC A,@A+DPTR MOV P1,A MOV P2,#0FBH LCALL DELAY RET CHAR:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳型字型码表 END
三、程序的调试与烧写 程序调试无误后,写入单片机的程序存储器,接通电路,观察电路运行情况。 四、项目评价