初级会员
主题
回帖0
积分81
阅读权限10
注册时间2012-4-18
最后登录1970-1-1
在线时间 小时
|
#include<regx52.h>
#define uchar unsigned char
#define uint unsigned int
#define speed 2 //定义显示的速度
//#define R1 P2;
//#define R2 P0;
sbit CLK=P3^1;
sbit R1=P2^0; //上半屏数据端口
sbit R2=P2^1; //下半屏数据端口
uint word;
uchar yd,h; //yd为位移量(即移动量),h为138行选信号
uchar buff1[10]; //buff的取值与要显示的字有关系,比如按16*16的字的四字移动过来算,那么它就要多留一个字的空间,取值=5*2=10
uchar buff2[10];
uchar code tab[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; //对应的行选段代码
uchar code hz[][32];
void loadoneline(void); //装载函数
void sendoneline(void); //发送函数
void send_595(uchar data1,uchar data2);
void main(void);
void main(void)
{
uchar i;
yd=0,word=0;
{
while(1)
{
while(yd<16)
{
for(i=0;i<speed;i++)
{
for(h=0;h<16;h++)
{
loadoneline();
sendoneline();
P1_4=1;
P1_7=1;
P1=tab[h];
P3_1=1;
}
}
yd++;
}
yd=0,word=word+4;
if(word>20)word=0;
}
}
}
void loadoneline(void)
{
uchar s;
for(s=0;s<4;s++)
{
if(h+yd<16)
{
buff1[2*s]=hz[word+s][2*(h+yd)];
buff1[2*s+1]=hz[word+s][2*(h+yd)+1];
buff2[2*s]=hz[word+s+4][2*(h+yd)];
buff2[2*s+1]=hz[word+s+4][2*(h+yd)+1];
}
else
{
buff1[2*s]=hz[word+s+4][2*(h+yd-16)];
buff1[2*s+1]=hz[word+s+4][2*(h+yd-16)+1];
buff2[2*s]=hz[word+s+8][2*(h+yd-16)];
buff2[2*s+1]=hz[word+s+8][2*(h+yd-16)+1];
}
}
}
/**********************************上移发送一线数据函数***********************************/
void sendoneline()
{
char s;
for(s=7;s>=0;s++)
{
send_595(buff1,buff2);
}
}
/**********************************模拟串口部分,调整数据**************************/
void send_595(uchar data1,uchar data2)
{
uchar i;
for(i=0;i<8;i++)
{
R1=data1&0x01;
R2=data2&0x01;
CLK=0;
CLK=1;
data1=data1>>1;
data2=data2>>1;
}
}
我调咯很久 还是不对 没有找出原因啊 望高手解答下 谢谢各位咯 |
|