基于MCS-51单片机的智能 时钟控制系统设计
扫描二维码
随时随地手机看文章
随着电子技术产业结构调整,生产工艺的飞速发展,人们生活水平的不断提高,家用电器逐渐普及,市场对于智能时钟控制系统的需求也越来越大。本文所述智能时钟控制系统主要指时钟显示、时间设置、闹铃及家用电器定时开关机(可扩展功能)等控制系统。
本文采用进入市场时间早、总线开放、仿真开发设备多、芯片及其开发设备价格低廉、速度较快、电磁兼容性较好的mcs-51型单片机为核心实现智能时钟控制。
硬件系统设计 智 能时钟控制系统以mcs-51兼容单片机at89c51微处理器为核心,由时钟显示模块、定时控制模块、电源模块等电路组成,电路原理图和组装图如图1、图2所示。 at89c51微处理器 at89c51是一款采用atmel高密度非易失存储器制造技术制造,与工业标准的mcs-51指令集和输出管脚相兼容的单片机,其主要性能特点有: (1)高性能、低功耗的8byte微控制器,risc精简指令集机构,指令功能强大,且多数为单周期指令,具有低功耗的闲置和掉电控制模式、5个中断源、两个16位定时器/计数器等功能。 (2)片内集成4kb可编程闪烁存储器,可进行1000次以上写/擦循环操作,数据保留时间可达10年,支持三级程序存储器锁定。 (3)丰富强大的外部接口性能:32可编程i/o线,可编程串行通道,片内振荡器和时钟电路。 时钟显示模块 显示模块采用lg2841bh数码管,动态扫描,8550三极管位选驱动 , at89c51微处理器p0口直接段选实现小时、分钟显示,具有显示亮度强、稳定性能好、显示误差少等优点。 定时控制模块 该模块配合相应程序可实现时间调整、闹铃、家用电器定时开关机等功能。p3.2为时间调整模式选择键、p3.3为小时调整键、p3.5为分钟调整键;定时控制通过继电器jzc-32f和jrc-z7f实现控制功能,且通过修改程序可进行定时控制功能扩展,实现家用电器定时开关机等功能。 电源模块 电源模块设计的质量直接关系到单片机系统的稳定性,设计系统中由于单片机、控制继电器等元器件均可采用直流+5v供电,可选用稳压性能较好的三端稳压集成电路lm7805实现。
软件系统设计 系统利用伟福6000编写源代码,mep500烧写at89c51芯片实现智能时钟控制功能。由于系统软件主要完成时钟显示、闹铃、时间设置等功能。源程序主要包括主程序、中断子程序、显示子程序、定时子程序、延时子程序等。 实现程序如下:
…… ;**************************; 以下为主程序 (检测各键是否按下)
;***************************mainloop:
jb alarmsetkey,checkminutekey
call delay
jb alarmsetkey,checkminutekey
setb clockmode
call alarmset
checkminutekey:
jb minutekey,checkhourkey
mov a,minute
add a,#1
mov minute,a
cjne a,#3ch,notover1
mov minute,#0
notover1:
jnb minutekey,$
checkhourkey:
jb hourkey,checkalarma
mov a,hour
add a,#1
mov hour,a
cjne a,#18h,notover2
mov hour,#0
notover2:
jnb hourkey,$
checkalarma:
jnb alarmtimeona,checkalarmp
call startpc; call alarmprocess
ajmp toreturn
checkalarmp:
jnb alarmtimeonp,toreturn
call shutpc
toreturn:
ajmp mainloop
;**************************; 定时器timer0中断服务程序(此程序每8ms执行一次)
;***************************
timeint:
mov th0,#0e0h
mov tl0,#0bfh
push acc
push psw
setb rs0
clr rs1
d jnz onesecondcounter,notonesecond
mov onesecondcounter,#125
call clock
call convertobuffer
notonesecond:
call scandisplay
pop psw
pop acc
reti
; ***************************
; 扫描显示子程序
;***************************
scandisplay:
mov r1,#displaybuffer
mov r4,#11111011b
play:
mov a,r4
mov p2,a
mov a,@r1
mov dptr,#tab
movc a,@a+dptr
mov p0,a
lcall delay
inc r1
mov a,r4
jnb acc.7,endout
rl a
mov r4,a
ajmp play
endout: setb p2.7
mov p0,#0ffh ret
tab:db 0c0h,0f9h,0a4h,0b0h,
99h,92h,82h,0f8h,80h,90h,7fh, <