有些單片機,如STC89C52RC等,帶有EEPROM,一般的同學很少用到這些存儲器,有點浪費資源。在我們的程序設計中,有時要在沒有字庫的設備上顯示內容,這時不得不在內存中開辟空間存儲字模,而且一般的CPU數據段很小,只有128個字節,因此稍多的數據就要存放在CODE段,使本來就不大的內存更顯緊張,這時如果我們把字模存放在EEPROM中,一來可以程序變得易讀,設計方便不少,二來可以節省空間,能編更長的程序,有不少好處。
本人就編一個程序,把簡單的6X8字符字模放在EEPROM的前二個扇區內,使用的時候讀出來用,使用程序精簡不少,供大家參考。
1、字模存入EEPROM的程序:
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit LED8x8_ser=P0^3;
- sbit LED8x8_sck=P0^4;
- sbit LED8x8_rck=P0^5;
- void delay(int ii){int i,j;for(i=0;i<ii;i++);}
- #include "EEPROM.h"
- ......
- //==============================================================
- void LED8X8_SendByte(uchar cc)
- {uchar c=cc;int i;
- for(i=0;i<8;i++){if(c&0x01)LED8x8_ser=1;else LED8x8_ser=0;c>>=1;LED8x8_sck=0;LED8x8_sck=1;}
- LED8x8_rck=0;LED8x8_rck=1;
- }
- //==============================================================
- void LED8X8_PutChar(char ci)
- {int i,j;
- for(i=0;i<100;i++){for(j=0;j<6;j++){LED8X8_SendByte(F6x8[ci-0x20][j]);delay(50);LED8X8_SendByte(0);P0=j;}}
- }
- //=============================================================
- void LED8X8_PutStr(char *str)
- {int i=0;
- while(str[i]!=0){LED8X8_PutChar(str[i]);i++;}
- }
- //=============================================================
- void Char6X8_Dat_Init()
- {char i,j,k;
- for(k=0;k<2;k++)
- {cc(0x2000+k*0x200);
- for(i=0;i<85;i++)
- {for(j=0;j<6;j++){xcx(0x2000+k*0x200+i*6+j,F6x8[k*85+i][j]);}
- }
- }
- }
- //==========================================================
- main()
- {Char6X8_Dat_Init(); while(1)LED8X8_PutStr("Char6X8_Dat_Init Finish!");
- }
復制代碼
2、從EEPROM讀取字模顯示的程序
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit LED8x8_ser=P0^3;
- sbit LED8x8_sck=P0^4;
- sbit LED8x8_rck=P0^5;
- void delay(int ii){int i,j;for(i=0;i<ii;i++);}
- #include "EEPROM.h"
- void LED8X8_SendByte(uchar cc)
- {uchar c=cc;int i;
- for(i=0;i<8;i++){if(c&0x01)LED8x8_ser=1;else LED8x8_ser=0;c>>=1;LED8x8_sck=0;LED8x8_sck=1;}
- LED8x8_rck=0;LED8x8_rck=1;
- }
- //=============================================================
- void LED8X8_PutChar_EPROM(int char_in)
- {int i=0,j=0;unsigned char buffer[7];
- char_in-=0x20;
- if(char_in<=84)for(i=0;i<6;i++)buffer[i]=dcx(0x2000+char_in*6+i);
- else{for(i=0;i<6;i++)buffer[i]=dcx(0x2200+(char_in-85)*6+i);}
- for(i=0;i<100;i++)
- {for(j=0;j<6;j++)
- {LED8X8_SendByte(buffer[j]);delay(50);
- LED8X8_SendByte(0);P0=j;
- }
- }
- }
- //=============================================================
- void LED8X8_PutStr_EPROM(char *str)
- {int i=0;
- while(str[i]!=0){LED8X8_PutChar_EPROM(str[i]);i++;}
- }
- //===================================================================================
- main()
- {LED8X8_PutStr_EPROM("XYZxyz");
- }
復制代碼
由于帶EEPROM的CPU不好仿真,本文沒法仿真給同學們觀看效果。
完全程序在附件中:
P9C.zip
(38.56 KB, 下載次數: 44)
2019-4-4 13:45 上傳
點擊文件名下載附件
程序 下載積分: 黑幣 -5
|