原作者:http://www.51hei.com/bbs/dpj-196806-1.html
作品名称:
智能大风监测系统
设计目标:
检测窗外风的大小。
2.2示窗外风的大小。
2.3显示窗户的开关状态。
2.4手动控制开关窗户。
2.5大风报警。
设计步骤:
3.1需求分析
在夜晚大风的天气忘了关窗会带来财产的损失。
3.2功能确定
检测窗外风的大小、显示窗外风的大小、显示窗户的开关状态、手动控制开关窗户、大 风报警。
3.3硬件需求单片机AT89c51、led灯、按键、8x8led点阵、有源蜂鸣器、7位数码管、38译码器、输入输出扩口。
3.4软件编程
3.5调试
硬件原理
有两个开关控制上位机向两个下位机传输数据,K1控制一号从机,K2控制二号从机。当按下开关K1时由上位机向一号从机发送数据,一号从机根据收到的数据执行相应操作。当按下开关K2时由上位机向二号从机发送数据,二号从机根据收到的数据执行相应操作。
一号从机:P1口连接led点阵列控制端,P2.5、P2.6、P2.7连接一个38译码器,38译码器的输出口接led点阵的行控制端,38译码器分别顺序对led点阵的每一行进行显示,P1口的状态则由上位机传输的数据决定。一号从机的P3.2~P3.4分别连接开关K4~K6控制窗户的开关,P3.5~P3.7连接三个led灯,它们的状态则表示窗户的开关状态。
二号从机:通过一个地址锁存器74ls373和一个并行输入输出口8255A增加输入输口。在8255A的PA口连接晶体管,PB口接一个4x4的矩阵键盘,矩阵键盘的按键用作行程开关,当窗外的风越大行程开关越往后的开关就会按下,同时晶体管就会显示出相应的风的大小,数字越大风越大。P1.0口接一个有源蜂鸣器,当风大到5级是警报器就会响起,P1.1口接一个开关,当蜂鸣器响起时需要手动按下开关关掉蜂鸣器。
软件流程
上位机分别向一、二号从机发送数据,一、二号从机在接收到数据时缓存在自己的芯片里,每个从机根据相应的外部操作进行相应的控制。
5.1上位机代码:
六、系统仿真与调试 6.1.在keil uvision4中编写各个芯片的程序并对程序进行调试和生成.hex文件。 6.2根据设计思想进行电路设计,在proteus中连接电路图。 6.3将keil uvidion4中生成的.hex文件导入芯片进行仿真。 七、仿真结果与分析 7.1仿真过程出现的问题: 7.1.1上位机向下位机传输的数据必须大于零,否则led点阵在显示时会卡在数据0那不进行下一步操作。 7.1.2上位机在向下位机传输数据时如果按下的时间不足时下位机也不能在相关操作下得到应有的结果。 7.1.3二号从机中控制蜂鸣器的开关在关掉蜂鸣器后蜂鸣器的报警作用就没有了,必须要重新启动芯片,这是因为在程序中是使用按下开关就跳出警报和矩阵键盘按键的循环,因为蜂鸣器的报警与否是由矩阵键盘的按键控制的,如果不跳出矩阵键盘按键就不能使蜂鸣器关掉。 7.1.4一号从机的矩阵键盘的按键用作行程开关时如果风使前面的开关按下不放开的情况后面的按键在按下时晶体管中不能显示相应风的大小,显示的数字还是停留在最开始显示的位置。 7.2解决办法: 7.2.1避免出现0的数据传输。 7.2.2按下K1或K2的时候停留几秒钟。 7.2.3在矩阵键盘外在加一个循环,当跳出矩阵键盘循环时同时按下矩阵键盘的0键和蜂鸣器的关就可以避免重启软件。图(1)为初始的代码,图(2)为更改后的代码。 图(1) 图(2) 7.2.4由于扫描的矩阵键盘的性质决定了当前面的按键按下时后面的按键无效, 所以只能在设备的安装时避免前面的按键一直按下。
全部资料51hei下载地址:
http://www.51hei.com/bbs/dpj-196806-1.html
|