我帮你写了个程序:
/*
硬件环境:AT89C51
P1口接LED8个灯
*/
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
bit R_MOVING_LIGHT=0,L_MOVING_LIGHT=0
uchar DATA_1,DATA_2
/*
--初始化AT89C52 串行端口--
T1 方式2 (8位重装载) 波特率9600,启动T1
T0 方式1 (16位定时器),未初始化,未启动
串行口设置为方式1(8 bit UART)
*/
void delay_1ms(uint _1ms)
{
uint i
while (_1ms--)
{
i=1000
while(i--)
}
}
void init_serial_port(void)
{
SM2=0
SM0=0SM1=1//串口工作在方式1
TMOD=0x20//定时器1工作在方式2
TH1=253
TL1=253//波特率9600b/s
EA=1//总中断允许
ES=1//允许串口中断
REN=1
TR1=1
}
void serial_port_init() interrupt 4
{
uchar i
RI=0
i=SBUF
if(i=='R')
{
R_MOVING_LIGHT=1
L_MOVING_LIGHT=0
DATA_1=0x80
}
if(i=='L')
{
L_MOVING_LIGHT=1
R_MOVING_LIGHT=0
DATA_2=0x01
}
}
void main()
{
init_serial_port()
P1=0x00
while(1)
{
if(R_MOVING_LIGHT)
{
P1=DATA_1
delay_1ms(100) //100MS 调节改变流水灯速度
DATA_1>>=1
if(!DATA_1)
DATA_1=0x80
}
if(L_MOVING_LIGHT)
{
P1=DATA_2
delay_1ms(100)
DATA_2<<=1
if(!DATA_2)
DATA_2=0x01
}
}
}
因为我这边硬件不方便搭,没有看最终效果,有什么问题可以找我!
下图为单片机P1口与8个LED灯的连接方法,为高电平亮低电平灭。
上位管理机采用PC机,主要完成整个监测网络系统的参数设置、粮库的状态查询、数据处理、粮情分析、超限实时报警和报表打印等功能。下位智能节点由单片机、数据采集电路和CAN通控制驱动电路构成。下位机不仅要实时监测本粮库内各个测试点的温度、湿度和粮虫发生情况,并保存和显示结果,还要负责接收上位管理机的命令,根据上位机的要求上传数据。
USB/CAN转换器负责将上位机通过USB口输出的命令转换成CAN总线数据格式后,再下传到CAN总线;或者将下位机通过CAN总线上传的数据转换成USB数据格式后,再送到PC机。
2 下位机硬件电路结构
下位机以单片机AT89S52为核心,通过扩展显示电路、数据采集电路和CAN通信模块构成一个完整硬件体系,如图2所示。
2.1 数据采集电路
数据采集电路由温度采集电路、湿度采集电路和粮虫检测电路构成。温度检测采用Dallas公司生产的单总线数字温度传感器DS18B20,它不仅能直接输出串行数字信号,而且具有微型化、低功耗、高性能、易于微处理器连接和抗干扰能力强等优点。DS18B20数字温度传感器对于实测的温度提供了9-12位的数据和报警温度寄存器,它的测温范围为-55℃~+125℃,其中在-10℃~+85℃的范围内的测量精度为±0.5℃。由于每个DS18B20有唯一的一个连续64位的产品号,所以允许在一根电缆上连接多个传感器,以构成大型温度测控网络。图2电路中,设计了两条测温单总线,每条单总线用一只场效应管提供电源,每条总线上可并联十几只数字温度传感器DS18B20。
湿度检测采用湿度传感器HIH3610和DS2438组合模块。HIH-3610是美国Honeywell公司生产的相对湿度传感器,该传感器具有精度高、响应快速、高稳定性、低温漂、抗化学腐蚀性能强及互换性好等优点。HIH-3610采用热固聚酯电容式传感头,在芯片内部集成了信号处理功能电路,可以完成将相对湿度值变换成电容值,再将电容传转换成线性的电压输出。因此它输出的模拟湿度信号,不能直接送单片机处理,必须经过A/D转换。DS2438也是Dallas公司的单总线器件,具有A/D功能。HIH3610和DS2438可以组合在一起,构成单总线数字湿度传感器模块。
粮虫检测器,当检测到粮食虫害发生时,粮虫检测器输出负脉冲,送微处理器记数和处理。系统采用一个8输入与非门,可带8台粮虫检测器。
2.2 显示电路
显示电路和微控制器的连接采用I2C总线,由于AT89S52单片机内部没有集成I2C总线模块,故采用软件模拟的方法实现I2C通讯。显示驱动器采用具有I2C总线的器件SAA1064,可动态驱动4位8段LED显示器。它内部具有显存和自动刷新功能,可免去微控制器的频繁刷新任务,腾出大量时间做其他事情。
2.3 CAN通信模块
CAN是现场总线中唯一被批准为国际标准的现场总线。其信号传输介质为双绞线。通信速率最高可达1Mbps/40m,直接传输距离最远可达10Km/5Kbps。CAN协议采用CRC检验并可提供相应的错误处理功能,保证了数据通信的可靠性。当节点严重错误时,具有自动关闭的功能,以切断该节点于总线的联系,使总线上的其它节点及其通信不受影响,具有较强的抗干扰能力。
图2中的CAN控制驱动模块由CAN控制器SJA1000、光耦6N137模块和CAN驱动器82C50构成。SJA1000负责与微控制器进行状态、控制和命令等信息交换,并承担网络通信任务;82C50为CAN控制器和总线接口,提供对总线的差动发送和对CAN控制器的差动接收功能。光耦6N137起隔离作用。
3 系统软件设计
系统软件由上位机主程序和下位监控程序构成,上位机主程序用VB语言开发,采用模块化设计,具体的功能模块如图3所示。利用VB编写的应用软件人机界面友好,便于维护和管理。
下位机的软件由下位机主程序、温度采集程序、湿度采集程序、粮虫检测中断程序和CAN收发中断服务程序等构成。由于篇幅所限这里仅给出了下位机主程序和CAN通信中断服务程序的流程图,分别如图4和图5所示。在下位机主程序里,系统要首先进行单片机的初始化、CAN的初始化、开外部中断、开启计数器和使能CAN接收中断的过程,是系统处于就绪状态,然后调用数据采集程序和数据处理程序,实时采集粮库现场的参数并予以处理,处理后的数据要保存起来供上位机随时查询,同时送显示器显示。
粮虫检测中断程序主要完成粮库发生粮虫后的处理,一方面要判断粮虫计数器是否计满,计满清零并保存数据;一方面设置粮库发生虫害标志,并供上位机查询和显示。
CAN收发中断服务程序负责上下位机的命令和数据传送。当上位机发送命令时,CAN接收一个报文,CAN的中断使能标志置1,产生接收中断,CPU立即响应,进入中断服务程序,然后系统再根据上位机的具体命令,向上位机传送该节点工作状态或采集的数据。
http://www.ic37.com/htm_tech/2008-1/5753_761425.htm由于SAA1064的动态扫描显示是依靠片内的多路开关数据锁存器及时钏控制电路,以主器件不必介入,因此使用动态工作方式最能发挥SAA1064的功能潜力,是最常用的工作方式。图中LED的位号与数据 *** 作格式中的段选数据顺序对应。CEXT为时钟振荡电容,它保证动态驱动用的工作信号。MX1、MX2为显示器人公共极驱动信号输出端。动态扫描时MX1、MX2的定时波形见图所示。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)