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//清空标志,准备进行下次
}
#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
}
}
前些时间正好做了一个光电计数器,LCD1602显示,光电传感器(d0)接的P3.1口。
我使用的是郭天祥的TX-1C单片机实验板写的,部分程序自己更改。
希望我的回答能帮助到你。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)