单片机C语言 两个按键控制8位花样流水灯,P1.0接按键k1,P1.1接按键k2,P0口的8位接8个发光二极管的阴极

要求:1、用一个按键k1控制花样流水灯的运行和停止;2、用另一个按键k2控制花样流水灯的三种花样,这三种花样分别是:按下k2,流水灯右移动;按下k2,流水灯马上改为左移动;再按下k2,连续点亮两个发光二级管。请高手回答,用C语言编写,在下感激不尽!
用C语言编写

第1个回答  2012-11-24
//你的仿真图有问题,P0要加上拉电阻
#include <REGX52.H>
#include <intrins.h>
sbit k1=P1^0;
sbit k2=P1^0;
#define uint unsigned int
#define uchar unsigned char
uchar keysign1=0,keysign2=0;
void _delay_ms(unsigned char c) //延时1ms,误差 0us
{
unsigned char a,b;
for(;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
void key(void) //按键设置程序
{
if(!k1)
{
_delay_ms (10);
while(!k1);
if( keysign1==2) keysign1=0;
}
if(!k2)
{
_delay_ms (10);
while(!k1);
if( keysign2==3) keysign1=0;
}
}
uchar ledstate(void)//LED显示程序
{
static uchar temp=0xff;
uchar temp1=0;
if(++temp==8)temp=0;
if(keysign1)
{
switch(keysign2)
{
case 0: if(++temp>7)temp=0;temp=(1<<temp);break;
case 1: if(--temp>7)temp=7;temp=(1<<temp);break;
case 2:if(++temp>7)temp=1;temp1=(1<<temp) | (1<<(temp-1));break;
}
}
else
{
temp1=0XFF;
}
return temp1;
}
void main(void)
{
while(1)
{
key();
P0=ledstate();
_delay_ms(50);//50ms
}
}
第2个回答  2012-11-21
1、设定一个标志位,由K2控制,按下一次标志位加1,共1、2、3 三个标志位;
2、设P0=0XFE;
3、如果标志位为1,P0循环右移1位;
4、如果标志位为2,P0循环左移1位;
5、如果标志位为3,P0=0XFC,然后循环右移2位;
相似回答