求一c51单片机,8位流水灯程序

要求:c51单片机8位流水灯点亮的顺序为:0123,1234,2345,3456,7012.可循环。延时要求可以清晰的看出延时效果
你们的程序在单片机上 试验过吗 你们弄错了,0123不是同时亮 而是0 1 2 3 按顺序亮 再1234按顺序亮

下列程序调试成功。使用晶振为12M。
//软件延时,使P1口外接的8个发光二极管,以每秒1位的速度,轮流发光。
//发光顺序:0123,1234,2345,3456,4567,5670,6701,7012。循环。
//----------------------------
#include<reg52.h>
#include<intrins.h>
unsigned char a;
void main()
{
unsigned char i, j, k;
a = 0x0f;
while(1) {
P1 = a; //假设8个发光二极管接在P1口.
a = _crol_(a, 1);
for(i = 8; i > 0; i--)
for(j = 250; j > 0; j--)
for(k = 250; k > 0; k--);
}
}
//----------------------------
补充提问:0123不是同时亮,而是0 1 2 3 按顺序亮,再1234按顺序亮...

回答补充提问,改动如下:

#include<reg52.h>
#include<intrins.h>
void main()
{
unsigned char a, b, c, i, j, k;
a = 0xfe;
while(1) {
b = a;
for(c = 0; c < 4; c++) {
P1 = b;
b = _crol_(b, 1);
for(i = 8; i > 0; i--)
for(j = 250; j > 0; j--)
for(k = 250; k > 0; k--);
}
a = _crol_(a, 1);
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-04-29
//C51点亮8位LED流水灯:1234,2345,3456,7012;
//P1口接LED灯。假设高电平为点亮。
#include<reg51.h>
#define LED P1char code light[]={0x1e,0x3c,0x78,0x87};
void delay(unsigned int i)
{
unsigned char j;
while(--i){j=100;while(--j);}
}
void main()
{
unsigned char i;
while(1)
{
for(i=0;i<4;i++)LED=light[i];
delay(1000);
}
}
//已编译通过。
//我qq在的:598106383本回答被提问者采纳
第2个回答  2010-04-29
#include <reg51.h>
#include <intrins.h>
void delay(void)
{
unsigned char a,b,c;
for(c=167;c>0;c--)
for(b=171;b>0;b--)
for(a=16;a>0;a--);
}
void main()
{
char a=0xf0,i;
while(1)
{
for(i=0;i<3;i++)
{
P1=a;
delay();
a=_crol_(a,1);
}
P1=0x78;
delay();
a=0xf0;
}
}
延时一秒,可以清楚 看出来,P1口接八个灯
第3个回答  2010-05-05
这个很简单啊~~你可以用查表法 实现你的功能~~ 把你要的代码放到表格里,运行一个延时,查一次表,再输出到端口~~
第4个回答  2010-04-29
解题思路:
1、假设你P1口接的led灯为共阳极的,且已经串联8个限流电阻。
2、间隔1s,闪烁一次。3、使用晶振为12M。
#include<reg52.h>
#define uchar unsigned char
uchar temp,num=0;
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=255;y>0;y--)
;
}
void main()
{
temp=0xf0;
while(1)
{
p1=temp;
delay(255);
num++;
if(num==5)
{
num=0;
temp=0xf0;
}
temp=_crol_(temp,1);

}
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网