很简单的,用取表法就行了,这个是我刚编的,你改时间对就行了,,我仿真过了,OK了
#include <reg51.H>
#define led P1
#define uchar unsigned char
#define uint unsigned int
void delay(uchar i);
uchar z,t;
uint y;
uint code table[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,
0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xE7,0xC3,0x81,0x00,0x7E,0x3C,0x18,0x00,0xFF,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0xFF
};
void main()
{
while(1)
{ for(z=0;z<32;z++)
{led=table[z];
delay(5);
y++;
}
if(z==32)
{for(t=0;t<5;t++)
{
led=~led;
delay(10);
}
}
}
}
void delay(uchar i)
{uint j,k;
for(j=i;j>0;j--)
for(k=5000;k>0;k--);
}
那就是流水灯喽
P1口8个灯循环点亮
ORG 0000H;程序开始
LJMP MAIN;
ORG 030H;
MAIN:MOV R0,#08H;把8送入R0中,
MOV A,#0FEH;把FE送入A中,即11111110
PLAY:RR A;右移动1位
MOV P1,A;输出显示
ACALL DEL;延时
DJNZ R0,PLAY;一共移动8次
AJMP MAIN;重新开始
DEL: MOV R7,#0FH;延时子程序
DEL1:MOV R6,#0FFH;
DEL2:MOV R5,#01FH;
DEL3: DJNZ R5,DEL3;
DJNZ R6,DEL2;
DJNZ R7,DEL1;
RET;
END
兄弟,是4种不同的循环亮法,你这个只有一种,帮忙编编,谢谢
干脆你用这个 这个是接了按键的哈哈
#include"reg51.h" //
#define char unsigned char
char key,keytmp; //扫描键值
//
//
//*****按键扫描函数*********//
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;
}
}
//
//
//*******功能函数-依次点亮*********//
fun1()
{
int i,s;
s=0xfe;
for(i=0;i<8;i++)
{
P1=s;
delay(100);
s=s<<1;
}
}
//
//
//*******功能函数-交叉闪亮*********//
fun2()
{
int i,s;
s=0x55;
for(i=0;i<2;i++)
{
P1=s;
delay(100);
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;}
}
}
}
//
//
//***************结束******************//
//********给你个很棒的网站希望对你学习有帮助*****//