2019-07-16 17:49发布
ytmp;
//
void scan()
{
key=(~P3)&0x0f;
if(key!=0)
{while(((~P3)&0x0f)!=0);
keytmp=key;
}
void delay(int t)
int k,j;
for(k=0;k<t;k++)
for (j=0;j<100;j++)
scan();
fun0()
int i,s;
s=0xfe;
for(i=0;i<8;i++)
P1=s;
delay(100);
s=s<<1;
s=s|0x01;
return 0;}
fun1()
return 0;
fun2()
s=0x55;
for(i=0;i<2;i++)
s=~s;
main()
keytmp=1;
P3=0xff;
while(1)
switch(keytmp)
case 1:{fun0();break;}
case 2:{fun1();break;}
case 4:{fun2();break;}
case 8:{scan();P1=0xff;break;}
default:{break;}
最多设置5个标签!
闪烁LED小灯设计,要求轮流点亮,逐个点亮,间隔点亮,可能我的电路有问题,只能运行在初始轮流点亮状态。
我试过按开关,还是不行,以下为c程序及电路图,请学长学姐帮忙指教
#include<reg51.h>//头文件
#define char unsigned char//宏定义
char key,ke
ytmp;
//
void scan()
{
key=(~P3)&0x0f;
if(key!=0)
{while(((~P3)&0x0f)!=0);
keytmp=key;
}
}
//
void delay(int t)
{
int k,j;
for(k=0;k<t;k++)
for (j=0;j<100;j++)
scan();
}
//
fun0()
{
int i,s;
s=0xfe;
for(i=0;i<8;i++)
{
P1=s;
delay(100);
s=s<<1;
s=s|0x01;
}
return 0;}
//
fun1()
{
int i,s;
s=0xfe;
for(i=0;i<8;i++)
{
P1=s;
delay(100);
s=s<<1;
}
return 0;
}
//
fun2()
{
int i,s;
s=0x55;
for(i=0;i<2;i++)
{
P1=s;
delay(100);
s=~s;
}
return 0;}
//
main()
{
keytmp=1;
P3=0xff;
while(1)
{
switch(keytmp)
{
case 1:{fun0();break;}
case 2:{fun1();break;}
case 4:{fun2();break;}
case 8:{scan();P1=0xff;break;}
default:{break;}
}
}
}
你在led外接端没加电源呀?P1口输出低电平就OK了,还有#include<reg51.h>包含P了,程序是不是写的有点啰里啰嗦呀?你在试试 ,这是最基础的!追问:
程序是北航出版的书上的程序,我写不好,就抄下来了。led没加电源也亮啊,加了电源反而出现错误运行不了,晕了
追答:
运行不了是程序的问题,你在仔细检查下,LED不加电源怎么导通?再者,要想使一个二极管导通的条件是反向压降小于正向压降!你看看郭天祥的视屏吧!
一周热门 更多>