点阵左移问题,高人指点
本帖最后由 feixiang1990 于 2013-6-7 11:37 编辑自己买了个点阵屏幕,但是编写左移功能的时候出现问题,希望做过的能指点一二,帮下小弟。
先贴出代码:#include<reg52.h>
#define uchar unsigned char
uchar hang={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
0x08,0x09,0x0a,0x0b,0xfc,0x0d,0xfe,0x0f};
sbit R1=P1^0;//接LED屏输入口的R1上 这个是红色数据输入口 输出到单元板上595芯片上 08接口R1是上半屏 R2是下半屏
sbit G1=P1^1;//同上 绿色数据
sbit R2=P1^2;
sbit G2=P1^3;
sbit CLK=P1^4;//时钟信号
sbit STB=P1^5;//锁存信号
sbit OE=P1^6;//理解成显示或不显示的开关吧
char code HZ[];//字库数组
char code DZ[];
char HC0,HC1;//缓存数组
char XS0,XS1;
unsigned int move,speed;
void delay_nms(unsigned int x)
{
unsigned int i,j;
for(i=0;i<x;i++)
for(j=0;j<100;j++);
}
void WriteByterR1(char dat,dat2)//写一个字节数据
{
char i;
for(i=0;i<8;i++)
{
R1=dat&0x01;
dat=dat>>1;
G1=dat2&0x01;
dat2=dat2>>1;
CLK=0;
CLK=1;
}
}
void WriteByterR2(char dat,dat2)//写一个字节数据
{
char i;
for(i=0;i<8;i++)
{
R2=dat&0x01;
dat=dat>>1;
G2=dat2&0x01;
dat2=dat2>>1;
CLK=0;
CLK=1;
}
}
void main()//主函数
{
unsigned int lie;
unsigned char speed,yidong,zishu;
unsigned char i,s,k;
while(1)//大循环
{
for(zishu=0;zishu<14;zishu++)
{
for(yidong=0;yidong<16;yidong++)//数据移位
{
for(speed=0;speed<200;speed++) //移动速度
{
//下半部分
for(lie=0;lie<16;lie++) //16列数据
{
for(i=0;i<6;i++) //i为显示的汉字个数
{
HC1= HZ;
HC1= HZ;
}
for(s=0;s<10;s++)//左移实现部分
{
if(yidong<8)
{
XS1 = ((HC1>>yidong)|(HC1<<(8-yidong)));
}
else
{
XS1 = (HC1>>(yidong-8)) | (HC1<<(16-yidong));
}
}
for(k=0;k<10;k++)
{
WriteByterR2(XS1,0xff);
}
P0=hang; //行循环,num等于0的时候,第一行亮,依次类推
STB=1;//锁存信号
STB=0;
}
}
}
}
}
}
char code DZ[]=
{//此处省略
};
char code HZ[]=
{
0xFB,0xFF,0x7B,0xC0,0x80,0xEF,0xFB,0xF7,0xF5,0xFB,0xF5,0xF5,0xF6,0xCE,0x40,0xDF,
0x37,0x80,0xF7,0xFB,0xC7,0xFB,0xF0,0xFB,0xF7,0xFB,0xF7,0xFB,0x17,0x80,0xF7,0xFF,/*"轻",0*/
/* (16 X 16 , 宋体 )*/
0xFB,0xFF,0x7B,0xC0,0x80,0xEF,0xFB,0xF7,0xF5,0xFB,0xF5,0xF5,0xF6,0xCE,0x40,0xDF,
0x37,0x80,0xF7,0xFB,0xC7,0xFB,0xF0,0xFB,0xF7,0xFB,0xF7,0xFB,0x17,0x80,0xF7,0xFF,/*"轻",1*/
/* (16 X 16 , 宋体 )*/
0xF7,0xFE,0xF7,0xFE,0xFB,0xFE,0xC1,0xC0,0x5D,0xDF,0x5D,0xDF,0x9D,0xDF,0xC1,0xDE,
0xDD,0xDD,0xDD,0xD9,0xDD,0xDB,0xDD,0xDF,0xC1,0xDF,0xDD,0xEB,0xFD,0xF7,0xFF,0xFF,/*"的",2*/
/* (16 X 16 , 宋体 )*/
//省略部分
};效果视频如下:
http://v.youku.com/v_show/id_XNTY3NjAyODYw.html
感觉左移,做的有问题,但是又不清楚,怎么才能调成效果,也请多多指点下
没做过点阵,帮顶! 建立缓存区,移动指针就行了。 以前做的 左移供你参考
for(disrow_U8=0; disrow_U8<16; disrow_U8++)
{
for(s=screen_size+1; s>0; s--)
{
BUFF1 = SRAM_ADDR;
BUFF1 = SRAM_ADDR;
}
for(s=1; s<(screen_size+1)*2; s++)
{
temp=((BUFF1<<move_U8)|(BUFF1>>(8-move_U8)));
LED_Senddata(temp,color_U8);
}
OE138_SET();
OE5926_SET();
LST_SET();
IO0CLR= 0x78000000;
IO0SET= ((15-disrow_U8)<<27)&0x78000000;
if(LEDsta_U8 == 0)
{
OE138_CLR();
OE5926_CLR();
Delay(1000);
}
} 貌似是买我的板子 哈哈 虫行天下 发表于 2013-6-12 23:55 static/image/common/back.gif
貌似是买我的板子 哈哈
对的的啊啊 左移程序搞定了没有 虫行天下 发表于 2013-6-14 13:04 static/image/common/back.gif
左移程序搞定了没有
嗯,搞定了啊
页:
[1]