第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];
}
}
}
}
}