光电开关信号检测C程序

光电开关信号检测C程序,第1张

最多24个光电开关,要用3个74HC165移闭嫌位寄存器,每个74HC165接8个光电开关,如果为了节省S52的管脚,可以将3个74HC165串联在一坦模起,如果这样接,C语言可以写成:

long int a1

clks=0//为了可靠期间,移位时钟脚先置0

for( i=0,i<24,i++)

{

clks=1;

clks=1;//重复的目的是为了延时,如果硬件反应速度慢。

clks=0;

a1=a1<<1

if(datas==1) //datas是74HC165串行数据的接入脚 ,读取1位光电开关

a1=a1|0x1//末尾置1

else

a1=a1&0xfffffffe //末尾置0

}

if (a1==0) b=1 //此处设光电管受光照,输出为轿信手0,b=1表示全0检测通过。

else b=0// b=0,表示有错

//后面的程序不用详细写了吧,需要关闭光源,再读入一次24个观点开关,a1=oxffffffff,则正确,否则出错。

经过有光和无光照两次检测,就可以判断光电开关的好坏了。

一个简单的开关控制一盏灯的c程序如下:

#include<reg52.h>

sbit S1=P1^4                                     皮悄                           //将S1位定义为P1^4,检测独立按键

sbit led0=P1^0                                                        //将led0定义为P1.0口的LED

/***********************************************************************************************************************************************

延时函数

***********************************************************************************************************************************************/

void delay(void)

{

unsigned int i

for(i=5000i>0i--)

}

/***********************************************************************************************************************************************

主函数

***********************************************************************************************************************************************/

void main(void)

{

while(1)

{

if(S1==0)                                                                //判断是否有键按下

{

delay()                                                        //有键按下,延时去抖,真正应戚衫用时要少用这种延时,占用时间,用定时器延时或一个寄高握腔存器循环检测10多次按键

if(F0==0)                                                        //用F0标志位判断键按下是否已经处理,因刚学C语言没多久,

//不知道怎么定义RAM能位寻址的寄存器,先用F0,按键多的话,一个F0不够用

{

F0=1                                                        //F0置1,表示这次按键按下已处理

led0=~led0                                                //将LED亮灭状态取反

}

}

else                                                                         //S1=1说明按键释放

{

F0=0                                                                //F0清零,清按键已处理标志

}

}

}

用 51 单片机的引脚 P1.0,接到开关,开关另一端接尘丛地。

单片机的输出端设为派数樱 P1.7。

程序如下:毕耐

ORG 0000H

MOV C, P1.0

MOV P1.7, C

SJMP 0000H

END


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存