#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar tab[]={0x7e,0xbd,0xdb,0xe7,0xdb,0xbd};
sbit key=P0^7;
uchar a;
void delay(uint b)
{
uchar t;
while (b--)
{
for(t=0;t<120;t++);
}
}
void main()
{
unsigned char zt=0;
while(1)
{
if(key==1){zt=0;}
if(key==0){zt=1;}
switch(zt)
{
case 0:
P1=0x55;
for(;;)
{
delay(500);
P1=_crol_(P1,1);
}
break;
case 1:
for(;;)
{
for(a=0;a<6;a++)
{
P1=tab[a];
delay(500);
}
}
break;
}
}
}
为什么达不到切换开关后进入下一个程序
第7行: sbit key=P0^7; 键盘定义
第23行:if(key==1){zt=0;}
第24行:if(key==0){zt=1;}
当没有按下按键时,key=1 是默认的吧,所以按键电路是应该这种功能,按一次反转一次:
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar tab[]={0x7e,0xbd,0xdb,0xe7,0xdb,0xbd};
sbit key=P0^7;
uchar a;
void delay(uint b)
{
uchar t;
while (b--)
{
for(t=0;t<120;t++);
}
}
void main()
{
unsigned char zt=0;
while(1)
{
//if(key==1){zt=0;}这句取消
if(key==0){ //当按键按下
delay(500); //延时防抖
if (key == 0)
zt=!zt;
}
switch(zt)
{
case 0:
P1=0x55;
for(a=0;a < 8;a++) //这里也是死循环吗?先改成有限循环调试
{
delay(500);
P1=_crol_(P1,1);
}
break;
case 1:
//for(;;) //这里也是死循环吗?
// {
for(a=0;a<6;a++)
{
P1=tab[a];
delay(500);
}
// }
break;
}
}
}
由于单片机发展到今天已经非常成熟了,如果我们想要了解程序下载这个一直都有讨论的命题,我觉得可以从其历史发展来看。