51单片机数字钟介绍|51单片机和arduino
随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断走向深入,由于它具有功能强、体积小、功耗低、价格便宜、工作可靠、使用方便等特点,因此越来越广泛地应用于自动控制、智能化仪器、仪表、数据采集、军工产品以及家用电器等各个领域。
51单片机数字钟应用单片机中断、定时技术,通过调整键、加1键、减1键、确定键四个按键,用8位数码管设计制作了一个可以调整时间的数字钟,实现了对时、分、秒进行数字显示,可广泛用于个人家庭、车站、码头、办公室等公共场所,方便人们的日常生活。
一、系统方框图
51单片机数字钟以STC89C52单片机为核心,采用12MHZ晶振,以汇编语言为程序设计语言,结合相关的元器件(共阳极四位一体LED数码显示器、BCD -七段译码/驱动器74HC537等),再配以相应的软件,用8位数码管显示 “时、分、秒”。显示格式为:时-分-秒 XX-XX-XX ,由时个位和时十位、分个位和分十位、秒个位和秒十位计数器组成。秒、分计数器为60进制计数器,时计数器为24进制计数器。通过调整、加1、减1、确定4只按键来调整时间。按下调整键SET_KEY(P1.0),显示“时”的两位数码管以1Hz的频率闪烁。如果再次按下调整键,则“分”两位数码管开始闪烁,“时”两位数码管恢复正常显示,依次循环,直到按下确定键OK_KEY(P1.3),恢复正常的时间显示。在数码管闪烁的时候,按下加1键ADD_KEY(P1.1)或者减1键DEC_KEY(P1.2 ),可以调整相应的显示内容。按一次键,则选中的“时”“分”“秒”分别加1或减1,如果长按,系统识别后以一定速率连续增加或连续减少,进行快速调时。
二、动态扫描
数码管显示采用动态扫描方法。把8位数码管的8个笔画字段(a~g和dp)同名端连在一起由一片74HC573驱动;每一位数码管的公共极COM端(位)各自独立,连接在另外一片74HC573输出上接受P2口的控制。STC89C52CPU向字段输出端口输出字型码时,所有数码管接受相同的字型码,但究竟使用那一位数码管则由P2口决定。动态扫描用分时的方法轮流控制每个数码管的COM端,使每个数码管轮流点亮。事实上,任意时刻只有一位数码管是被点亮的。由于人眼的视觉暂留效应以及数码管的余辉效应,当数码管扫描的频率非常快的时候,人眼已经无法分辨出数码管的变化了,看起来就是同时点亮的,给人的视觉就是一组稳定的显示数据。
三、1秒定时的产生
首先用单片机内部的定时器T1实现50ms定时,然后每50ms产生一次定时中断,用寄存器R3存放循环中断的次数,循环20次就实现了1s的定时。
1.对TMOD赋值,确定工作方式
TMOD的高4位是控制定时器/计数器T1的,当GATE=0时,通过“SETB TR1”指令即可启动定时器/计数器工作;C/T=0时,T1被设置为定时工作方式。因此,可得到定时器T1,工作在方式1,作定时器使用,并且用软件启动运行的TMOD赋值为10H。
2.预置定时器初值X,将初始值写入TH1、TL1中
定时器初值得计算公式为:(最大计数值M-初始值X)×机器周期=定时时间
当晶振频率为12MHz时,机器周期为1μs。在方式1中,定时器T1的最大计数值M为65536,现要求定时50ms,由以上公式可计算出计数器的初始值X。
(65536-X)×1μs=50ms所以,初始值X=65536-50000=15536D=3CB0H
所以在程序DELAY_50MS中确定定时器的初值指令为:MOV TH1,#3CH
MOVTL1,#0B0H。软件设计中使用内部定时器1中断实现50ms定时。循环20次中断,就可以得到1S的定时了。
四、软件设计
系统软件采用模块化设计,主要有主程序模块,时钟调整子程序模块,显示子程序模块等。
单片机数字钟给人们生活带来了极大的方便。它不仅可以实现钟表的记时功能,还能在定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、各种定时电气的自动启用等方面得到广泛应用。
(作者单位:江苏省常州技师学院)
