sujingliang 发表于 2023-11-24 21:47:40

STC89C52RC驱动16x64LED点阵模块驱动记录(三)SST29EE020字库读取并显示

本帖最后由 sujingliang 于 2023-11-24 22:09 编辑

一、读取外部存储SST29EE020
      一开始被SST29EE020吓到了,这是一个256k*8的闪存,或者是EEPROM,反正是用来做存储。书上说51直接访问外部RAM最大到64k,所以无疑不能直接访问到256k的地址。

      加之本人就是二把刀,连51的书都没看,内部存储、外部存储如何访问完全没概念。SST29EE020的控制总线引脚CE、WE、OE控制云里雾里,看了好多资料也没有给C语言访问256k存储的例程。倒是找到汇编的例子,好吧,确实看不太懂。

      今天重读51的基本教程、还看了一个教学视频,发现WE,OE其实是系统自动管理的,只要适当的时候设一下CE就OK。对于超出64k的部分,人工设一下17位,18位高低电平,就完成了高位的设置,然后用XBYTE直接读低16位地址就可以了,原来如此简单。没打算研究怎么写SST29EE020。因为这个SST29EE020是字库,里面有6000多个汉字,会读就够了。
二、源码
#include <STC89C5xRC.H>
#include <intrins.h>
#include <absacc.h>

#define FLASH_ADDR_BASE 0x0000

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



sbit SST29EE020_CE = P3^4;      //SST29EE020,0有效
//sbit SST29EE020_WE = P3^6;      //不用定义,系统自动控制
//sbit SST29EE020_OE = P3^7;      //不用定义,系统自动控制
sbit A17=P3^3;            //SST29EE020 的高2位
sbit A16=P3^2;            //SST29EE020 的高2位


typedef unsigned int Uint16;
typedef unsigned char Uint8;

unsigned char xdata Table_BUFF;

Uint16 iHZ=0;


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;
      Char_num=4;
      for(m=0;m<Char_num;m++)
      {
                for(n=0;n<32;n++)
                {
                        for(k=0;k<16;k++)
                        {
                              P1=0xff;
                              for(i=0;i<num;i++)
                              {
                                        HC595(~Table_BUFF);                //半部分
                                        HC595(~Table_BUFF);                //半部分
                              }
                              ST_CP = 0;
                              ST_CP = 1; //并行输出
                              P1=k;
                        }
                }
      }
}



Uint8 FlashRead(bit a17,bit a16,Uint16 offset)
{
      Uint16 dat;
      
      //SST29EE020_CE=0;      //片选有效
      A17=a17;
      A16=a16;

      //dat=XBYTE;
    dat=XBYTE;

      //SST29EE020_CE=1; //片选失效

      return dat;
}



void prepareBuff()
{
      unsigned char i;
      for(i=0;i<128;i++)
                Table_BUFF=FlashRead(1,1,iHZ++);
}

void main(){
    SST29EE020_CE=0;      //一直有效
      while(1){
                prepareBuff();
                Matrix16x16(4);
                delayms(100);
      }
}

文章内容成文于半年前,先发于个人blog。
听说发文可以得芯愿,换MCU,^-^{:titter:}。


页: [1]
查看完整版本: STC89C52RC驱动16x64LED点阵模块驱动记录(三)SST29EE020字库读取并显示