基于7290的LED时钟系统设计与实现

版权申诉
0 下载量 80 浏览量 更新于2024-06-19 收藏 1.18MB PDF 举报
"基于7290的LED时钟系统设计" 这篇本科设计报告涉及的是一个基于7290芯片的LED时钟系统的设计。7290是一种专门用于驱动七段数码管显示的集成电路,常用于单片机控制系统中。在这个设计中,学生宋陆阳利用7290芯片来实现一个多功能的时钟系统,具有显示、修改和报警功能。 首先,设计要求包括以下几点: 1. 显示功能:通过开关切换,8位数码管可以显示当前的“时-分-秒”、“年-月-分”以及报警的“日.时-分”。 2. 修改功能:用户可以通过按键修改当前时间(时、分、秒)和报警时间(时、分)。 3. 错误提示:当输入的修改值超出合法时间范围(如时大于24,分大于60,秒大于60)时,系统会给出错误提示,并恢复正常计时。 4. 报警功能:包括整点报时(在59分55秒至00秒期间,每秒响铃,00秒时频率提高)和定时报警(当实际时间与设定的报警时间匹配时,播放特定的音乐序列)。 设计分析及系统方案设计如下: 1. 主程序结构:采用无限循环,初始化7290芯片,设置PCF8563T(实时时钟芯片)时间数据,配置INT0和INT1中断,开启中断服务,并进入无限循环等待中断触发。 2. 中断INT0:每秒钟由PCF8563T的CLKOUT信号触发中断,读取时间数据,处理后更新到内存和显示。同时,根据开关状态,决定显示当前时间、日期或报警时间。还包括整点报时和定时报警的逻辑判断。 3. 中断INT1:在检测到按键操作时触发中断,读取按键值,允许用户选择修改当前时间的“时”、“分”或“秒”,以及报警时间的“时”和“分”。 这个设计涵盖了单片机控制、中断处理、实时时钟同步、键盘输入处理和音频信号生成等多个关键知识点。其中,单片机负责整个系统的控制,中断处理使得系统能及时响应外部事件(如按键操作或时间更新),而7290芯片则解决了数字显示的问题。此外,通过PCF8563T芯片保持精确的时间,并通过蜂鸣器实现音乐报警,体现了硬件和软件的紧密结合,是单片机应用的一个典型实例。
2023-02-27 上传
单⽚机设计与开发 ⼀、流⽔灯 图1 LED部分电路原理图分析 根据上图分析,要控制LED灯,⾸先我们需要了解74HC573锁存器,然后控制P0⼝的输出。 根据74HC573的真值表,当LE为⾼时,锁存器左边输⼊什么右边就输出什么,当LE为低时,锁存器输出的是上⼀次的值,即实现了锁存。 如下图: 图2 74HC573真值表 要实现流⽔灯则必须改变74HC573的输出,则必须将Y4C置为⾼,给P0赋值后再将Y4C置为低进⾏锁存。我们在原理图中找到Y4C(如图 3),图中WR与GND⽤跳帽连接起来,即WR为低电平0。 图3 74HC138与74HC02 如图所⽰,Y4C由Y4和WR共同控制,74HC02是⼀个4路2输⼊或⾮门功能,WR为低电平,要使Y4C为⾼,则Y4必须为低电平,⽽Y4⼜由 74HC138译码器控制。74HC138译码器的真值表(如图4),要使得Y4为0,则三个输⼊端应该为100,即P2^7=1,P2^6=0,P2^5=0。⼜只 需要操作P2⼝的这三位,不需要配置其他的五位,所以P2端⼝应该配置为:P2 = ((P2&0x1f)"0x80); 编写代码: 看到这⾥我们可能会感叹点个LED灯都这么⿇烦,但是只要你把这个思路理清了,之后的蜂鸣器、继电器、数码管都是这个套路,因为他们 共⽤的P0和P2端⼝,且都⽤到了上图3中的锁存器、138译码器和或⾮门。这就实现了⼀个8位的I/O⼝进⾏复⽤的分时来控制多个设备,这 种设计是⽐较好的。 ⼆、蜂鸣器和继电器 查看原理图找到继电器和蜂鸣器所在,然后可以看到(如图5)继电器和蜂鸣器的都是通过ULN2003来驱动的,ULN2003内部集成了7个达 林顿管,可以有7路输⼊输出,这⾥不仅驱动了继电器和蜂鸣器,还有直流电机与步进电机。同样,我们只需要控制Y5C和P0⼝,⽽Y5C的 控制则与Y4C的控制⼤同⼩异,这⾥就不详细讲解了。我们可以得到控制Y5C的正确配置P2端⼝的代码为:P2 = ((P2&0x1f)"0xA0); 我们再看继电器和蜂鸣器的电路,当ULN2003输出低电平时继电器和蜂鸣器才打开,⽽ULN2003每⼀路输⼊输出都加有⼀个⾮门,所以 ULN2003的输⼊为⾼电平时蜂鸣器继电器才打开,为低电平时关闭。继电器对应的位为P0^4,蜂鸣器对应的位为P0^6,我们将P0⼝的这两 位赋为1时,即P0=0x50时,两个设备均打开。 图5 蜂鸣器与继电器电路原理图 while(1) { for(i=0; i<8; i++) { P2 = ((P2&0x1f)"0x80); //配置74HC573,使其不锁存 P0 = ~(0x01<<i); //左移i位,按位取反 P2 &= 0x1f; //再次配置74HC573,使其锁存 delay(); //适当延时使LED亮得充分 } } 1 2 3 4 5 6 7 8 9 10 代码部分: P2 = ((P2&0x1f)"0xA0); //关闭锁存 P0 = 0x10; //蜂鸣器关、继电器开 P2 &= 0x1f; //打开锁存