基于单片机的花样流水灯的C语言编程

谁能帮我编一个类似流水灯的程序具体要求如下:AT89C51的P1、P3口接16盏LED灯,P2.2口接按键(用于LED显示模式的改变)。利用C语言编程实现LED灯的左移、右移、闪烁等的花样显示(最好6种花样以上)。至于亮灭的时间间隔不做要求肉眼能看到“流水效果”就好。万分感谢!
实在是16盏的不好找网上的参考太少了,8盏的到很多。。。。
这个。。要注册而且好像也不容易找啊范围太大了(可能这论坛以前不清楚不太会找)感觉不是跟百度上直接找这个程序一样吗?你能给点具体的指引吗?

第1个回答  2010-10-13
#include<reg51.h>

#define uchar unsigned char
#define uint unsigned int
sbit P2_0=P2^0;
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
sbit P2_4=P2^4;
sbit P2_5=P2^5;
/* 花样表格 */
uchar code seg1[]={ 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, 0x00,0xff, 0x00,0xff}; //控制字( 用左向右流动,然后全部闪烁两次 )

uchar code seg2[]={ 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00,0xff, 0x00,0xff}; //控制字( 用右向左流动,然后全部闪烁两次 )
uchar code seg3[]={ 0xfe, 0xfb, 0xef, 0xbf} ; // 控制字 ( 由左向右1,3,5,7(P1口控制),9,11,13,15(P3口控制)流动闪烁,)
uchar code seg4[]={0xfd,0xf7, 0xdf, 0x7f}; // 控制字 ( 由右向左2,4,6,8(P1控制)10,12,14,16(P3口控制) 流动闪烁,)
uchar code seg5[]={0xe7,0xdb,0xbd,0x7e}; //控制字(由中间到两边流动闪烁)
uchar code seg6[]={0x7e, 0xbd, 0xdb,0xe7}; //控制字(由两边到中间流动闪烁)

//P1.0~P1.7控制 灯1~8,P3.0~P3.7控制灯9~16,P2口用于模式控制 //

/********************延时k*1mS子函数*********************/
void delay(uint k)
{
uint i,j;
for(i=0;i<k;i++){
for(j=0;j<121;j++)
{;}}
}

main()
{
uchar a,b,c,d,e,f;
while(1)
{

/*下面通过查表方法获得花样参数*/
while(P2_0==0)
{
for(a=0;a<12;a++) //显示花样 1
{
delay(500);
P1=seg1[a];
P3=seg1[a];

}
}

while(P2_1==0)
{
for(b=0;b<12;b++) //显示花样 2
{
delay(500);
P1=seg2[b];
P3=seg2[b];

}
}
while(P2_2==0)
{
for(c=0;c<4;c++) //查表显示花样3
{
delay(500);
P1=seg3[c];
P3=seg3[c];

}
}
while(P2_3==0)
{
for(d=0;d<4;d++) //查表显示花样 4
{
delay(500);
P1=seg4[d];
P3=seg4[d];

}
while(P2_4==0)
{
for(e=0;e<4;e++) //查表显示花样5
{
delay(500);
P1=seg5[e];
P3=seg5[e];

}
}

while(P2_5==0)
{
for(f=0;f<4;f++) //查表显示花样6
{
delay(500);
P1=seg6[f];
P3=seg6[f];

}
}

}

}

}
第2个回答  2010-10-11
这都差不多,不过16位的,我可以给你建议几个要点,其他的你仿照8位就好了。总的就不写了,懒!
int a;
a=1;
_crol_(a;1)//左移 或 _cror_(a;1);//右移
P1=char(a%256);
P3=char(a/256);
第3个回答  2010-10-12
会了8口的16口的也很简单啊,你走完P1口,接着走P3的灯不就行了,道理很简单的!
第4个回答  2010-10-10
相关的程序呢,你到饭客网络去查下吧本回答被网友采纳
相似回答