一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 3838|回复: 9
收起左侧

点阵屏扫描问题请教

[复制链接]
发表于 2010-5-10 23:17 | 显示全部楼层 |阅读模式
点阵屏扫描问题请教
一般经常用的点阵屏,在16X64的屏上,行扫描通过2片138完成16行的,由8片595以16X8的方式,一根数据线完成64列扫描。现在有一款点阵屏,是有2组8片595以8X8的方式方式完成64列扫描。这样就有2根数据线输入,如果用下面的程序显示出来的就是上面8X8的内容和下面8X8的内容是一样的,下面的程序是不是可以改成在这块屏上正常显示呢??谢谢先!!
显示如图,文字应该是【同济物业】
IMG_0003.JPG

这是部分程序,如果需要全部程序可以提供。
/*******根据列指针,由双字节合并为单字节的子程序模块12MHZ************/
uchar two_onebyte(uchar h1,uchar h2)
{
uchar temp,tempcol;
if(col<8) tempcol=col;
else tempcol=col-8;
temp=(h1<<tempcol)|(h2>>(8-tempcol));
//temp=255-temp;
return temp;
}
/****************************主函数***************************/
void main(void)
{
uchar i;
col=0;word=0;
while(1)
{
        while(col<16)// 循环16次,点亮并移动一个汉字
        {
                for(i=0;i<SPEED;i++)//汉字在屏幕上的停留时间(即移动速度快慢)
                {
                        for(disrow=0;disrow<16;disrow++)//扫描16行                        
                        {
                        loadoneline();//装载一线点阵数据
                        sendoneline();//发送一线点阵数据
                         P1_4=1;//消影。
                         P1_7= 1;   // 点亮屏幕                          
                         P1=tab[disrow];                        
                         P3_1=1;      //(CLK=P3_1)上升沿595输出     
                        }
                }
               
        col++;        //列指针递增
        }   
col=0;word=word+32;// 一个汉字移动后,指向下一个汉字
if(word>=1024)word=0;// 移动28个汉字后,重新开始
}
}
/**************装载一线点阵数据****************/
void loadoneline(void)
{
uchar s;
        for(s=0;s<5;s++)   //s为要显示的数字+1,4字是for(s=0;s<5;s++) ,8字是for(s=0;s<9;s++)
        {
        BUFF[2*s]=HZ[word+32*s+2*disrow];
        BUFF[2*s+1]=HZ[word+1+32*s+2*disrow];
        }
}
/***************发送一线点阵数据*******************/
void sendoneline(void)
{
char s;uchar inc;
if(col<8)inc=0;else inc=1;
        for(s=9+inc;s>=0+inc;s--)//4字是for(s=9+inc;s>=0+inc;s--),8字是for(s=17+inc;s>=0+inc;s--)
        {
        SBUF=two_onebyte(BUFF,BUFF[s+1]);
        while(!TI);TI=0;
        }
}
发表于 2010-5-11 01:33 | 显示全部楼层
列扫描好像没问题

感觉是行扫描时序不对,
就是74ls138的数据不对
发表于 2010-5-11 01:34 | 显示全部楼层
沈老师你最好提供一个完整的程序.
其它人改好了可以直接编译给你hex文件,方便调试
 楼主| 发表于 2010-5-11 02:11 | 显示全部楼层
列扫描好像没问题

感觉是行扫描时序不对,
就是74ls138的数据不对
yanjian 发表于 2010-5-11 01:33 https://www.yleee.com.cn/images/common/back.gif



这个屏怎么说明比较清楚有点晕。
实际这个屏是这样
16X64屏应该是上面8个模块+下面8个模块=16X64屏,一般屏上面8个模块和下面8个模块的列是并连的,只要一片595就可以控制了,我这个屏区别在于上面一个8X8模块用一片595,下面8X8模块也用一片595,这样595的数量比一般的屏多一倍,而且上下595的数据线是分开的,所以要显示16X16的文字必须上下595的数据线都要输入信号。
现在这个程序因为只有一个数据线输入,所以只显示一半,我把二个数据线连接在一起,所以显示上下一样了。
完整程序

