单片机c程序设计 关于点亮流水灯的问题

2025-02-26 23:37:32
推荐回答(4个)
回答1:

#include
#define uchar unsigned char
#define uint unsigned int
sbit key1=P0^0;
sbit key2=P0^1;
sbit key3=P0^2;
void delay(uint t)
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
void LedUpToDown(void)
{
uchar temp=0x01;
for(i=0;i<8;i++)
{
P2=temp;
delay(100);
temp<<=1;
}
}
void LedDownToUp(void)
{
uchar temp=0x80;
for(i=0;i<8;i++)
{
P2=temp;
delay(100);
temp>>=1;
}
}
void Flicking(void)
{
P2=0;
delay(1000);
P2=0xFF;
delay(1000);
}
voidmain(void)
{
while(1)//轮询法判断按键
{
if(key1==0)
{
LedUpToDown();
}
else if(key2==0)
{
LedDownToUp();
}
else if(key3==0)
{
LedUpToDown();
LedDownToUp();
}
else//8支发光二极管每隔一段时间(时间长短delay确定)全亮全灭一次
{
Flicking();
}
}
}

回答2:

#include
#include //启用 循环左移(_crol_),循环右移(_cror_)函数
char temp_L, temp_R, temp_D;
bit f; //
//-------------------------------------
void delay(int x) //延时函数
{
char i;
while(x--) for(i = 0; i < 110; i++);
}
//-------------------------------------
LEFT()
{
P1 = temp_L;
temp_L = _crol_(temp_L, 1);
}
//-------------------------------------
RIGHT()
{
P1 = temp_R;
temp_R = _cror_(temp_R, 1);
}
//-------------------------------------
L_R()
{
P1 = temp_D;
if(f) temp_D = _crol_(temp_D, 1);
else temp_D = _cror_(temp_D, 1);
}
//-------------------------------------
void main() //主函数
{
char i, j = 0;
temp_L = temp_R = temp_D = 254;
f = 1;
while(1) {
i = P3 & 0x07;
switch (i) {
case 6: LEFT(); break;
case 5: RIGHT(); break;
case 3: L_R(); j++; if(j == 7) {j = 0; f = ~f;} break;
default: P1 = ~P1;
}
delay(500);
}
}
//-------------------------------------

回答3:

我只会汇编,不会C啊

回答4:

我会C,但我对分数不感兴趣。