程序和仿真圖如下#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar temp,num;
uchar a,c,d,e,v,b,m,n,f;
uchar i,j,z,k;/*各變量值的初始化*/
uchar flag=0;
uchar code table1[]={
0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,
0xFF,0xFF,0x80,0x40,0x80,0x21,0xA0,0x12,
0x90,0x04,0x88,0x08,0x84,0x10,0x82,0x20,
0x80,0x20,0x80,0x40,0x80,0x40,0x00,0x00,
0x40,0x04,0x44,0x04,0x54,0x02,0x54,0x01,
0xD4,0xFE,0x54,0x92,0x74,0x92,0x5F,0x92,
0x54,0x92,0x54,0x92,0xD4,0xFE,0x54,0x01,
0x54,0x02,0x44,0x04,0x40,0x04,0x00,0x00,
0x04,0x20,0x84,0x60,0x84,0x20,0xFC,0x1F,
0x84,0x10,0x84,0x10,0x00,0x40,0xFE,0x44,
0x92,0x44,0x92,0x44,0xFE,0x7F,0x92,0x44,
0x92,0x44,0xFE,0x44,0x00,0x40,0x00,0x00,
0x00,0x20,0x04,0x20,0x04,0x20,0x04,0x20,
0x04,0x20,0x04,0x20,0x04,0x20,0xFC,0x3F,
0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,
0x04,0x20,0x04,0x20,0x00,0x20,0x00,0x00,
0x20,0x80,0x20,0x80,0x20,0x40,0x20,0x20,
0x20,0x10,0x20,0x0C,0x20,0x03,0xFF,0x00,
0x20,0x03,0x20,0x0C,0x20,0x10,0x20,0x20,
0x20,0x40,0x20,0x80,0x20,0x80,0x00,0x00,
0x40,0x04,0x30,0x04,0x11,0x04,0x96,0x04,
0x90,0x04,0x90,0x44,0x91,0x84,0x96,0x7E,
0x90,0x06,0x90,0x05,0x98,0x04,0x14,0x04,
0x13,0x04,0x50,0x04,0x30,0x04,0x00,0x00,
};
uchar code table2[]={
0x40,0x80,0x40,0x80,0x42,0x40,0x44,0x20,
0x58,0x18,0xC0,0x07,0x40,0x00,0x7F,0x00,
0x40,0x00,0xC0,0x3F,0x50,0x40,0x48,0x40,
0x46,0x40,0x40,0x40,0x40,0x78,0x00,0x00,
0x00,0x00,0x00,0x00,0xF8,0x1F,0x88,0x08,
0x88,0x08,0x88,0x08,0x88,0x08,0xFF,0x7F,
0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,
0xF8,0x9F,0x00,0x80,0x00,0xF0,0x00,0x00,
0x00,0x20,0x04,0x20,0x04,0x20,0x04,0x20,
0x04,0x20,0x04,0x20,0x04,0x20,0xFC,0x3F,
0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,
0x04,0x20,0x04,0x20,0x00,0x20,0x00,0x00,
0x24,0x08,0x24,0x06,0xA4,0x01,0xFE,0xFF,
0x23,0x01,0x22,0x06,0x00,0x40,0x3E,0x49,
0x22,0x49,0x22,0x49,0x22,0x7F,0x22,0x49,
0x22,0x49,0x3E,0x49,0x00,0x41,0x00,0x00,
0x40,0x04,0x30,0x04,0x11,0x04,0x96,0x04,
0x90,0x04,0x90,0x44,0x91,0x84,0x96,0x7E,
0x90,0x06,0x90,0x05,0x98,0x04,0x14,0x04,
0x13,0x04,0x50,0x04,0x30,0x04,0x00,0x00,
0x00,0x00,0xFE,0xFF,0x22,0x04,0x5A,0x08,
0x86,0x07,0x10,0x80,0x0C,0x41,0x24,0x31,
0x24,0x0F,0x25,0x01,0x26,0x01,0x24,0x3F,
0x24,0x41,0x14,0x41,0x0C,0x71,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
void init(); /*主函數(shù)的初始化聲名*/
void init1(); /*左移顯示方式的初始化聲名*/
void disp1(); /*左移顯示子程序聲名*/
void delay(uint z);/*延時函數(shù)聲名及定義*/
uchar keyscan();
void display1();
void display2();
void display3();
void display4();
void display5();
void display6();
uchar keyscan();
void main()
{
while(1)
{ flag=0;
flag=keyscan();
switch(flag){
case 0:break;
case 1:display1();break;
case 2:display2();break;
case 3:display3();break;
case 4:display4();break;
case 5:display5();break;
case 6:display6();break; }}
}
uchar keyscan()
{ uchar temp1,temp2,temp,num;
P3=0xf0;
temp=P3;
if(temp!=0xf0)
{ temp1=P3;
P3=0x0f;
temp=P3;
if(temp!=0x0f)
{ temp2=P3;
temp=temp1^temp2;
}
switch(temp)
{ case 0x7e : num=1; break;
case 0x7d : num=2; break;
case 0x7b : num=3; break;
case 0x77 : num=4; break;
case 0xbe : num=5; break;
case 0xbd : num=6; break;
case 0xbb : num=7; break;
case 0xb7 : num=8; break;
case 0xde : num=9; break;
case 0xdd : num=10; break;
case 0xdb : num=11; break;
case 0xd7 : num=12; break;
case 0xee : num=13; break;
case 0xed : num=14; break;
case 0xeb : num=15; break;
case 0xe7 : num=16; break;
}
}
return num;}
void display1()
{
init();
init1(); //左移顯示初始化
{int c=96;
int e=96;
for(i=0;i<=c;i=i+16 ) //判斷左移的字符個數(shù)
for(j=0;j<=b;j++) //向左移動的速度由變量v控制
for(k=i*2;k<(i*2+32);) //顯示一幕
{
flag=keyscan();
if(flag!=1)
{ return ; }
P0=table1[k];
k++;
P2=table1[k];
k++;
P1=m;
m++;
if(m==0x10)
m=0x00;
delay(1);
}
for(i=0;i<=e;i=i+16 ) //判斷左移的字符個數(shù)
for(j=0;j<=b;j++) //向左移動的速度由變量v控制
for(z=i*2;z<(i*2+32);) //顯示一幕
{
flag=keyscan();
if(flag!=1)
{ return ; }
P0=table2[z];
z++;
P2=table2[z];
z++;
P1=m;
m++;
if(m==0x10)
m=0x00;
delay(1);
}
}
}
void display2()
{
init();
init1(); //左移顯示初始化
{int d=176;
for(i=0;i<=d;i++) //判斷左移的字符個數(shù)
for(j=0;j<=v;j++) //向左移動的速度由變量v控制
for(k=i*2;k<(i*2+32);) //顯示一幕
{
flag=keyscan();
if(flag!=2)
{ return ; }
P0=table2[k];
k++;
P2=table2[k];
k++;
P1=m;
m++;
if(m==0x10)
m=0x00;
delay(1);
}
}
}
void display3()
{
init();
init1(); //左移顯示初始化
{int a=32;
for(i=0;i<=a;i++) //判斷左移的字符個數(shù)
for(j=0;j<=v;j++) //向左移動的速度由變量v控制
for(k=i*2;k<(i*2+32);) //顯示一幕
{
flag=keyscan();
if(flag!=3)
{ return ; }
P0=table1[k];
k++;
P2=table1[k];
k++;
P1=m;
m++;
if(m==0x10)
m=0x00;
delay(1);
}
}
}
void display4()
{
init();
init1(); //左移顯示初始化
{int a=32;
for(i=0;i<=a;i++) //判斷左移的字符個數(shù)
for(j=0;j<=v;j++) //向左移動的速度由變量v控制
for(k=i*2;k<(i*2+32);) //顯示一幕
{
flag=keyscan();
if(flag!=4)
{ return ; }
P0=table1[k];
k++;
P2=table1[k];
k++;
P1=m;
m++;
if(m==0x10)
m=0x00;
delay(1);
}
}
}
void display5()
{
init();
init1(); //左移顯示初始化
{int a=32;
for(i=0;i<=a;i++) //判斷左移的字符個數(shù)
for(j=0;j<=v;j++) //向左移動的速度由變量v控制
for(k=i*2;k<(i*2+32);) //顯示一幕
{
flag=keyscan();
if(flag!=5)
{ return ; }
P0=table1[k];
k++;
P2=table1[k];
k++;
P1=m;
m++;
if(m==0x10)
m=0x00;
delay(1);
}
}
}
void display6()
{
init();
init1(); //左移顯示初始化
{int a=32;
for(i=0;i<=a;i++) //判斷左移的字符個數(shù)
for(j=0;j<=v;j++) //向左移動的速度由變量v控制
for(k=i*2;k<(i*2+32);) //顯示一幕
{
flag=keyscan();
if(flag!=6)
{ return ; }
P0=table1[k];
k++;
P2=table1[k];
k++;
P1=m;
m++;
if(m==0x10)
m=0x00;
delay(1);
}
}
}
void delay(uint z)/*延時函數(shù)聲名及定義*/
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=110;y>0;y--);
}
}
void init() //主程序初始化
{
v=15; //設(shè)置移動速度的初值
b=100;
}
void init1() //左移顯示方式各變量的初始化
{
P0=0;
P2=0;
m=0;
}
|