找回密码
 立即注册
查看: 599|回复: 0

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

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-05-07 08:04:39

17

主题

65

回帖

1674

积分

金牌会员

积分
1674
发表于 2023-11-24 21:47:40 | 显示全部楼层 |阅读模式
本帖最后由 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多个汉字,会读就够了。
二、源码
  1. #include <STC89C5xRC.H>
  2. #include <intrins.h>
  3. #include <absacc.h>
  4. #define FLASH_ADDR_BASE 0x0000
  5. sbit SH_CP = P1^5;
  6. sbit DS = P2^7;
  7. sbit ST_CP = P1^6;
  8. sbit SST29EE020_CE = P3^4;        //SST29EE020,0有效
  9. //sbit SST29EE020_WE = P3^6;        //不用定义,系统自动控制
  10. //sbit SST29EE020_OE = P3^7;        //不用定义,系统自动控制
  11. sbit A17=P3^3;              //SST29EE020 的高2位
  12. sbit A16=P3^2;              //SST29EE020 的高2位
  13. typedef unsigned int Uint16;
  14. typedef unsigned char Uint8;
  15. unsigned char xdata Table_BUFF[128];
  16. Uint16 iHZ=0;
  17. void delayms(unsigned int m)
  18. {
  19.         int i,j;
  20.         for(i=0; i<m; i++)
  21.                 for(j=0; j<120; j++);
  22. }
  23. void HC595(unsigned char dat)
  24. {
  25.         unsigned char j;
  26.         for(j=0;j<8;j++)
  27.         {
  28.                 SH_CP = 0;        //为移位准备
  29.                 DS = dat & 0x01;        //先低位
  30.                 dat=dat>>1;
  31.                 SH_CP =1;          //上升沿,移位
  32.         }
  33. }
  34. void Matrix16x16(unsigned char num)
  35. {
  36.         unsigned char k,i;
  37.         unsigned int m,n;
  38.         unsigned char Char_num=num*32;
  39.         Char_num=4;
  40.         for(m=0;m<Char_num;m++)
  41.         {
  42.                 for(n=0;n<32;n++)
  43.                 {
  44.                         for(k=0;k<16;k++)
  45.                         {
  46.                                 P1=0xff;
  47.                                 for(i=0;i<num;i++)
  48.                                 {
  49.                                         HC595(~Table_BUFF[32*i+2*k+1]);                //半部分
  50.                                         HC595(~Table_BUFF[32*i+2*k+0]);                //半部分
  51.                                 }
  52.                                 ST_CP = 0;
  53.                                 ST_CP = 1; //并行输出
  54.                                 P1=k;
  55.                         }
  56.                 }
  57.         }
  58. }
  59. Uint8 FlashRead(bit a17,bit a16,Uint16 offset)
  60. {
  61.         Uint16 dat;
  62.         
  63.         //SST29EE020_CE=0;        //片选有效
  64.         A17=a17;
  65.         A16=a16;
  66.         //dat=XBYTE[FLASH_ADDR_BASE|offset];
  67.     dat=XBYTE[FLASH_ADDR_BASE+offset];
  68.         //SST29EE020_CE=1; //片选失效
  69.         return dat;
  70. }
  71. void prepareBuff()
  72. {
  73.         unsigned char i;
  74.         for(i=0;i<128;i++)
  75.                 Table_BUFF[i]=FlashRead(1,1,iHZ++);
  76. }
  77. void main(){
  78.     SST29EE020_CE=0;        //一直有效
  79.         while(1){
  80.                 prepareBuff();
  81.                 Matrix16x16(4);
  82.                 delayms(100);
  83.         }
  84. }
复制代码

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


09e6b7f901374397a8aeb8499e75f790.jpg
6d547d2435804af09730a0009680b7b8.jpg
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-7 13:31 , Processed in 0.117740 second(s), 48 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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