微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 新人求解答!关于用51驱动两块16*64点阵屏的。

新人求解答!关于用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;
                }
        }

首先确保一个显示屏的时候可以正常工作,然后再试试级联时候能不能正常显示。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top