题目;在
单片机的P0口接8个发光二极管,P1.1~P1.3接有四个按键开关,当不同脚按下时实现不同功能
1:按下P1.0时——8只灯全亮然后全灭,再全亮然后全灭,交替闪亮
2:按下P1.1时——按此键时停止点亮8只灯,所有灯全灭
3:按下P1.2时——LED灯由上到下流动点亮
4:按下P1.3时——LED灯由下到上流动点亮
补充#include//头文件
#include//包含移位函数的头文件
#define uchar unsigned char //用uchar代替unsigned char
#define uint unsigned int
void delay(uint i) //延时函数
{
uchar t;
while(i--)
{
for(t=0;t=0;c++)
{
if(c%2==0) //为偶数时,8只灯全亮
a=0x00;
else //c为奇数时,8只灯全灭
a=0xff;
return a;
delay(500); //调用延时函数
}
}
int fun2() //调用fun2函数,实现灯由上往下流动点亮
{
delay(500);
P0=_crol_(P0,1); //C51函数库中的左移函数,P0中的数据循环左移动一位
return(0);
}
int fun3() //调用fun3函数,实现灯由下往上流动点亮
{
uchar a,temp; //定义a,temp的函数类型
{ //赋与temp初始值为0x80
temp=0x80;
for(a=0;a1;
}
}
return(0);
} //主函数
void main()
{
char state;
do
{ //P1口为输,初始值为0xff
P1=0xff; //读入P1口的状态,送人state
state=P1; //state中的数据P1口的数据按位与,所得数据赋给state,即读入P1.1-P1.3口的状态
state=state&0x08;
switch(state)
{
case 1:P0=fun1();break; //P1.0=0001,将fun的值赋给P0
case 2:P0=0;break; //P1.1=0010,停止点亮8只灯,所以灯全灭
case 4:P0=fun2();break; //P1.2=0100,将fun2的值赋给P0口
case 8:P0=fun3();break; //P1.3=1000,将fun3的值赋给P0口
}
}while(1);
}
1