湖南工程学院
课 程 设 计
课程名称 单片机原理与应用 课题名称
专 业 班 级 电气工程1005 姓 名 何俊伟 指导教师 2013年6月 7日
湖南工程学院
课 程 设 计 任 务 书
课程名称 单片机原理与应用 课 题 电子时钟设计
专业班级
学生姓名
学 号
指导老师 李世军 审 批
任务书下达日期 2013年 6 月 7 日 任务完成日期 2013年 6月 25 日
目录
1. 课题的设计要求、目的、意义
2. 系统总体方案选择与说明
3. 系统结构框图与工作原理
4. 各单元硬件设计说明及计算方法
5. 软件设计与说明(包括流程图)
6. 调试结果与必要的调试说明
7. 使用说明
8. 程序清单
9. 总结
10. 参考文献
一、课题设计要求、目的、意义
要求实现功能:
1)开机时,显示00:00:00的时间开始计时;
2)要求有秒,分,时的调节。
3)具有复位功能。
目的:熟悉单片机编程的基本操作流程,熟悉单片机芯片,强化单片机语言编写,能够使用单片机与硬件相结合并进行仿真和实操模拟。
意义:通过编写一个简单的电子闹钟,使同学对单片机有更深入的了解。熟悉单片机的操作流程,清楚单片机的作用。
二、系统总体方案选择与说明
用定时计数器T0,工作于定时,采用方式1,对12MHZ 的系统时钟进行定时计数,初值设为XXYY (自己计算)。形成定时时间为50ms 。用片内RAM 的7BH 单元对50ms 计数,计20次产生秒计数
器7BH 单元加1,秒计数器加到60则分计数器79H 单元加1,分计数器加到60则时计数器7AH 单元加1,时计数器加到24则时计数器清0。然后把秒、分、时计数器分成十位和个位放到8个数码管的显示缓冲区,通过数码管显示出来。显示格式为小时十位、小时个位---分十位、分个位---秒十位、秒个位。在处理过程中加上了按键判断程序,能对按键处理。
三、系统结构框图和工作原理
系统结构框图:
本次设计时钟电路,使用了AT89C51单片机芯片控制电路,单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂,使用开关键来调整时钟的时、分、秒,同时使用汇编语言程序来控制整个时钟显示,使得编程变得更容易,这样通过四个模块:键盘、芯片、LED 显示即可满足设计要求。
四、各单元硬件设计说明及计算方法
AT89C51单片机内部主要包括累加器ACC(有时也简称为
A) 、程序状态字PSW 、地址指示器DPTR 、只读存储器ROM 、随机存取存储器RAM 、寄存器、并行IO 接口P0~P3、定时器计数器、串行IO 接口以及定时控制逻辑电路等。这些部件通过内部总线联接起来,构成一个完整的微型计算机。其管脚图如图所示。
P0口:P0口为一个8位漏级开路双向IO 口,每脚可吸收8TTL 门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程 序数据存储器,它可以被定义为数据地址的第八位。在FIASH 编程时,P0 口作为原码输入口,当FIASH 进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向IO 口,P1口缓冲器能接收输出4TTL 门电流。P1口管脚写入1后,被内部上拉为高,可用作 输入,P1口被外部下拉为低电平时,将输出电流,
这是由于内部上拉的缘故。在FLASH 编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向IO 口,P2口缓冲器可接收,输出4个TTL 门电流,当P2口被写“1”时,其管脚被内部上拉电阻 拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存 储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器 的内容。P2口在FLASH 编程和校验时接收高八位地址信号和控制信号。
P3口作为AT89C51的一些特殊功能口,如下表所示:
口管脚 备选功能
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 INT0(外部中断0)
P3.3 INT1(外部中断1)
P3.4 T0(记时器0外部输入)
P3.5 T1(记时器1外部输入)
P3.6 WR(外部数据存储器写选通)
P3.7 RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST :复位输入。当振荡器复位器件时,要保持RST 脚两个机器周期的高电平时间。
ALEPROG :当访问外部存储器时,地址锁存允许的输出电平用
于锁存地址的地位字节。在FLASH 编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的16。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器 时,将跳过一个ALE 脉冲。如想禁止ALE 的输出可在SFR8EH 地址上置0。此时, ALE只有在执行MOVX ,MOVC 指令是ALE 才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE 禁止,置位无效。
PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次PSEN 有效。但在访问外部数据存储器时,这两次有效的PSEN 信号将不出现。
EAVPP :当EA 保持低电平时,则在此期间外部程序存储
(0000H-FFFFH ),不管是否有内部程序存储器。注意加密方式1时, EA将内部锁定为RESET ;当EA 端保持高电平时,此间内部程序存储器。在FLASH 编程期间,此引脚也用于施加12V 编程电源(VPP )。
晶振电路:
本设计晶振电路采用12M 的晶振。晶振的作用是给单片机正常工作提供稳定的时钟信号。单片机的晶振并不是只能用12M ,只要不超过20M 就行,在准许的范围内,晶振越大,单片机运行越快,还有用12M 的就是好算时间,因为一个机器周期为112时钟周期,所以这样用12M 的话,一个时钟周期为12us ,那么定时器
计一次数就是1us 了,电容范围在20-40pF 之间,这里连接的是30pF 的电容。
机器周期=10*晶振周期=12*系统时钟周期
控制电路:
P1.0为控制秒钟开关,P1.2为控制分钟开关,P1.3为控制时钟开关。
74LS245引脚图及用法:
74LS245还具有双向三态功能,既可以输出,也可以输入数据。 当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。
当片选端CE 低电平有效时,DIR=“0”,信号由 B 向 A 传输;(接
收) *DIR=“1”,信号由 A 向 B 传输;(发送)当CE 为高电平时,A 、B 均为高阻态。
五、软件设计与说明(包括流程图)
根据上述电子时钟的工作流程,软件设计可分为以下几个功能模块:
(1)主程序模块。主程序主要用于系统初始化:设置计时缓冲区的位置及初值,设置定时器的工作方式和计数初值等参数。主程序流程如下图所示。
开始
否
是CR 键?
是
主程序流程图
(2)计时模块。即定时器0中断子程序,完成刷新计时缓冲区的功能。
系统使用6MHz 的晶振,假设定时器0工作在方式1,则定时器的最大定时时间为65.536ms ,这个值远远小于1s 。因此本系统采用
定时器与软件循环相结合的定时方法。设定时器0工作在方式1,每隔50ms 溢出中断一次,则循环中断20次延时时间是1s ,上述过程重复60次为1分,分计时60次为1小时,小时计时24次则时间重新回到00:00:00。
因定时器0工作在方式1,则50ms 定时对应的定时器初值为:65536-50ms2us=40536=9E58H,即TH0=9EH,TH0=58H。
但应当指出:CPU 从响应T0中断到完成定时器初值重装这段时间,定时器T0并不停止工作,而是继续计数。因此,为了确保T0能准确定时50ms ,重装的定时器初值必须加以修正,修正的定时器初值必须考虑到从原定时器初值中扣除计数器多计的脉冲个数。由于定时器计数脉冲的周期恰好和机器周期吻合,因此修正量等于CPU 从响应中断到重装完TL0为止所用的机器周期数。CPU 响应中断通常要3~8个机器周期。经过测试,定时器0重装的计数初值设为9E5FH~9E67H,可以满足精度要求。另外,MCS-51单片机只有二进制加法指令,而时间是按十进制递增,因此用加法指令后必须进行二-十进制转换。
计时模块流程图如下图所示。
保护现场
重装定时器初值
循环次数减1
否
满20次?
是
秒单元加1
否
60s 到?
是
秒单元清0,分单元加1
否
60分到?
是
分单元清0,时单元加1 否
24小时到?
是
时单元清0
恢复现场
返回
计时模块流程图
六、调试结果与必要的调试说明
调试的最后结果,按下3个开关键分别控制时分秒的逐次增加。
在调试的过程中,一般会遇到很多不同的错误。我觉得好的方法是在编程的时候将不同的功能的程序区分开来,这样可以在发现那个功能发生错误或故障的时候能够快速的找到功能所对应的程序所处的地方。
七、使用说明
本项设计的电子时钟,具备普通时钟的基本功能即能够显示时,分,秒。秒钟每60分钟进1,分钟每60时钟进1。并具备调时功能,其中K1调节秒钟,K2调节分钟(从0开始调),K3调节时钟。
八、程序清单
S_SET BIT M_SET BIT H_SET BIT SECOND
P1.0 P1.1 P1.2
31H
30H
; 数字钟秒控制位 ; 分钟控制位 ; 小时控制位
EQU
MINUTE EQU
HOUR EQU TCNT
EQU ORG SJMP ORG LJMP
32H 34H 00H
START
0BH
INT_T0
DPTR,#TABLE HOUR,#0 MINUTE,#0 SECOND,#0 TCNT,#0 TMOD,#01H IE,#82H
; 初始化
START: MOV
MOV MOV MOV MOV MOV MOV SETB
TR0
;**************************************************** ; 判断是否有控制键按下, 是哪一个键按下 A1:
LCALL DISPLAY JNB JNB JNB LJMP
S_SET,S1 M_SET,S2 H_SET,S3 A1
; 去抖动
S1: LCALL DELAY
JB INC MOV
S_SET,A1 SECOND
; 秒值加1
A,SECOND
CJNE MOV LJMP
A,#60,J0 ; 判断是否加到60秒 K1
SECOND,#0
S2: LCALL DELAY
JB
M_SET,A1 INC
MINUTE
; 分钟值加1
K1:
MOV CJNE MOV LJMP
A,MINUTE
A,#60,J1 ; 判断是否加到60分 K2
MINUTE,#0
S3: LCALL DELAY
JB
H_SET,A1 HOUR
; 小时值加1
K2: INC
MOV CJNE MOV MOV MOV LJMP
A,HOUR
A,#24,J2 ; 判断是否加到24小时 A1
HOUR,#0 MINUTE,#0 SECOND,#0
;**************************************************** ; 等待按键抬起 J0:
JB
S_SET,A1
LCALL DISPLAY SJMP JB
J0 M_SET,A1
J1:
LCALL DISPLAY SJMP JB
J1 H_SET,A1
J2:
LCALL DISPLAY SJMP
J2
;*********************************************** ; 定时器中断服务程序, 对秒, 分钟和小时的计数
INC MOV CJNE INC MOV MOV CJNE INC MOV MOV CJNE INC MOV MOV CJNE MOV MOV MOV
TCNT
A,TCNT
; 计时1秒
A,#20,RETUNE SECOND
TCNT,#0 A,SECOND
A,#60,RETUNE MINUTE
SECOND,#0 A,MINUTE
A,#60,RETUNE HOUR
MINUTE,#0 A,HOUR
A,#24,RETUNE
HOUR,#0 MINUTE,#0 SECOND,#0
MOV TCNT,#0
RETUNE: RETI
;****************************************** ; 显示控制子程序 DISPLAY:MOV A,SECOND ; 显示秒 MOV B,#10
DIV AB CLR P3.6 MOV
P0,A
LCALL DELAY SETB P3.6 MOV
A,B
CLR P3.7 MOV
P0,A
LCALL DELAY SETB P3.7 CLR P3.5 MOV
P0,#40H
LCALL DELAY SETB P3.5 MOV A,MINUTE MOV B,#10
DIV AB CLR P3.3
MOV
P0,A
; 显示分隔符; 显示分钟
LCALL DELAY SETB P3.3 MOV
A,B
CLR P3.4 MOV
P0,A
LCALL DELAY SETB P3.4 CLR P3.2 MOV
P0,#40H
LCALL DELAY
SETB
P3.2 MOV A,HOUR MOV B,#10
DIV AB CLR P3.0 MOV
P0,A LCALL DELAY SETB P3.0 MOV
A,B
CLR P3.1 MOV
P0,A
LCALL DELAY SETB P3.1
RET
TABLE: D B
3FH,06H,5BH,4FH,66H 显示分隔符
显示小时
; ;
DB 6DH,7DH,07H,7FH,6FH
R6,#10 R7,#250
DELAY: MOV D1:
MOV DJNZ DJNZ
R7,$ R6,D1
RET
END
九、总结
这一次为期两个星期的单片机课程设计让我收益匪浅。它锻
炼了我独立思考,自我学习的能力。同时它还磨练了我的耐心,让我不狂妄自大,能够静下心来安安静静学东西,这样使我将课堂上学到的东西得以运用。
这一次我分配到的课程设计任务是电子时钟。最开始一看,我觉得这个题目应该会很简单,因为它的功能比较少。有一句话真的没错,叫说来容易做来难,开始做了之后,我发现虽然功能简单,但是碰到了各种困难,加上基础不牢,常常碰壁。最开始我就困在了计时功能。后来在查阅了多本教材才得以实现。然后一直纠结于复位,一直未能实现。
这次的课程设计告诉我,只有将理论和实践相结合才是真正的学到了知识。碰到不懂的问题要学会多自行查阅相关资料,提高自学能力。同时做事需要耐心,不能碰到一点困难就退缩。
十、参考文献
[1]付家才.单片机控制工程实践技术. 北京:化学工业出版社,2004
[2]孙育才,王荣兴,孙化芳. 新型AT89S52系列单片机及其应用. 北京:清华大学出版社,20 [3]王迎旭 单片机原理与应用 机械工业出版社
湖南工程学院
课 程 设 计
课程名称 单片机原理与应用 课题名称
专 业 班 级 电气工程1005 姓 名 何俊伟 指导教师 2013年6月 7日
湖南工程学院
课 程 设 计 任 务 书
课程名称 单片机原理与应用 课 题 电子时钟设计
专业班级
学生姓名
学 号
指导老师 李世军 审 批
任务书下达日期 2013年 6 月 7 日 任务完成日期 2013年 6月 25 日
目录
1. 课题的设计要求、目的、意义
2. 系统总体方案选择与说明
3. 系统结构框图与工作原理
4. 各单元硬件设计说明及计算方法
5. 软件设计与说明(包括流程图)
6. 调试结果与必要的调试说明
7. 使用说明
8. 程序清单
9. 总结
10. 参考文献
一、课题设计要求、目的、意义
要求实现功能:
1)开机时,显示00:00:00的时间开始计时;
2)要求有秒,分,时的调节。
3)具有复位功能。
目的:熟悉单片机编程的基本操作流程,熟悉单片机芯片,强化单片机语言编写,能够使用单片机与硬件相结合并进行仿真和实操模拟。
意义:通过编写一个简单的电子闹钟,使同学对单片机有更深入的了解。熟悉单片机的操作流程,清楚单片机的作用。
二、系统总体方案选择与说明
用定时计数器T0,工作于定时,采用方式1,对12MHZ 的系统时钟进行定时计数,初值设为XXYY (自己计算)。形成定时时间为50ms 。用片内RAM 的7BH 单元对50ms 计数,计20次产生秒计数
器7BH 单元加1,秒计数器加到60则分计数器79H 单元加1,分计数器加到60则时计数器7AH 单元加1,时计数器加到24则时计数器清0。然后把秒、分、时计数器分成十位和个位放到8个数码管的显示缓冲区,通过数码管显示出来。显示格式为小时十位、小时个位---分十位、分个位---秒十位、秒个位。在处理过程中加上了按键判断程序,能对按键处理。
三、系统结构框图和工作原理
系统结构框图:
本次设计时钟电路,使用了AT89C51单片机芯片控制电路,单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂,使用开关键来调整时钟的时、分、秒,同时使用汇编语言程序来控制整个时钟显示,使得编程变得更容易,这样通过四个模块:键盘、芯片、LED 显示即可满足设计要求。
四、各单元硬件设计说明及计算方法
AT89C51单片机内部主要包括累加器ACC(有时也简称为
A) 、程序状态字PSW 、地址指示器DPTR 、只读存储器ROM 、随机存取存储器RAM 、寄存器、并行IO 接口P0~P3、定时器计数器、串行IO 接口以及定时控制逻辑电路等。这些部件通过内部总线联接起来,构成一个完整的微型计算机。其管脚图如图所示。
P0口:P0口为一个8位漏级开路双向IO 口,每脚可吸收8TTL 门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程 序数据存储器,它可以被定义为数据地址的第八位。在FIASH 编程时,P0 口作为原码输入口,当FIASH 进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向IO 口,P1口缓冲器能接收输出4TTL 门电流。P1口管脚写入1后,被内部上拉为高,可用作 输入,P1口被外部下拉为低电平时,将输出电流,
这是由于内部上拉的缘故。在FLASH 编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向IO 口,P2口缓冲器可接收,输出4个TTL 门电流,当P2口被写“1”时,其管脚被内部上拉电阻 拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存 储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器 的内容。P2口在FLASH 编程和校验时接收高八位地址信号和控制信号。
P3口作为AT89C51的一些特殊功能口,如下表所示:
口管脚 备选功能
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 INT0(外部中断0)
P3.3 INT1(外部中断1)
P3.4 T0(记时器0外部输入)
P3.5 T1(记时器1外部输入)
P3.6 WR(外部数据存储器写选通)
P3.7 RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST :复位输入。当振荡器复位器件时,要保持RST 脚两个机器周期的高电平时间。
ALEPROG :当访问外部存储器时,地址锁存允许的输出电平用
于锁存地址的地位字节。在FLASH 编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的16。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器 时,将跳过一个ALE 脉冲。如想禁止ALE 的输出可在SFR8EH 地址上置0。此时, ALE只有在执行MOVX ,MOVC 指令是ALE 才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE 禁止,置位无效。
PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次PSEN 有效。但在访问外部数据存储器时,这两次有效的PSEN 信号将不出现。
EAVPP :当EA 保持低电平时,则在此期间外部程序存储
(0000H-FFFFH ),不管是否有内部程序存储器。注意加密方式1时, EA将内部锁定为RESET ;当EA 端保持高电平时,此间内部程序存储器。在FLASH 编程期间,此引脚也用于施加12V 编程电源(VPP )。
晶振电路:
本设计晶振电路采用12M 的晶振。晶振的作用是给单片机正常工作提供稳定的时钟信号。单片机的晶振并不是只能用12M ,只要不超过20M 就行,在准许的范围内,晶振越大,单片机运行越快,还有用12M 的就是好算时间,因为一个机器周期为112时钟周期,所以这样用12M 的话,一个时钟周期为12us ,那么定时器
计一次数就是1us 了,电容范围在20-40pF 之间,这里连接的是30pF 的电容。
机器周期=10*晶振周期=12*系统时钟周期
控制电路:
P1.0为控制秒钟开关,P1.2为控制分钟开关,P1.3为控制时钟开关。
74LS245引脚图及用法:
74LS245还具有双向三态功能,既可以输出,也可以输入数据。 当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。
当片选端CE 低电平有效时,DIR=“0”,信号由 B 向 A 传输;(接
收) *DIR=“1”,信号由 A 向 B 传输;(发送)当CE 为高电平时,A 、B 均为高阻态。
五、软件设计与说明(包括流程图)
根据上述电子时钟的工作流程,软件设计可分为以下几个功能模块:
(1)主程序模块。主程序主要用于系统初始化:设置计时缓冲区的位置及初值,设置定时器的工作方式和计数初值等参数。主程序流程如下图所示。
开始
否
是CR 键?
是
主程序流程图
(2)计时模块。即定时器0中断子程序,完成刷新计时缓冲区的功能。
系统使用6MHz 的晶振,假设定时器0工作在方式1,则定时器的最大定时时间为65.536ms ,这个值远远小于1s 。因此本系统采用
定时器与软件循环相结合的定时方法。设定时器0工作在方式1,每隔50ms 溢出中断一次,则循环中断20次延时时间是1s ,上述过程重复60次为1分,分计时60次为1小时,小时计时24次则时间重新回到00:00:00。
因定时器0工作在方式1,则50ms 定时对应的定时器初值为:65536-50ms2us=40536=9E58H,即TH0=9EH,TH0=58H。
但应当指出:CPU 从响应T0中断到完成定时器初值重装这段时间,定时器T0并不停止工作,而是继续计数。因此,为了确保T0能准确定时50ms ,重装的定时器初值必须加以修正,修正的定时器初值必须考虑到从原定时器初值中扣除计数器多计的脉冲个数。由于定时器计数脉冲的周期恰好和机器周期吻合,因此修正量等于CPU 从响应中断到重装完TL0为止所用的机器周期数。CPU 响应中断通常要3~8个机器周期。经过测试,定时器0重装的计数初值设为9E5FH~9E67H,可以满足精度要求。另外,MCS-51单片机只有二进制加法指令,而时间是按十进制递增,因此用加法指令后必须进行二-十进制转换。
计时模块流程图如下图所示。
保护现场
重装定时器初值
循环次数减1
否
满20次?
是
秒单元加1
否
60s 到?
是
秒单元清0,分单元加1
否
60分到?
是
分单元清0,时单元加1 否
24小时到?
是
时单元清0
恢复现场
返回
计时模块流程图
六、调试结果与必要的调试说明
调试的最后结果,按下3个开关键分别控制时分秒的逐次增加。
在调试的过程中,一般会遇到很多不同的错误。我觉得好的方法是在编程的时候将不同的功能的程序区分开来,这样可以在发现那个功能发生错误或故障的时候能够快速的找到功能所对应的程序所处的地方。
七、使用说明
本项设计的电子时钟,具备普通时钟的基本功能即能够显示时,分,秒。秒钟每60分钟进1,分钟每60时钟进1。并具备调时功能,其中K1调节秒钟,K2调节分钟(从0开始调),K3调节时钟。
八、程序清单
S_SET BIT M_SET BIT H_SET BIT SECOND
P1.0 P1.1 P1.2
31H
30H
; 数字钟秒控制位 ; 分钟控制位 ; 小时控制位
EQU
MINUTE EQU
HOUR EQU TCNT
EQU ORG SJMP ORG LJMP
32H 34H 00H
START
0BH
INT_T0
DPTR,#TABLE HOUR,#0 MINUTE,#0 SECOND,#0 TCNT,#0 TMOD,#01H IE,#82H
; 初始化
START: MOV
MOV MOV MOV MOV MOV MOV SETB
TR0
;**************************************************** ; 判断是否有控制键按下, 是哪一个键按下 A1:
LCALL DISPLAY JNB JNB JNB LJMP
S_SET,S1 M_SET,S2 H_SET,S3 A1
; 去抖动
S1: LCALL DELAY
JB INC MOV
S_SET,A1 SECOND
; 秒值加1
A,SECOND
CJNE MOV LJMP
A,#60,J0 ; 判断是否加到60秒 K1
SECOND,#0
S2: LCALL DELAY
JB
M_SET,A1 INC
MINUTE
; 分钟值加1
K1:
MOV CJNE MOV LJMP
A,MINUTE
A,#60,J1 ; 判断是否加到60分 K2
MINUTE,#0
S3: LCALL DELAY
JB
H_SET,A1 HOUR
; 小时值加1
K2: INC
MOV CJNE MOV MOV MOV LJMP
A,HOUR
A,#24,J2 ; 判断是否加到24小时 A1
HOUR,#0 MINUTE,#0 SECOND,#0
;**************************************************** ; 等待按键抬起 J0:
JB
S_SET,A1
LCALL DISPLAY SJMP JB
J0 M_SET,A1
J1:
LCALL DISPLAY SJMP JB
J1 H_SET,A1
J2:
LCALL DISPLAY SJMP
J2
;*********************************************** ; 定时器中断服务程序, 对秒, 分钟和小时的计数
INC MOV CJNE INC MOV MOV CJNE INC MOV MOV CJNE INC MOV MOV CJNE MOV MOV MOV
TCNT
A,TCNT
; 计时1秒
A,#20,RETUNE SECOND
TCNT,#0 A,SECOND
A,#60,RETUNE MINUTE
SECOND,#0 A,MINUTE
A,#60,RETUNE HOUR
MINUTE,#0 A,HOUR
A,#24,RETUNE
HOUR,#0 MINUTE,#0 SECOND,#0
MOV TCNT,#0
RETUNE: RETI
;****************************************** ; 显示控制子程序 DISPLAY:MOV A,SECOND ; 显示秒 MOV B,#10
DIV AB CLR P3.6 MOV
P0,A
LCALL DELAY SETB P3.6 MOV
A,B
CLR P3.7 MOV
P0,A
LCALL DELAY SETB P3.7 CLR P3.5 MOV
P0,#40H
LCALL DELAY SETB P3.5 MOV A,MINUTE MOV B,#10
DIV AB CLR P3.3
MOV
P0,A
; 显示分隔符; 显示分钟
LCALL DELAY SETB P3.3 MOV
A,B
CLR P3.4 MOV
P0,A
LCALL DELAY SETB P3.4 CLR P3.2 MOV
P0,#40H
LCALL DELAY
SETB
P3.2 MOV A,HOUR MOV B,#10
DIV AB CLR P3.0 MOV
P0,A LCALL DELAY SETB P3.0 MOV
A,B
CLR P3.1 MOV
P0,A
LCALL DELAY SETB P3.1
RET
TABLE: D B
3FH,06H,5BH,4FH,66H 显示分隔符
显示小时
; ;
DB 6DH,7DH,07H,7FH,6FH
R6,#10 R7,#250
DELAY: MOV D1:
MOV DJNZ DJNZ
R7,$ R6,D1
RET
END
九、总结
这一次为期两个星期的单片机课程设计让我收益匪浅。它锻
炼了我独立思考,自我学习的能力。同时它还磨练了我的耐心,让我不狂妄自大,能够静下心来安安静静学东西,这样使我将课堂上学到的东西得以运用。
这一次我分配到的课程设计任务是电子时钟。最开始一看,我觉得这个题目应该会很简单,因为它的功能比较少。有一句话真的没错,叫说来容易做来难,开始做了之后,我发现虽然功能简单,但是碰到了各种困难,加上基础不牢,常常碰壁。最开始我就困在了计时功能。后来在查阅了多本教材才得以实现。然后一直纠结于复位,一直未能实现。
这次的课程设计告诉我,只有将理论和实践相结合才是真正的学到了知识。碰到不懂的问题要学会多自行查阅相关资料,提高自学能力。同时做事需要耐心,不能碰到一点困难就退缩。
十、参考文献
[1]付家才.单片机控制工程实践技术. 北京:化学工业出版社,2004
[2]孙育才,王荣兴,孙化芳. 新型AT89S52系列单片机及其应用. 北京:清华大学出版社,20 [3]王迎旭 单片机原理与应用 机械工业出版社