作业帮 > 综合 > 作业

51单片机简单程序问题,关于开关控制

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/29 10:15:01
51单片机简单程序问题,关于开关控制
3. 多路开关状态指示
#include
unsigned char temp;
void main(void)
{
while(1)
{
temp=P1>>4;
temp=temp | 0xf0;
P1=temp;
}
}
我的理解:开始时P1口是 11111111,右移4位以后变成00001111,
和11110000进行或运算变成11111111,四路灯接在P1^0-P1^3口,4路开关接在P1^4-P1^7口,开关的开或关只能影响到后4位的0或1,但是没有影响到前四位也就是灯的0或1啊?、各位大侠,我的理解哪里出了问题?
程序中没看到开关控制的程序啊,开关是怎么控制的呢?
程序是没有问题的
其实你的理解就错在第一步,后面的都是对的,P1口的初始状态不是11111111而是与开关的状态有关的,比如有些位的开关处在把这位置0的位置(假设是P1.6)其它位是把IO置1的位置,那么P1的状态就是1011XXXX,右移相或后就是11111011,就可以控制相应的灯了,再下个循环读的时候还是一样,读IO是当前外部电平的高低,与上次IO输出无关!所以读回来还是开关的状态!
temp=P1>>4; 这句就是在读开关的状态,同时进行移位处理等效于:
temp=P1;
temp>>=4;