#include <AT89x52.H>
//#include <regx52.h>
#define uchar unsigned char
#define uint unsigned int
#define SPEED 1                       //定义速度12M
#define light 3                        //定义亮度
uchar col,disrow;                      //col为位移变量,disrow为行变量
uint word;
uchar code tab[]=
{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};/*16行段码*/
//{0x0f,0x09,0x05,0x02,0x08,0x04,0x00,0x0c,0x03,0x0b,0x07,0x0d,0x01,0x0e,0x0a,0x06};
uchar code HZ[];
uchar BUFF[10];//4字是10,8字是18
void loadoneline(void);
void sendoneline(void);
/*******根据列指针,由双字节合并为单字节的子程序模块12MHZ************/
uchar two_onebyte(uchar h1,uchar h2)
{
uchar temp,tempcol;
if(col<8) tempcol=col;
else tempcol=col-8;
temp=(h1<<tempcol)|(h2>>(8-tempcol));
//temp=255-temp;
return temp;
}
/****************************主函数***************************/
void main(void)
{
uchar i;
col=0;word=0;
while(1)
{
while(col<16)// 循环16次,点亮并移动一个汉字
      
{
  for(i=0;i<SPEED;i++)//汉字在屏幕上的停留时间(即移动速度快慢)
               
  {
   for(disrow=0;disrow<16;disrow++)//扫描16行
                           
   {
   loadoneline();//装载一线点阵数据
   sendoneline();//发送一线点阵数据
                         P1_4=1;//消影。
                         P1_7= 1;   // 点亮屏幕                          
                         P1=tab[disrow];                        
    P3_1=1;      //(CLK=P3_1)上升沿595输出     
   }
  }
               
col++; //列指针递增
}   
col=0;word=word+32;// 一个汉字移动后,指向下一个汉字
if(word>=1024)word=0;// 移动28个汉字后,重新开始
}
}
/**************装载一线点阵数据****************/
void loadoneline(void)
{
uchar s;
for(s=0;s<5;s++)   //s为要显示的数字+1,4字是for(s=0;s<5;s++) ,8字是for(s=0;s<9;s++)
{
BUFF[2*s]=HZ[word+32*s+2*disrow];
BUFF[2*s+1]=HZ[word+1+32*s+2*disrow];
}
}
/***************发送一线点阵数据*******************/
void sendoneline(void)
{
char s;uchar inc;
if(col<8)inc=0;else inc=1;
for(s=9+inc;s>=0+inc;s--)//4字是for(s=9+inc;s>=0+inc;s--),8字是for(s=17+inc;s>=0+inc;s--)
{
SBUF=two_onebyte(BUFF,BUFF[s+1]);
while(!TI);TI=0;
}
}
/***********************汉字点阵码阴逐行顺上下*************************/
uchar code HZ[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//=============================================================================
0x40,0x08,0x40,0x14,0x40,0x04,0x48,0x24,0x4F,0xE4,0x48,0x24,0x48,0x24,0x48,0x24,
0x4F,0xE4,0x40,0x04,0x40,0x04,0x5F,0xF4,0x40,0x04,0x40,0x04,0x7F,0xFC,0x00,0x00,/*"同",0*/
0x28,0x10,0x24,0x10,0x22,0x10,0x22,0x10,0x21,0x10,0xE1,0x10,0x21,0x10,0x11,0x10,
0x16,0x0E,0x51,0xB0,0x48,0x40,0x88,0xA0,0x01,0x10,0x27,0xFE,0x20,0x40,0x40,0x80,/*"济",1*/
0x00,0x10,0x14,0x28,0x12,0x04,0x11,0x04,0x10,0x84,0xD4,0x44,0x32,0x24,0x19,0x24,
0x14,0x94,0x94,0x94,0x52,0x54,0x7D,0x54,0x51,0xFC,0x50,0x80,0x10,0x80,0x10,0x80,/*"物",2*/
0x00,0x00,0x00,0x00,0xFF,0xFE,0x04,0x44,0x04,0x40,0x04,0x40,0x14,0x60,0x1C,0x50,
0x14,0x50,0x24,0x48,0x24,0x4C,0x44,0x46,0x04,0x44,0x04,0x40,0x04,0x40,0x04,0x40,/*"业",3*/
0x88,0x10,0x44,0x18,0x42,0x30,0x21,0x40,0x24,0x90,0x24,0x90,0x24,0x90,0x24,0x90,
0x24,0x10,0x27,0xF0,0x21,0x00,0x20,0x80,0x2F,0xF8,0x20,0x80,0x3F,0x80,0x00,0x7C,/*"质",4*/
0x00,0x00,0xFF,0xFE,0x01,0x00,0x1F,0xF8,0x01,0x00,0x1F,0xF0,0x11,0x10,0x1F,0xF0,
0x11,0x10,0xFF,0xFE,0x00,0x00,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,/*"量",5*/
0x00,0x00,0xC0,0x60,0x20,0x90,0x10,0x10,0x08,0x10,0x08,0x10,0x04,0x10,0x04,0x10,
0x02,0x10,0x03,0xF0,0x02,0x00,0x02,0x00,0xFF,0xFE,0x00,0x80,0x01,0x00,0x02,0x00,/*"方",6*/
0x00,0x20,0x10,0x20,0x18,0x20,0x14,0x20,0x12,0x20,0x10,0x20,0x10,0x20,0xFE,0x20,
0x10,0x20,0x91,0xFE,0x7C,0x20,0x40,0x20,0x3E,0x20,0x20,0x20,0x10,0x20,0x10,0x20,/*"针",7*/
0x00,0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*":",8*/
0x04,0x00,0x82,0x0E,0x41,0x12,0x44,0x92,0x26,0x92,0x24,0x50,0x28,0x50,0x11,0x24,
0xFF,0x24,0x11,0x24,0x11,0x24,0x11,0x24,0x7D,0x24,0x11,0x04,0x11,0xFC,0x10,0x00,/*"规",9*/
0x20,0x00,0x20,0xFC,0x21,0x04,0x21,0x04,0xE1,0x00,0x11,0x10,0x09,0x38,0x49,0x08,
0x61,0x08,0x91,0x08,0x31,0xF8,0x40,0x00,0x04,0x60,0xFF,0xFE,0x04,0x20,0x04,0x20,/*"范",10*/
0x00,0x00,0x88,0x84,0x54,0xCE,0x44,0xA8,0x24,0x90,0x24,0xA8,0x24,0xA8,0x24,0xC4,
0x3C,0xC4,0x24,0xFC,0x24,0x80,0x3C,0x88,0x24,0x94,0x24,0x84,0x24,0x84,0x3C,0xFC,/*"服",11*/
0xC0,0x20,0x30,0x50,0x08,0x10,0x04,0x10,0x02,0x10,0x02,0x10,0x1F,0xF0,0x61,0x04,
0x19,0x1E,0x06,0x60,0x81,0x80,0x62,0x40,0x14,0x20,0x0C,0x10,0x07,0xF0,0x04,0x00,/*"务",12*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",13*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",14*/
0x08,0x20,0x08,0x70,0x08,0x90,0x08,0x10,0x0F,0xF0,0x08,0x10,0x88,0x10,0x4F,0xF0,
0x28,0x10,0x18,0x10,0x0F,0xF0,0x04,0x00,0x02,0x00,0x7F,0xFE,0x01,0x00,0x01,0x00,/*"有",15*/
0x00,0x80,0x01,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x88,0x40,0xF8,0x40,0x8F,0xFE,
0x88,0x40,0x89,0x50,0x89,0x48,0x8A,0x4C,0x88,0x48,0xFF,0xC0,0x00,0x3C,0x00,0x00,/*"呼",16*/
0x00,0x00,0xC0,0x00,0x2F,0xF8,0x18,0x08,0x0C,0x08,0x4A,0x04,0x49,0x06,0x28,0x84,
0x28,0x48,0x28,0x50,0x08,0x20,0x0C,0x20,0x01,0x10,0x01,0x98,0x02,0x10,0x04,0x00,/*"必",17*/
0x00,0x00,0x80,0x00,0x5F,0xFE,0x40,0x40,0x44,0x20,0x26,0x20,0x24,0x90,0x24,0x90,
0x28,0xC8,0x30,0x8C,0x21,0x08,0x22,0x00,0x20,0x00,0x3F,0xFC,0x00,0x80,0x01,0x00,/*"应",18*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",19*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",20*/
0x00,0x00,0x80,0x02,0x40,0x06,0x28,0x26,0x24,0x2A,0x12,0x6A,0x11,0x48,0x10,0x88,
0x10,0x88,0x11,0x48,0x12,0x48,0x14,0x68,0x10,0x48,0x10,0x08,0x1F,0xF8,0x00,0x00,/*"风",21*/
0x11,0x08,0x11,0xF8,0x11,0x08,0x11,0x08,0x11,0x08,0x11,0x08,0x91,0xF8,0x57,0x06,
0x54,0xD8,0x38,0x20,0x34,0x50,0x12,0x90,0xFD,0x08,0x11,0xF8,0x10,0x80,0x10,0x80,/*"格",22*/
0x02,0x00,0x45,0x08,0x21,0x0C,0x19,0x18,0x11,0x20,0x01,0x00,0x3F,0xFC,0x01,0x00,
0x01,0x00,0x7F,0xFE,0x04,0x40,0x04,0x30,0x08,0x20,0x3F,0xFC,0x01,0x00,0x02,0x00,/*"亲",23*/
0x08,0x00,0x08,0x00,0x08,0x44,0x88,0x7C,0x4A,0x44,0x2B,0x44,0x2A,0x44,0x1C,0x44,
0x18,0x44,0x08,0x44,0x7F,0x44,0x08,0x44,0x08,0x7C,0x78,0x00,0x07,0x00,0x00,0x00,/*"和",24*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",25*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",26*/
0x08,0x10,0x24,0x10,0x32,0x10,0x2A,0x10,0x21,0x10,0x21,0x10,0x21,0x10,0x2F,0xFE,
0x21,0x10,0xE1,0x10,0x01,0x10,0x07,0xFC,0x21,0x10,0x31,0x10,0x21,0x10,0x41,0x10,/*"讲",27*/
0x00,0x00,0x20,0x3E,0x10,0x42,0x08,0x42,0x04,0x42,0x04,0x40,0x02,0x40,0x02,0x40,
0x1F,0xC0,0x42,0x08,0x22,0x10,0x12,0x20,0x40,0x04,0x7F,0xFE,0x01,0x00,0x02,0x00,/*"究",28*/
0x10,0x00,0x09,0x02,0x2A,0xC6,0x34,0xAA,0x2C,0x92,0x24,0x98,0x24,0x94,0x24,0x94,
0x27,0xA6,0x24,0x24,0xE4,0x20,0x04,0x20,0x0F,0xFE,0x20,0x24,0x30,0x28,0x40,0x20,/*"诚",29*/
0x00,0x00,0x12,0x08,0x13,0xF8,0x12,0x08,0x12,0x08,0x12,0x08,0x13,0xF8,0x10,0x00,
0x93,0xF8,0x50,0x00,0x33,0xF8,0x30,0x00,0x17,0xFE,0x18,0x40,0x0C,0x60,0x08,0x80,/*"信",30*/

//============================================================================
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
发表于 2010-5-11 02:26 | 显示全部楼层
应该可以改的.

我的想法:把16行分为两次扫描.
上8行时列数据往上面的595送.
下8行时列数据往下面的595送.

程序改动应该比较大
发表于 2010-5-11 10:10 | 显示全部楼层
那就是8扫的?应该很亮吧,
发表于 2010-5-11 10:14 | 显示全部楼层
本帖最后由 litchiate 于 2010-5-11 10:15 编辑
应该可以改的.

我的想法:把16行分为两次扫描.
上8行时列数据往上面的595送.
下8行时列数据往下面的595 ...
yanjian 发表于 2010-5-11 02:26 https://www.yleee.com.cn/images/common/back.gif


要改几个函数了  回家后去看看。
 楼主| 发表于 2010-5-11 10:45 | 显示全部楼层
本帖最后由 shqi2003 于 2010-5-11 10:48 编辑
那就是8扫的?应该很亮吧,
litchiate 发表于 2010-5-11 10:10 https://www.yleee.com.cn/images/common/back.gif



    这个是半室外屏,外观和3MM的模块一模一样,但是里面是用双管LED芯片。列驱动采用MBI5016芯片。
发表于 2010-5-11 12:45 | 显示全部楼层
由8片595以16X8的方式,一根数据线完成64列扫描。现在有一款点阵屏,是有2组8片595以8X8的方式方式完成64列扫描,

你先在硬件上把595的输出输入连起来,这样扫描的顺序就变化了,怎么变化法,你根据你的硬件自己想,然后两种点阵屏还是十六选一。驱动接口应该一致。

在不改变字库格式的情况下,你想一下,另外做两个个函数:
一个是取【8片595以16X8】那块的,按一定方式读出字库行数据,然后十六选一发送出去。
一个是取【2组8片595以8X8的方式】那块的,按一定方式读出字库行数据,然后十六选一发送出去。
这样你的整个程序结构就没有改变。

点阵屏其实只要自己调试好一套程序,各种特效。我一般都是做好几个特效程序,发送显示三角形啊,逐行扫描,慢慢由上显示到下等等。全亮等等,好判断点阵屏的硬件结构。
以后有什么不同的板子,都很方便修改过去。
发表于 2010-5-11 20:56 | 显示全部楼层
8_scan.rar (21.06 KB, 下载次数: 433)

试试这个..  原来是用串口的?  8扫不好用, 给改掉了.  

不知数据顺序对不对.

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-4-28 16:42 , Processed in 0.052964 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表