复位电路51单片机时钟电路I/O口 图3.6 单片机最小系统模块原理框图
①复位电路
当在STC89C51单片机的RST引脚引入高电平并保持2个周期时,单片机内部就执行复位操作。复位电路通常采用上电自动复位和按钮复位两种方式。一般上电自动复位电路是通过电容的充放电来实现自动充放电,当电容上升时间不超过1ms,此时便能实现自动上电复位就。另外一个复位模式就是手动复位模式,本设计就是用的按键手动复位。按键手动复位又分为电平方式和脉冲方式两种。本设计就是电平复位模式,通过电容端充放电接通RST(9)端与电源Vcc来实现的。时钟频率用11.0592MHZ时C取10uF,R取10kΩ,本设计的时钟频率是12MHZ。脉冲复位方式则是通过脉冲变化来实现的,本设计没有使用。最小单片机系统中的复位电路则是通过在电源和底线之间连接一个电容、一个按键和一个负载电阻,中间在连出一个支线到单片机的RST接口,通过电容的充放电和按键的按钮来实现整个电路的复位。
②时钟电路
STC89C51单片机的时钟信号通常有两种方式产生:一是内部时钟方式,二是外部时钟方式。内部时钟电路如图所示。
图3.7 STC89C51内部时钟电路
在STC89C51单片机内部有一振荡电路,只要在单片机的XTAL1(18)和XTAL2(19)引脚外接石英晶体(简称晶振),就构成了自激振荡器并在单片机内部产生时钟脉冲信号,通过自己产生脉冲信号两个电容加快起振稳定频率,来产生需要的时钟脉冲信号。C2和C3电容的作用是稳定频率和快速起振,电容值在5~30pF,典型值为30pF。晶振CYS的振荡频率范围在1.2~12MHz间选择,典型值为12MHz和6MHz。
13
③最小系统的中断技术概述
中断技术用于实时监测与调控,通过主程序的中断请求源提出的服务请求来快速响应处理发生的问题。当主程序的中断请求源发出中断请求之后,如果中断请求被允许,单片机将会暂时中止当前正在执行的主程序响应请求,转到中断服务处理程序这里来处理服务请求。中断服务处理程序处理完服务请求后,再返回到原来被中止的程序断电处,继续执行被中断的主程序。
单片机有了中断系统,就不会浪费大量的时间去查询是否有服务请求发生了,而是会去主动处理问题,这便能除去多余的等待现象,大大地提高了单片机的工作效率和实时性。
3.2.2 继电器驱动电路
继电器是一种电子控制器件。继电器是一种当输入端的量(电、磁、声、光、热)达到一定值时,输出量将发生跳跃式转化的这样一种自动控制器件,具有控制系统和被控制系统之的连带依靠关系。
图3.9 继电器驱动电路图
继电器通常应用于自动控制电路中,它实际上是反向思路运行的,用小的电流去控制大的电流的自动开关,而不是一般的大电流控制小电流。而本设计中使用的便是电磁继电器。电磁继电器一般由衔铁、铁芯、触点簧片、线圈等原件组成的。只要在线圈两端加上一定的电压,单片机又给三极管一定的电平信号,连通了三极管加上又有电压,整个电路形成回路,电流流经线圈通过三极管集电极发射极到达地线,线圈中就会产生一定的电流,从而出现电磁效应,线圈有了电磁吸引衔铁,衔铁就会在电磁力吸引的作用下克服弹簧的惯性拉力吸向铁芯,带动衔铁的动触点与静触点进行闭合。若是线圈断电,电磁对衔铁的吸力也随之消失,衔铁就会在弹簧的惯性作用力下回到原来的位置,使动触点与原来的静触点打开。当输入端为高电平时对应的输出口输出低电平,继电器
14
线圈通电,继电器触点闭合;当输入端为低电平时,继电器线圈断电,继电器触点断开。通过闭合及打开,达到了在电路中的连通和断开的目的。继电器驱动接口电路如图3.9所示,我所使用的继电器是由相应的PNP型号三极管来驱动,当继电器闭合后便能驱动负载,点亮控制的灯。 3.2.3 按键电路
按键电路主要是为了实现对整个控制模块的开关模式转换,他可以转换为四种模式:复位模式、手动控制模式、自动感应控制模式、关闭模式。其中的一个按键是负责控制自动和手动模式的转换的,另外一个按键则是负责复位和关闭模式的,将四种模式分装到两个按键上避免了一个按键不便利的问题,还可以避免四种模式难以控制发生混乱的问题。有了这几种模式的控制可以使得灯既能自动感应又能在特殊情况下人为的控制,便利了大众。
图3.10 按键电路
3.3 实时显示模块 3.3.1 指示灯电路
指示灯电路只要是完成实时显示,按键模式的转换显示就要靠指示灯来显示,同样继电器线圈闭合的显示也是要靠指示灯的显示。 4 软件设计 4.1 软件设计语言
本设计是采用C语言程序进行设计的,首先我们应该先对整个程序进行进行分析和整理,对整个设计划分模块,逐个模块实现其功能,最终把各个子模块合理的连接起来,构成总的程序。此次软件设计根据所要实现的功能,以系统的硬件设计为基础,采用模块化的程序设计思想,确保完成系统功能的同时,实现系统的可靠运行。软件设计的目的就是让单片机加载程序并运行,对距离、时间、光照强度进行测量,根据测量结果控制继电器的输出[8]。
C语言具备汇编语言的功能。它功能丰富的库函数、运算速度快、编译效率高、有
15
良好的可移植性,而且可以直接实现对系统硬件的控制。C语言是一种结构化程序设计语言,它支持当前程序设计中广泛用的有顶向下结构化程序设计技术[10]。此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。因此使用C语言进行程序的设计已经为软件开发的一个主流。综上所述,用C语言进行单片机程序设计是单片机开发和应用的必然趋势。程序图见附录B。 4.2 软件设计思路
本设计主要是实现三个方面的功能:第一,白天光照强有声音的时候保证灯不亮,第二,晚上没有光的有声音的时候灯亮;第三,手动模式开启要保证按键功能能够实现灯亮30s后灯灭。这是设计最重要的三点。有了设计的思路整个设计就分为了这样几大模块:第一个是按键模式切换(即自动模式和手动模式的切换);第二个是自动模式、手动模式工作;第三个是定时器模块。
开始系统初始化创建定时器按键扫描自动模式是是否声光满足条件是灯亮手动模式是是否灯亮键按下是灯亮开启定时器30s后灯灭,定时器关闭开启定时器30s后灯灭,定时器关闭结束 图4.1 系统框图
通过这三个模块我们可以大概的弄出一个系统模式来,首先是要对模式切换的定义,要定义模式切换后输出显示灯和控制显示灯的亮灭问题;关于自动模式显示模块要解决关于光感和声音协调控制的问题,即白天即使有声音灯也不能自动亮灯,而晚上有声音要保证等能自动亮;定时器模块即是关于灯亮后延长保持的实间,这样可以最大程
16

