新人求解答!关于用51驱动两块16*64点阵屏的。
时间:10-02
整理:3721RD
点击:
我将两块16*64点阵屏连在一起,写程序进51驱动,可是一点反应也没有是为什么?是51不足够驱动吗?还是其他问题?附上我的程序,请大神帮我看看吧!谢谢了!点阵屏中列控制是用595,行控制用两片138
#include<reg52.h>
#include<intrins.h>
sbit EN = P0^0;
sbit T_STR = P0^7; //锁存引脚
sbit T_IO = P0^1; //数据引脚
sbit T_CLK = P0^6; //时钟引脚
unsigned char temp[16];
/*-----------------------------------------------
16x16汉字取模数据
------------------------------------------------*/
unsigned char code hztest[]=
{
0x00,0x00,0xFF,0x7F,0x80,0x00,0x80,0x00,0x80,0x00,0xFE,0x3F,0x82,0x20,0x82,0x20,
0x92,0x22,0xA2,0x24,0x82,0x20,0x92,0x22,0xA2,0x24,0x82,0x20,0x82,0x28,0x02,0x10,/*"雨",0*/
0x00,0x00,0xFC,0x1F,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xFF,0x7F,0x80,0x00,
0x40,0x01,0x40,0x01,0x20,0x02,0x20,0x02,0x10,0x04,0x08,0x08,0x04,0x10,0x03,0x60,/*"天",1*/
0x00,0x02,0x3E,0x02,0x22,0x1E,0x22,0x11,0xA2,0x0A,0x3E,0x04,0x08,0x0A,0x08,0x11,
0x88,0x60,0x3A,0x1F,0x0A,0x11,0x0A,0x11,0x0A,0x11,0x3A,0x11,0x07,0x1F,0x00,0x11,/*"路",2*/
0x00,0x00,0xC4,0x1F,0x48,0x10,0xC8,0x13,0x41,0x12,0xF2,0x7F,0x12,0x40,0xC8,0x1F,
0x48,0x10,0xC4,0x1F,0x47,0x10,0xC4,0x1F,0x44,0x10,0x44,0x10,0x44,0x14,0x40,0x08,/*"滑",3*/
0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x88,0x08,0x88,0x10,0x88,0x20,
0x84,0x20,0x84,0x40,0x82,0x40,0x81,0x40,0x80,0x00,0x80,0x00,0xA0,0x00,0x40,0x00,/*"小",4*/
0x00,0x00,0x40,0x00,0x80,0x00,0x00,0x01,0x00,0x01,0x20,0x00,0x20,0x10,0x24,0x20,
0x24,0x20,0x24,0x40,0x22,0x40,0x22,0x48,0x21,0x08,0x20,0x08,0xC0,0x0F,0x00,0x00,/*"心",5*/
0x08,0x08,0x10,0x08,0x10,0x04,0xFF,0x7F,0x00,0x00,0x7C,0x10,0x44,0x12,0x44,0x12,
0x7C,0x12,0x44,0x12,0x44,0x12,0x7C,0x12,0x44,0x10,0x44,0x10,0x54,0x14,0x24,0x08,/*"前",6*/
0x10,0x00,0x90,0x3F,0x08,0x00,0x04,0x00,0x12,0x00,0x10,0x00,0xC8,0x7F,0x0C,0x04,
0x0A,0x04,0x09,0x04,0x08,0x04,0x08,0x04,0x08,0x04,0x08,0x04,0x08,0x05,0x08,0x02/*"行",7*/
};
void Input(unsigned char dat) //向595写一个字节
{
unsigned char i;
for(i=0;i<8;i++)
{
T_IO=!(dat&0x01);
dat>>=1;
T_CLK=0;
T_CLK=1;
}
}
void Delay(unsigned int t)//延时
{
while(--t);
}
void main (void)
{
unsigned char count;//16行扫描数据,范围0-15
unsigned int i,j;
count=0;
while (1)
{
Delay(10);//控制扫描频率
for(j=0;j<8;j++)//取每个汉字在对应行的字模
{
temp[2*j]=hztest[j*32+count*2];
temp[2*j+1]=hztest[j*32+count*2+1];
}
T_STR=0;//锁存置0无效
for(i=0;i<16;i++)
{
Input(temp[i]);//输出到595
}
P2=count;//用P2口的4位选择对应的行
T_STR=1; //锁存有效对应一行的数据显示到屏上
count++;
if(count==16)
count=0;
}
}
#include<reg52.h>
#include<intrins.h>
sbit EN = P0^0;
sbit T_STR = P0^7; //锁存引脚
sbit T_IO = P0^1; //数据引脚
sbit T_CLK = P0^6; //时钟引脚
unsigned char temp[16];
/*-----------------------------------------------
16x16汉字取模数据
------------------------------------------------*/
unsigned char code hztest[]=
{
0x00,0x00,0xFF,0x7F,0x80,0x00,0x80,0x00,0x80,0x00,0xFE,0x3F,0x82,0x20,0x82,0x20,
0x92,0x22,0xA2,0x24,0x82,0x20,0x92,0x22,0xA2,0x24,0x82,0x20,0x82,0x28,0x02,0x10,/*"雨",0*/
0x00,0x00,0xFC,0x1F,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xFF,0x7F,0x80,0x00,
0x40,0x01,0x40,0x01,0x20,0x02,0x20,0x02,0x10,0x04,0x08,0x08,0x04,0x10,0x03,0x60,/*"天",1*/
0x00,0x02,0x3E,0x02,0x22,0x1E,0x22,0x11,0xA2,0x0A,0x3E,0x04,0x08,0x0A,0x08,0x11,
0x88,0x60,0x3A,0x1F,0x0A,0x11,0x0A,0x11,0x0A,0x11,0x3A,0x11,0x07,0x1F,0x00,0x11,/*"路",2*/
0x00,0x00,0xC4,0x1F,0x48,0x10,0xC8,0x13,0x41,0x12,0xF2,0x7F,0x12,0x40,0xC8,0x1F,
0x48,0x10,0xC4,0x1F,0x47,0x10,0xC4,0x1F,0x44,0x10,0x44,0x10,0x44,0x14,0x40,0x08,/*"滑",3*/
0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x88,0x08,0x88,0x10,0x88,0x20,
0x84,0x20,0x84,0x40,0x82,0x40,0x81,0x40,0x80,0x00,0x80,0x00,0xA0,0x00,0x40,0x00,/*"小",4*/
0x00,0x00,0x40,0x00,0x80,0x00,0x00,0x01,0x00,0x01,0x20,0x00,0x20,0x10,0x24,0x20,
0x24,0x20,0x24,0x40,0x22,0x40,0x22,0x48,0x21,0x08,0x20,0x08,0xC0,0x0F,0x00,0x00,/*"心",5*/
0x08,0x08,0x10,0x08,0x10,0x04,0xFF,0x7F,0x00,0x00,0x7C,0x10,0x44,0x12,0x44,0x12,
0x7C,0x12,0x44,0x12,0x44,0x12,0x7C,0x12,0x44,0x10,0x44,0x10,0x54,0x14,0x24,0x08,/*"前",6*/
0x10,0x00,0x90,0x3F,0x08,0x00,0x04,0x00,0x12,0x00,0x10,0x00,0xC8,0x7F,0x0C,0x04,
0x0A,0x04,0x09,0x04,0x08,0x04,0x08,0x04,0x08,0x04,0x08,0x04,0x08,0x05,0x08,0x02/*"行",7*/
};
void Input(unsigned char dat) //向595写一个字节
{
unsigned char i;
for(i=0;i<8;i++)
{
T_IO=!(dat&0x01);
dat>>=1;
T_CLK=0;
T_CLK=1;
}
}
void Delay(unsigned int t)//延时
{
while(--t);
}
void main (void)
{
unsigned char count;//16行扫描数据,范围0-15
unsigned int i,j;
count=0;
while (1)
{
Delay(10);//控制扫描频率
for(j=0;j<8;j++)//取每个汉字在对应行的字模
{
temp[2*j]=hztest[j*32+count*2];
temp[2*j+1]=hztest[j*32+count*2+1];
}
T_STR=0;//锁存置0无效
for(i=0;i<16;i++)
{
Input(temp[i]);//输出到595
}
P2=count;//用P2口的4位选择对应的行
T_STR=1; //锁存有效对应一行的数据显示到屏上
count++;
if(count==16)
count=0;
}
}
首先确保一个显示屏的时候可以正常工作,然后再试试级联时候能不能正常显示。
