通信工程方向综合设计
4 系统电路图
该设计是将上述的六个模块拼接一起组成一个系统体系,以实现设计所需要的功能及光控路灯自动化控制系统。单个模块其功能相对会比较简单、单一,但将一些模块合理的串接起来就可以实现复杂的功能。当然也可以实现该设计所需的功能。 其连接方式:
1、光敏电阻通过感应外界的光线强度,将其转换成模拟信号,利用PCF8591的AIN0模拟信号输入端,将模拟数据输入到PCF8591。
2、PCF8591对数据进行ADC转换(模数转化)将模拟信号转换成数据信号。并根据单片机对SCL(IIC总线时钟输入端)高低电平的控制,利用SDA(IIC总线数据输入输出端)将数据传输至IIC总线的缓存元件AT24C02使其行使EEPROM功能。
3、根据单片机传输给AT24C02的SCL(串行移位时钟控制端)端口的高低电平信号来执行数据的写入或者读出。写入数据时,上升沿有效;读出数据时,下降沿有效。利用AT24C02的SDA端来进行数据的双向串口通信。
4、AT24C02在SCL为下降沿的时候通过SDA端将缓存的数据传输给单片机。 5、74H573的LE端口接单片机的端口,利用单片机对LE的输入电平进行控制。当LE为高电平时,数据从Dn输入到锁存器;当LE为低电平时,锁存器存储D输入上的信息一段就绪时间直到LE的下降沿来临。实现对LED灯模块跟七段数码管显示模块的延时时间控制,防止一闪一闪的。
6、单片机通过处理数据,判断LED灯模块该亮还是该灭,并输出数据到LED灯模块和七段数码管模块所连接的74HC573的Dn端口。
7、单片机通过对SCL和LE端口电平的输入来控制各模块间数据的传输、接收。
其模块连接流程图:
光敏电阻 感应模块 AD/DA转换 模块 IIC总线 模块 数码管 显示模块 单片机 模块 LED灯 模块
图4-1 模块连接流程
8
通信工程方向综合设计
电路总图如下:
图4-2 电路总图
9
通信工程方向综合设计
5 系统的软件设计
启动该程序,接收光敏电阻传输进来的模拟数据,启动ADC转换程序将模拟数据转换成数字数据,并启动IIC总线控制程序将数据缓存到AT24C02中,利用单片机编程对数据进行处理和传输的控制,使得整个系统可以很好的相互协调运行。以达到实现光控路灯自动化控制系统所需要的功能的实现。
对于IIC总线,、AD/DA转换程序主要利用的是对PCF8591和AT24C02的SDA、SCL端口的输入电平来实现程序的启动和关闭,以此达到控制数据的输出和输入的功能;通过对74HC573的LE 端口电平的输入控制,来达到LED灯和七段数码管显示时间的延迟,防止其一闪一闪的。
详细步骤:
启动该程序,光敏电阻感应外界光线的强度并转换成模拟信号,经过PCF8591的AIN0数据输入端口输入到PCF8591里面,经过ADC转换成数据总线。当SDA端口由从高到低一次跳变,IIC通信开始。SDA将出具传输到AT24C02里面缓存起来。当SDA由低到高的一次跳变,IIC通信结束。将SDA接单片机的P3.2端口,SCL接单片机的P3.3端口。利用单片机的编程控制P3.2和P3.3端口高低电平的输入就可以控制ADC转换的数据输出延迟时间和IIC总线缓存区的数据输入单片机中或者单片机反馈的数据输入到缓存区里面。单片机的P0端口接的是74HC573,这是一个八路透明锁存器。其端口LE接单片机的P1.0跟P1.1,利用单片机的编程来控制P1.0跟P1.1端口高低电平的输出,以控制74HC573的数据传输到LED灯跟七段数码管的延迟时间,防止LED灯和七段数码管的闪动。
当数据显示在数码管中后,中断程序启动,执行判断程序。判断当百位〉=2的时候LED灯亮起来;判断〈2的时候LED灯就灭掉。
程序中还用到了数据的动态读取与发送程序,使得七段数码管的数值可以随着光敏电阻的感应数据一起不断的变化。还有延迟函数,可以设定显示函数的延迟时间。还有IIC总线的启动、结束程序。还有数据的发送接收函数与显示函数。 具体程序设计见附录:Keil程序。 本系统的软件执行流程图如下:
10
通信工程方向综合设计
启动系统 光敏电阻感应 外界光线强度 通过ADC(模数转换) 转换成数字数据 启动IIC总线程序 进行数据缓存 启动IIC总线数据 发送函数 单片机启动动态 接收数据程序 启动结束IIC总线程启动显示函数 读取数值 单片机处理数据 中断程序开启 判断程序启动 七段数码管显示出当前光敏电阻阻值 单片机发送 处理后的数据 实行判断程序,判断 LED灯是否开启? YELED灯亮 NO LED灯不亮
图5-1 软件执行流程
11
通信工程方向综合设计
启动总线程序 void Start() { }
结束总线程序 void Stop() { }
延时函数程序 void Delay(uint z) { } 显示程序
void Display(unsigned char FirstBit,unsigned char Num) {
static uchar i=0;
P0=0x00 ; //数码管消隐 a=1; uchar x,y; for(x=0;x //延时函数延时1ms SDA=0; SCL=1; Delay(0); SDA=1; Delay(0); SCL=0; //时钟保持高,数据线从低到高一次跳变,I2C通信停止 SDA=1; SCL=1; Delay(0); SDA=0; Delay(0); SCL=0; //时钟保持高,数据线从高到低一次跳变,I2C通信开始 P0=0x00; 12