实验八——LED动态扫描
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验八——LED动态扫描
/*
作者:熊培庆
时间:2010年12月3号
功能:LED动态扫描
*/
#include <REG52.H>
code char right[8]={0x18,0x3C,0x7E,0xFF,0x3C,0x3C,0x3C,0x3C}; //显示数组
code char left[8] ={0x3C,0x3C,0x3C,0x3C,0xFF,0x7E,0x3C,0x18};
code char up[8] ={0x3C,0x3C,0x3C,0x3C,0xFF,0x7E,0x3C,0x18};
code char down[8] ={0x18,0x3C,0x7E,0xFF,0x3C,0x3C,0x3C,0x3C}; //字模软件提取的代码
//按键位声明
sbit upkey = P3^0;
sbit downkey = P3^1;
sbit leftkey = P3^2;
sbit rightkey = P3^3;
// 延时函数
void delay(char ms)
{
char i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<120;j++);
}
}
//右移函数
void rightmove(char ms)
{
char x,y,i,j;
x=0x80;
for(j=0;j<=8;j++)
{
y=x;
for(i=0;i<9;i++)
{
P2=y;
P1=~right[i];
y=2*y;
delay(10);
}
P1= 0xff;
P2= 0;
x=x/2;
delay(ms);
}
}
void leftmove(char ms)
{
char x,y,i,j;
x=1;
for(j=0;j<=8;j++) //移位
{
y=x; //设置起始位置
for(i=0;i<9;i++) //送图片
{
P2=y;
P1=~left[i];
y=2*y;
delay(10);
}
P1= 0xff;
P2= 0;
x=2*x; //移位
delay(ms);
}
}
void upmove(char ms)
{
char x,y,i,j;
x=1;
for(j=0;j<=8;j++)
{
y=x;
for(i=0;i<9;i++)
{
P1=~y;
P2=up[i];
y=2*y;
delay(10);
}
P1= 0xff;
P2= 0;
x=2*x;
delay(ms);
}
}
void downmove(char ms)
{
char x,y,i,j;
x=0x80;
for(j=0;j<=8;j++)
{
y=x;
for(i=0;i<9;i++)
{
P1=~y;
P2=down[i];
y=2*y;
delay(10);
}
P1= 0xff;
P2= 0;
x=x/2;
delay(ms);
}
}
void main()
{
while(1)
{
if(upkey==0)
{
while(downkey==1&leftkey==1&rightkey==1)
upmove(10);
}
if(downkey==0)
{
while(upkey==1&leftkey==1&rightkey==1)
downmove(10);
}
if(leftkey==0)
{
while(downkey==1&upkey==1&rightkey==1)
leftmove(10);
}
if(rightkey==0)
{
while(downkey==1&leftkey==1&upkey==1)
rightmove(10);
}
} }。