数码管电子时钟Word文件下载.docx
《数码管电子时钟Word文件下载.docx》由会员分享,可在线阅读,更多相关《数码管电子时钟Word文件下载.docx(33页珍藏版)》请在冰豆网上搜索。
A*
四、系统元件布局、布线图
SOO
元器件清单五、
型号及标称值恢复现场
数量
AT89S52
1
HD74LS244系统初始化
8550晶体管中断返回
6
9012晶体管
蜂鸣器(有源)丫整点?
提示音
10uF电解电容
7段数码管(共阳)
电阻3KN
9
电阻200闹钟到?
8
4.7K电阻
按钮开关N
3
12M晶振丫
瓷介电容30pF闹铃提示音
2
软件方案六、0中断提供,设置为最高优先级,定时器定时器“时钟”基准时间由.
设为工作方式1,即16进制计数器方式,计数初值设为15536,即可实现0.05s中断一次,连续
中断20次即可实现一秒定时。
2.由于使用较多数码管,显示模块使用动态扫描方式,定义全局变量,保存各个数位的BCD
码,通过查表,将字模送到P0口进行输出;
为了显示闹钟的状态,设置了另一字模数据表,在
显示前进行判断,若为闹钟开关设置状态则调用此字模数据表。
3.按键中断的时候,在2个按键都没按下的状态,2个中断引脚都为低电平,则一直调用中断
0的子程序,每次进入中断0子程序中便检测中断1的引脚是否为高电平,即检测开关KEY1是
否按下;
相反,在按下KEY0时,进入中断1子程序,每次进入中断1子程序都检测中断0的引脚是否为高电平,为高电平则表示已按下。
4.用寄存器R7来记录当前切换的功能,分别为,0—时间;
1—日期;
2-闹钟;
3-闹钟开关;
4-秒表。
5.秒表的实现,采用基准时钟作为秒表时钟源,精度可以达到0.05s。
6.闹钟的实现,在主程序中,循环判断闹钟设置的时分与当前时分是否相等,闹钟持续1分钟
7.整点报时的实现,在主程序中,先判断当前时间的秒,若为0再判断分,再为0则使蜂鸣器嘀一声,循环判断。
七、程序框图
r
1.主程序
主程序
中断子程序定时器2.03
中定时器0断子程序保护现场重载计数初值Y秒表?
秒表模块N
N
秒?
至U1Y
或秒加1向前进位
03.外部中断子程序4
中断外部INTO保护PswNYYY初始化秒表外部INT1保护psw带显示延时NKeyO秒表模式设置闹钟闪烁切换模式
、中断
寄存器A
带显示延时消抖Key1有闪烁?
调整模式寄存器、A按下?
Y?
N
?
按下Y
NY丫暂停丫打开滴一声提示
切换显示模式
秒表模式/继续计时/关闭闹钟
进入秒
表?
后台计时
调整时间调整日期调整闹钟?
NA
寄存器、
N?
NA寄存器
时间调整
日期、闹
钟、闹钟设置、秒
日期调整
表显示循
环切换YY闪烁循环切换恢复psw退岀中断
闹钟调整
提小音滴
、psw恢复
中断退出
4.外部中断1子程序
系统使用说明八、
,闹钟”“10.06.06,日期--“00.00.00”一1.接通电源自动复位,读取初始状态,时钟”。
一”,
秒表“00.00.0006.00.00—“”,闹钟状态一“OFF/计时暂停/为“确定计时开始/.按键KEY1为
“切换功能/调节”按钮,按键KEY02闹钟开关按钮“时”数码管闪烁,此时按键进入时校准
状态,电子时钟:
按KEY0.3第一功能一可切换到“分”设置,,按KEY0KEY1键可以调节小时,“时”调节范围为00〜24。
调节范围为00〜5900~59调节范围为再按KEY0可切换到“秒”设置,可以切换到电子日历功能。
KEY1第二功能----电子日历:
在电子时钟功能下,按.4“日”进行校准,校准方式同电子时钟..进入电子日历功能,可以对“年”“月”6
的校准方式一样,自行摸索。
5.第三功能----闹钟设置:
在电子日历功能下,按KEY1可以切换到闹钟设置功能。
闹钟的设置同电子时钟的设置一样。
6.第四功能一闹钟开关:
在闹钟设置功能下,按KEY1可以切换到闹钟开关设置。
默认状态
为关闭闹钟功能,显示“OFF”,按KEY0可以调节闹钟开关,打开闹钟功能则显示“ON”。
闹
钟设置为“ON”时,最后一个数码管的小数点会亮起,可以在任何功能状态下提示闹钟功能已
开启。
7.第五功能一秒表:
在闹钟设置功能下,按KEY1可以切换到秒表功能。
进入秒表功能,按
KEY0开始计时,再按KEY0则暂停计时,在秒表计时的时候按KEY1可以切换到其他功能,而
秒表则在后台计时,在秒表暂停时按KEY1可以将秒表清零。
九、体会
第一次使用AtmelDesignerWinter09布岀一个完整的PCB制板图,并用覆铜板做成实物,最
大的体会是:
软件能画岀来的图,我们不一定就能把这样的电路板做岀来。
布线时要考虑的因
素除整体布局、飞线数目外,最重要的是线的宽度、线与线的间距、焊盘的大小。
唯有线宽合适、间距合理才能做岀符合要求的电路板。
刚制成的电路板要先使用万用表检测各导线的连接情况,
解决断路、短路的问题之后方能进行焊接。
这样做的好处是,保证了调试程序时不会受硬件接
触不良等情况的影响。
由于第一次尝试完全使用汇编语言对AT89S52进行编程操作,对汇编语言的陌生给前期编程工作
带来诸多不便。
汇编语言不同于C或其它高级语言,程序间的跳转,各种寄存器的压栈出栈都
需要人工考虑,而这种疏漏编译器也不会给出任何提示,于是往往一些大意的疏忽,程序便无
法达到预期的效果。
加之没有相关条件使用在线调试,也给故障排除带来一些障碍。
对此的体会是,确定是程序岀现问题时,优先往程序间的跳转条件、重要寄存器等的现场保护、循环退岀的条件方面考虑,寻找原因。
由于此次硬件电路设计采用低电平导通的PNP三极管,
和74LS244电平驱动器,也没有将IO口做通用数据传输口用,故不需考虑上拉电阻的选用及将
相应管脚写入高电平以正确接收数据的问题。
当然在调试的过程中合理的使用软件仿真机,熟练
的设置程序断点,同时观察单片机各寄存器值的变化,可以极大方便我们查找程序漏洞,解决
问题。
在书写代码的过程中,应该注意代码的规范化,尤其是使用汇编编程时,必须加上必要的注释,方便程序阅读及故障排查。
对于需要使用到的各个变量,必须在程序开头集中定义存储位
置,以求一目了然,在新增变量的时候也不至于岀现存储单元被重复使用而导致数据丢失的情
况。
最后,看着忙碌数日得来的劳动成果乖乖的工作,确实蛮有成就感。
希望今后有更多的机会进行
这样的实践实验。
十、附录
;
AT89S52CLOCK_FINAL.asm
(ElectronicCalendarandClock)
ReferenceforGrade2008,s.c.u.t.
KeyO(forshift/adjust)connectedtoINT1
Key1(forun-flash/flash)connectedtoINT0
学生姓名:
黄锦波,黄卓佳
学生学号:
200830240380,200830240434分组编号:
007
变量定义
TICK_CNTEQU20H
T0倍乘
>
SECOND_BCDEQU21H
时间记录
MINUTE_BCDEQU22H
HOUR_BCDEQU23H
DAY_BCDEQU24H
日期记录
MONTH_BCDEQU25H
YEAR_BCDEQU26H
FLASH_FLAGEQU27H
是否闪烁
DIS_FLAGEQUR7
当前显示内容标志;
DIS_FLAG:
0—时间;
1—日期;
4-秒表
NSECOND_BCDEQU2BH;
闹钟时间
NMINUTE_BCDEQU2CH
NHOUR_BCDEQU2DH
TCC_BCDEQU2EH
秒表计时器
TBB_BCDEQU2FH
TAA_BCDEQU30H
TIMER_FLAGEQU31H;
秒表模式
TIMER_START_FLAGEQU32H;
秒表开始
ALAM_STATEEQU33H;
闹钟开启标志
DI_40HEQU34H;
提示音延时变量
DI_41HEQU35H;
延时
ALAM_0N1EQU36H;
闹钟状态显示
ALAM_0N2EQU37H
ALAM_0N3EQU38H
ALAM_0FF1EQU39H
ALAM_0FF2EQU3AH
ALAM_0FF3EQU3BH
中断向量表
0RG0000H
LJMPMAIN
0RG0003H
LJMPEXO_INT;
portINT0
ORG000BH
LJMPT0_INT;
portT0
ORG0013H
LJMPEX1_INT;
portINT1
ORG0030H
MAIN:
NOP;
mainprogram
初始化堆栈
MOVSP,#60H
初始化变量
MOVSECOND_BCD,#00H;
BCDofsecond
MOVMINUTE_BCD,#00H;
BCDofminute
MOVHOUR_BCD,#00H;
BCDofhour
MOVNSECOND_BCD,#00H;
MOVNMINUTE_BCD,#00H;
MOVNHOUR_BCD,#06H;
MOVTBB_BCD,#00H
MOVTAA_BCD,#00H
MOVTIMER_START_FLAG,#00H;
秒表工作标志
MOVDAY_BCD,#06H;
BCDofday
MOVMONTH_BCD,#06H;
BCDofmonth
MOVYEAR_BCD,#010H;
BCDofyear
MOVFLASH_FLAG,#00H;
f