sujingliang 发表于 2023-11-24 21:39:39

STC89C52RC 驱动16x64LED点阵模块驱动记录(一)


一、背景
半年前某宝上购得LED点阵驱动板:



模块显示面板由16个8*8点阵屏拼为16x64点阵,主控芯片为STC89C52,行扫描为1个74HC154(4-16译码器),列扫描为8个74HC595(8位串行输入、并行输出的位移缓存器)。板上还有1块flash存储芯片sst29ee020(256k*8,感觉是字库),配合它工作的是74hc573锁存器(隔离sst29ee020输入输出,复用MCU IO);另外还有1个DS1302时钟芯片。

二、源码

#include <STC89C5xRC.H>

sbit SH_CP = P1^5;
sbit DS = P2^7;
sbit ST_CP = P1^6;


//PCtoLCD2002
//
unsigned char code Table_row[] = {


//这个调了好久,现在贴的不知道是不是实际跑的字模了
//阳码,顺向,逐行式,C51,左右反转
0xFE,0xFF,0xFE,0xFF,0xFE,0xC0,0xC0,0xDF,0xDF,0x5F,0xEF,0x6D,0xFD,0xAB,0xFD,0xD7,
0xFD,0xF7,0xFA,0xEB,0xFA,0xDB,0xF7,0x5D,0xF7,0x7E,0xEF,0xBF,0xDF,0xDF,0xBF,0xEF,/*"欢",0*/
0xFF,0xFF,0xFE,0xFB,0xC3,0x37,0xDB,0xB7,0xDB,0xBF,0xDB,0xBF,0xDB,0xB0,0xDB,0xB7,
0xDB,0xB7,0xD2,0xB7,0xEB,0x37,0xFB,0xB7,0xFB,0xF7,0xFB,0xEB,0x80,0x1D,0xFF,0xFF,/*"迎",1*/
0xFF,0x7F,0xEF,0x7B,0xEF,0x77,0xF7,0x6F,0xFB,0x6F,0xFF,0x7F,0x80,0x00,0xFD,0xDF,
0xFD,0xDF,0xFD,0xDF,0xFD,0xDF,0xBD,0xEF,0xBD,0xEF,0xBD,0xF7,0x83,0xFB,0xFF,0xFC,/*"光",2*/
0xFE,0xEF,0xFE,0xEF,0xFE,0xEF,0x80,0x6D,0xFD,0x6D,0xFB,0xAD,0xFB,0xCD,0xFF,0xED,
0xC0,0x6D,0xDB,0x6D,0xDB,0x6D,0xDB,0x6D,0xDB,0x6D,0xC0,0x6F,0xDF,0x6F,0xFF,0xEF,/*"临",3*/

};

/*
void delayms(unsigned int m)
{
        int i,j;
        for(i=0; i<m; i++)
                for(j=0; j<120; j++);
}
*/

void HC595(unsigned char dat)
{
        unsigned char j;
        for(j=0;j<8;j++)
        {
                SH_CP = 0;        //为移位准备
                DS = dat & 0x01;        //先低位
                dat=dat>>1;
                SH_CP =1;        //上升沿,移位
        }
}


void Matrix16x16(unsigned char num)
{
        unsigned char k,i;
        unsigned int m,n;
        unsigned char Char_num=num*32;
       
        for(m=0;m<Char_num;m++)    //为移动预留
        {
                for(n=0;n<16;n++)//控制显示速度,防止闪烁
                {
                        for(k=0;k<16;k++)        //行扫描
                        {
                                for(i=0;i<num;i++)   //控制第几个字
                                {
                                        HC595(Table_row[(32*i+2*k+1)]);                //
                                        HC595(Table_row[(32*i+2*k+0)]);                //                                                                                                       
                          }
                          ST_CP = 0;
                          ST_CP = 1; //并行输出
                          //P1=k;    //P1低4位为74HC154输入,高4位未使用
                P1=16-k;    //从左往右显示
                          //delayms(2);
                        }
                }
        }
}

void main(){
        while(1){
                Matrix16x16(4);
        }
}



文章内容成文于半年前,先发于个人blog。
听说发文可以得芯愿,换MCU,^-^{:titter:}。
页: [1]
查看完整版本: STC89C52RC 驱动16x64LED点阵模块驱动记录(一)