号中,只有一个为低电平(即0),其余为高电平。紧接着读取P1.0、P1.1、P1.2、P1.3的状态,哪个为低电平(即0)则表示被按下,如果都是高电平,则从头开始继续扫描。
按键S0到S11分别代表的意义是“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“闹钟”与“时间”。
当长时间按下“闹钟”键时,为开启或关闭闹钟;当短时间按下“闹钟”键时,为设置闹钟时间。当按下“时间”键时,为设置时间。 电路图如下图3-3所示:
J1CON2VCC12S0R110kR210kR310kR410kSW-PBS3SW-PBS6SW-PBS9SW-PBS1SW-PBS4SW-PBS7SW-PBS10SW-PBS2J2SW-PBS5SW-PBS8SW-PBS11SW-PBp1.0p1.1p1.2p1.3p1.4p1.5p1.61234567CON7 图3-3 4*3键盘电路图
3.4功放电路
本系统是利用程序产生频率脉冲信号,送到P1.7(即B0)口,通过一个限流电阻连接到喇叭的驱动电路。P1.7口输出的是一组脉冲信号,当输出为高电平时晶体管工作于饱和状态,当输出为低电平时晶体管工作于截止状态,从而使喇叭播放出音乐。
VCCJ121CON2VCCSPEAKERLS1J221CON2B0R14.7kQ1NPN1Q2NPN1 图3-4 功放电路图
12
3.5显示电路
J34321CON4A4A5A6A7A4A5A6A7VCCJ1CON2comcomcomDS1DPY_7-SEG_DPbcdpDS2DPY_7-SEG_DPbcdpDS3DPY_7-SEG_DPbcdpDS4DPY_7-SEG_DPbcdpcom12J2LED1LED2LED3LED4LED5LED6LED71234567CON7DPYDPYDPYDPYaaagggadddgfffeefefgdpfgdpfgdpefgdpabcdeabcdeabcdeLED1LED2LED31LED42LED53LED64LED756VCC78LED1LED2LED31LED42LED53LED64LED756VCC78LED1LED2LED31LED42LED53LED64LED756VCC78LED1LED2LED31LED42LED53LED64LED756VCC78abcded 图3-5 显示电路图
数码管在夜间看时间的时候就不需要有光源,非常方便,因此采用4个共阳极8段LED数码管作为显示系统,片选信号分别连接在A4(P0.4)、A5(P0.5)、A6(P0.6)、A7(P0.7),LED 8段数码管的a、b、c、d、e、f、g分别与74LS48译码器的输出端相连接。LED数码管的dp端接高电平。电路图如上图3-5所示。
3.6时钟电路
J1321CON3B2B3B1U1752SCLKRSTX1DS1302(8)Y1J221CON2VCCCRYSTALC130PC230PIOX263 图3-6 DS1302时钟电路图
选用DS1302作为时钟芯片,X1与X2连接32.768kHz的晶体振荡电路,DS1302与单片机AT89C51采用串行数据传输方式,/RET、I/O、 SCLK分别与单片机的P2.0(B1)、P2.1(B2)、P2.2(B3)相连接。Vcc2(即“1”)连接电源。电路图如上图3-6所示。
13
第4章 程序设计
本章主要讲述软件方面的实现。本系统程序紧紧围绕所要实现的功能进行编写,采用模块化编程结构。
4.1 主程序流程图 开始
N 闹钟或时间设置键是否按下
闹钟是否开启 Y 键盘扫描 初始化 显示时间 Y 设置 N Y N 闹钟与时间比较 Y
放音与显示代码 N 输入代码比较 Y
关音 图4-1主程序流程图
系统启动后,进行初始化设置,键盘扫描,显示当前的时间。判断闹钟或时
14
钟是否需要设置,如果需要则进行相应的设置,如果不需要则跳转到判断闹钟是否开启,如果没有开启则跳回键盘扫描,开启则进行判断闹钟与时间是否相等,相等则放音乐同时显示代码,进行输入码与显示代码比较是否相等,相等则关闭音乐,转到键盘扫描,否则一直播放音乐直到正确输入代码。
4.2 比较闹钟与时间程序
43H,42H存放闹钟的时位;41H,40H存放闹钟的分位 33H,32H存放时间的时位;31H,30H存放时间的分位
开始 N (33H)=(43H)? Y (32H)=(42H)? Y (31H)=(41H)? Y (30H)=(40H)? Y RET 图4-2比较闹钟与时间程序
N N N
MOV A,33H XRL A,43H JNZ TO-END
15
???? MOV A,30H XRL A,40H JNZ TO-END SETB F0 SETB P1.7 TO-END:POP A RET
判断33H与43H存储的内容是否相等,如果不相等则停止该程序,相等说明时间与闹钟时位的高位相等;继续判断32H与42H分别存储的时间与闹钟时位的低位是否相等,不相等则停止该程序,相等则继续判断31H与41H分别存储的时间与闹钟分位的高位是否相等,与上面同理;当判断30H与40H存储的内容是否相等时,如果相等则说明闹钟时间到达,音乐开启,F0=1,此时按键可以使用,反之则停止该程序。
4.3 键盘扫描程序
系统启动后,判断有无按键按下,R2存储是哪个按键按下,然后判断R2的值。当R2为11时,F0置位,进行时间调整,调整完毕则显示,并从新开始键盘扫描。
当R2为10时,进行1秒钟的延时,判断是否长按闹钟键(S10),如果长按,则进行闹钟开启与关闭设置,R1为FFH时闹钟开启,R1为00H时闹钟关闭;如果没有长按,则直接跳转到进行F0置位,闹钟调整。调整完毕则显示,并从新开始键盘扫描。
当R2为其他数值时,判断F0是否为1,如果F0为1时,调用相应键值程序,否则返回键盘扫描。
F0的值判断数字键“0”到“9”是否开启,当为1时开启,反之关闭。在调整时间、闹钟、显示代码时F0为1。
16