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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)