利用单片机P1口接8个发光二极管,P0口接8个开关,编程实现,当开关动作时,对应发光二极管的亮或灭 #includ

利用单片机P1口接8个发光二极管,P0口接8个开关,编程实现,当开关动作时,对应发光二极管的亮或灭

#include<reg51.h>
void main(void)
{
unsigned char i;
p0=0xff;
for(;;) {i=p0;p1=i;}
}

我的疑问是: 为什么程序中要引进一个变量i,而不是直接把P0赋值给P1.
为什么要有一个for的死循环。

i=P0;//是检测P0端口的值1或0;以便将检测完的数据赋值给P1,从而实现P1口对应的二极管点亮;
P1=i;//是将检测到的值用发光二极管点亮显示出来。

死循环是一直执行上面两条操作,因为程序一直在检测按键操作,
我只要将开关按下,则对应的P0端口变成0,
同时(P1=i)P1对应的二极管点亮。

你追问的这个这个是用的定时器中断,计数器是在不断的计数的当满值后就产生中断,进入中断重新赋值TL和TH寄存器,再次进行计数,记满后再次中断,如此循环不息。还有就是计数器是一直在不停的计数的,不会因为while(1);而停止!
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-01-15
一般不这样接,应该是led正极接vcc,然后负极接到单片机引脚上。像你那种接法也是可以的。
第2个回答  2012-05-21
可以不用变量,直接P1=P0;
死循环,这个是必须的。因为要不停的用P0来指示P1。
P1=P0 这句执行一次,只是把此时的P0值赋值给P1。而P0的值是可能会变化的。所以要不停的循环赋值。

单片机程序都会是一个死循环程序,因为不死循环,程序终究会执行完,此时程序并不会停止不动,还是要继续执行,此时就会乱跑,所以用个死循环,让程序永远不会执行完。追问

这个程序的意思是P1.1口产生500ms的电平后有产生一个500ms的低电平如此反复的构成一个周期为1S的方波。我的疑问是在每个500ms为什么不用对P1.1口进行死循环保证P1.1口电平的稳定

追答

前面一个例子,死循环不是用来保证稳定的,而是要把真实的状态时时反映出来。前面的例子中,P0何时变化未知,也很随机,所以要时时去读它的状态。
后面这个例子,输出状态很明确,500ms变化一次,那只需要过500ms改变一次就好了。在这500ms内,P1口的状态不用变化,就不需要去给它赋值,它会一直保持这个状态的。

本回答被网友采纳
第3个回答  2012-05-24
越问越乱 多看点书吧
相似回答