51单片机流水灯问题 用c语言 用到光传感器

51单片机流水灯问题 用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//清空标志,准备进行下次

}

#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单片机实验板写的,部分程序自己更改。

希望我的回答能帮助到你。


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

原文地址: http://outofmemory.cn/yw/11202100.html

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

发表评论

登录后才能评论

评论列表(0条)

保存