游客
主题
回帖0
积分47
阅读权限1
注册时间2012-7-31
最后登录1970-1-1
在线时间 小时
|
# include <STC90.H>
# define uint unsigned int
# define uchar unsigned char
sbit Data=P3^0;
sbit CLK=P3^1;
sbit G=P3^2;
sbit STB=P1^7;
uchar move;//列指针
uchar line;//行指针
uint word;//字模计数器
uchar speed=40;
uchar BUFF[4];//缓存
void load_data(void);// 调整数据
void send_data(void);//发送数据
void scan();//16段扫描
uchar code table[]=
{
0xFD,0xFF,0xFD,0xFF,0xFD,0xFF,0x80,0x03,0xFB,0xFF,0xF6,0xFF,0xEE,0xFF,0xDE,0xFF,
0xC0,0x07,0xFE,0xFF,0xF6,0xDF,0xEE,0xEF,0xDE,0xF7,0xBE,0xFB,0xFA,0xFF,0xFD,0xFF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBB,0xFB,0xB7,0x83,0xAF,0xFB,0x9F,0xFB,0xBF,
0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBD,0xE3,0xBD,0x1B,0xBD,0xBB,0xC1,0xFB,0xFF,
0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xFE,0xFF,
0xFD,0x7F,0xFD,0x7F,0xFB,0xBF,0xFB,0xBF,0xF7,0xDF,0xEF,0xEF,0xDF,0xF7,0x3F,0xF9,
0xDD,0xF7,0xEE,0xF7,0xEE,0xEF,0xFF,0xDF,0x80,0x01,0xBF,0xFD,0x7F,0xFB,0xE0,0x1F,
0xFF,0xBF,0xFE,0x7F,0x00,0x01,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFA,0xFF,0xFD,0xFF
};
void main(void)
{
uchar i;
move=0;
word=0;
G=0;
while(1)
{
while(move<16)//数据移位
{
for(i=0;i<speed;i++)//移动速度
{
scan();
}
move++;//移动一步
}
move=0;
word=word+32;//后移一个字
if(word>=128) //到最后从头开始
word=0;
}
}
void scan()
{
for(line=0;line<16;line++)
{
load_data(); //调整数据
send_data(); //串口发送数据
P1=0x7f;//关闭显示
STB=1; //锁存为高
P1=line;//行选
}
}
void load_data(void)
{
char s;
for(s=1;s>=0;s--)//s为屏数加1(16*16为一屏)
{
BUFF[2*s]=table[word+(32*s)+(2*line)];//左半屏,line是行数,word是字数
BUFF[2*s+1]=table[word+(32*s+1)+(2*line)];//右半屏
}
}
void send_data(void)
{
char s;
uchar inc,tempyd,temp;
if(move<8)
inc=0;
else
inc=1;
for(s=0+inc;s<2+inc;s++)
{
if(move<8)
tempyd=move;
else
tempyd=move-8;
temp=(BUFF<<tempyd)|(BUFF[s+1]>>(8-tempyd));
//temp=255-temp;
SBUF=temp;
while(!TI);
TI=0;
}
}
哪位帮忙指点一下,这两个函数的具体的实现功能,劳烦对关键语句给予详尽的注释。谢谢!哪位能帮忙讲解一下左移扫描显示的原理更为甚好。。谢谢大家了。。。 |
|