对照式光电传感器 c语言 单片机 编程

对照式光电传感器 c语言 单片机 编程,第1张

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

void delay(uchar z)

{

unsigned int x,y

for(x=0x<zx++)

for(y=0y<110y++)

}

sbit a=P1^0

sbit b=P1^1

sbit c=P1^2

void main()

{

while(1)

{

if(b==1)

a=0

delay(100)

a=1

if(b==0)

c=0

delay(100)

c=1

}

}

sbit s1=P2^0//光电传感器1

sbit s2=P2^1//光电传感器2

char t=1//手滑过光传感器1、2的最大时间。

unsigned char f//手滑过的第一个传感器标志。0=无,1=第一个,2=第二个。

设流水灯接P1口。

定时器设为10ms中断一次,中断计数变量设为c,即c=100次中断为1秒。

在中断函数中写:

if(c>0)c--//计时变量,0=计时到,非0=正在计时。

在主函数的主循环中写(仅部分程序):

if(s1==0&&f==0){ //是否s1先

f=1//置标志

c=100*t//开始计时,100次中断为1秒,t为需要的时间(秒)

}

else if(s2==0&&f==0){ //是否s2先

f=2

c=100*t

}

else if(s1==0&&f==2&&c>0)//s2先,s1后,c>0没超时

{

movLED(0)//左到右流水灯

}

else if(s2==0&&f==1&&c>0)//s1到s2

{

movLED(1)//右到左流水灯

}

==============

void movLED(bit dir)//dir为流水灯方向,0=左到右,1=右到左

{

if(dir)

{

for(i=0i<8i++){P1=~(1<<i)delay(500)}//设delay(500)为延时0.5s

}

else

{

for(i=0i<8i++){P1=~(0x80>>i)delay(500)}//设delay(500)为延时0.5s

}

c=0f=0//清空标志,准备进行下次

}

计数显示电路可完成对上述脉冲信号的计数和显示。图3是由单片机构成的计数系统框图。

计数系统以MCS-51系列单片机的8031为核心,8013单片机的外围扩展了程序存储器27C256和数据存储器WM0016DRH,此外,用8255扩展了I/O口,同时具有时钟单元、掉电保护、看门狗单元、通信单元以及LED(发光二极管)显示器、键盘等。

1)8031单片机及存储器

8031内含4kb EEPROM程序存储器,具有功耗低、抗干扰能力强的特点,可安置于监测现场,数据存储器WM0016DRH是一种多功能非易失性SRAM,特点如下:高速高抗干扰自保持,不怕掉电,上下电百万次数据无丢失,断电保护10年有效,既可高速连续读写,也可任意地址单字节 *** 作,无需拼凑页面,随机读写不需等待,立即有效,输入输出TTL/CMOS兼容,上电复位输出,掉电保护,内置看门狗,电源监测,不用外加电路和电池,且引脚与标准SRAM兼容。

2)计数及显示

多车道车流量数对应的脉冲通过光电隔离耦合并行输入至8031单片机的P1口,通过软件控制和键盘设定计数值并用LED加以显示,可自动循环显示或定点显示两种方式,且两者相互间可任意切换[4]。

当热释电传感器安装位置固定后,输入脉冲的脉宽和占空比均取决于高速公路上车辆的车速和车距(脉宽对应车辆传感器有效监视方位内的时间,车速和车距有限定),占空比q小于50%,为了准确拾取车流量信息,通过软件可实现单片机对每一路并行输入数据的读取周期小于脉宽,且将每路各自相邻的两读取周期读取的数据进行运算(暂存前一个周期读取的数据),若两数据为01,则自动计1,否则计0。其中0为前一个周期的读取数据,此时脉冲为低电平,1为后一个周期的读取数据,此时脉冲为高电平,从而避免了对脉冲的漏计和重复计数,再把4路的读数每一周期进行一次加运算,累加后的和就是总的车流量。

将8031单片机内的定时器/计数器设定为工作方式1,构成16位二进制计数器[5],采用动态扫描方式直接驱动5位十进制计数器[5]。采用动态扫描方式直接驱动5位十进制LED显示,最大计数值达到65536,可记录4车辆的车流量并显示一个月内的日流量,累计4车道一个月内的日流量总和,计数器内数据保护时间可达一个月之久。当计数器达到设定值时,声光报警,可存储数据,并手动复位。

3)时钟单元

采用DS12C887实时时钟芯片,具有显示具体时间信息的功能,若设计调整和设置按键,可方便地对时间进行调整和设置,从而为车流量的统计提供准确的时间数据。

4)串行通信单元

由于单片机系统的数据存储能力和数据处理能力有限,以及现场实时性要求较高,故单片机现场只能暂时存储采集到的数据和对数据进行简单处理,至于大量的数据存储和后续复杂的数据处理可交给上位机完成,由于大型机具有RS-232标准串行口,所以通过8031单片机TTL电平全双工串行口,附加RS-232电平转换电路MAX3232可与上位机实现数据通信。

3 软件设计

计数系统的程序主要包括系统自检程序、系统初始化程序、键盘扫描程序、按键处理程序、显示程序以及数据采集处理程序等,图4所示为主程序流程。

4 安装与调试


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11212046.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存