久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5323|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

求一段STC8單片機(jī)系列的EEPROM的程序參考學(xué)習(xí)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
新手初學(xué)單片機(jī),前期進(jìn)度正常,但到了EEPROM時(shí)瞬間卡殼了,網(wǎng)上找資料找教程始終不得要領(lǐng)。冒昧來(lái)此求助。
如遇大家?guī)椭粍俑屑ぁ?/font>

想求一段單獨(dú)的EEPROM的讀寫(xiě)及保存的C程序來(lái)參考學(xué)習(xí)。
如下
STC8F2K16S2這個(gè)芯片為例吧(手頭上有這個(gè)片子)。
一個(gè)共陰的數(shù)碼管,一位或者四位都行,這個(gè)不重要
不去考慮硬件電路,比如上拉或者限流電阻等,。
就簡(jiǎn)單的將數(shù)碼管管腳接到某段IO上,比如P2端口。
外部EEPROM的各種操作簡(jiǎn)單通過(guò)三個(gè)或四個(gè)按鍵來(lái)實(shí)現(xiàn)吧,比如:一個(gè)設(shè)置鍵、一個(gè)增加鍵、一個(gè)移位鍵吧。這幾個(gè)鍵隨便接某幾個(gè)IO即可。
通過(guò)設(shè)置鍵進(jìn)EEPROM讀,增加配合移位健來(lái)寫(xiě)操作,最后設(shè)置鍵保存修改后的數(shù)據(jù)即可。
比如設(shè)置兩個(gè)需要讀寫(xiě)的參數(shù)AAABBB,令AAA初始值為1,BBB初始值為2,AAABBB的范圍都是0~9即可

不知道有沒(méi)有師傅能耽誤些時(shí)間給一段參考學(xué)習(xí)的程序。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:476909 發(fā)表于 2019-8-19 15:30 | 只看該作者
忘了一點(diǎn),最好是用STC的內(nèi)部EEPROM
回復(fù)

使用道具 舉報(bào)

板凳
ID:401564 發(fā)表于 2019-8-20 08:15 | 只看該作者
單片機(jī)的數(shù)據(jù)手冊(cè)都是有例程的,你可以看一下數(shù)據(jù)手冊(cè)的,C和匯編都有,但如果你說(shuō)你看不明白,那就沒(méi)有辦法了
回復(fù)

使用道具 舉報(bào)

地板
ID:213173 發(fā)表于 2019-8-20 09:34 | 只看該作者
一時(shí) 發(fā)表于 2019-8-19 15:30
忘了一點(diǎn),最好是用STC的內(nèi)部EEPROM

基于STC官方示例給你寫(xiě)了一個(gè)內(nèi)置EEPROM鍵控單字節(jié)測(cè)試程序,0~9共陰單數(shù)碼管靜態(tài)顯示。初始值5,每次操作后保存數(shù)據(jù),斷電后重啟顯示最后的操作數(shù)據(jù)。端口定義根據(jù)實(shí)際電路自行修改。
  1. #include "reg51.h"
  2. #include "intrins.h"

  3. //本測(cè)試工作頻率為11.0592MHz

  4. /***********聲明特殊功能寄存器地址*************/
  5. sfr     IAP_DATA    =   0xC2;
  6. sfr     IAP_ADDRH   =   0xC3;
  7. sfr     IAP_ADDRL   =   0xC4;
  8. sfr     IAP_CMD     =   0xC5;
  9. sfr     IAP_TRIG    =   0xC6;
  10. sfr     IAP_CONTR   =   0xC7;

  11. /******CPU的等待時(shí)間 按晶振頻率選用************/
  12. #define WT_30M          0x80
  13. #define WT_24M          0x81
  14. #define WT_20M          0x82
  15. #define WT_12M          0x83
  16. #define WT_6M           0x84
  17. #define WT_3M           0x85
  18. #define WT_2M           0x86
  19. #define WT_1M           0x87

  20. sbit key1=P1^0;
  21. sbit key2=P1^1;

  22. unsigned char code table[]={                                        //共陰數(shù)碼管段碼
  23.         0x3f,0x06,0x5b,0x4f,0x66,
  24.         0x6d,0x7d,0x07,0x7f,0x6f};
  25. //unsigned char table1[10];                                                //數(shù)據(jù)緩存數(shù)組

  26. char num;                                                                           //定義一個(gè)操作變量

  27. /*----------------------------
  28.         關(guān)閉IAP功能
  29. ----------------------------*/
  30. void IapIdle()
  31. {
  32.     IAP_CONTR = 0;                              //關(guān)閉IAP功能
  33.     IAP_CMD = 0;                                //清除命令寄存器
  34.     IAP_TRIG = 0;                               //清除觸發(fā)寄存器
  35.     IAP_ADDRH = 0x80;                           //將地址設(shè)置到非IAP區(qū)域
  36.     IAP_ADDRL = 0;
  37. }
  38. /*----------------------------
  39. 從ISP/IAP/EEPROM區(qū)域讀取一字節(jié)
  40. ----------------------------*/
  41. char IapRead(int addr)
  42. {
  43.     char dat;

  44.     IAP_CONTR = WT_12M;                         //使能IAP
  45.     IAP_CMD = 1;                                //設(shè)置IAP讀命令
  46.     IAP_ADDRL = addr;                           //設(shè)置IAP低地址
  47.     IAP_ADDRH = addr >> 8;                      //設(shè)置IAP高地址
  48.     IAP_TRIG = 0x5a;                            //寫(xiě)觸發(fā)命令(0x5a)
  49.     IAP_TRIG = 0xa5;                            //寫(xiě)觸發(fā)命令(0xa5)
  50.     _nop_();
  51.     dat = IAP_DATA;                             //讀IAP數(shù)據(jù)
  52.     IapIdle();                                  //關(guān)閉IAP功能

  53.     return dat;
  54. }
  55. /*-------------------------------
  56. 寫(xiě)一字節(jié)數(shù)據(jù)到ISP/IAP/EEPROM區(qū)域
  57. -------------------------------*/
  58. void IapProgram(int addr, char dat)
  59. {
  60.     IAP_CONTR = WT_12M;                         //使能IAP
  61.     IAP_CMD = 2;                                //設(shè)置IAP寫(xiě)命令
  62.     IAP_ADDRL = addr;                           //設(shè)置IAP低地址
  63.     IAP_ADDRH = addr >> 8;                      //設(shè)置IAP高地址
  64.     IAP_DATA = dat;                             //寫(xiě)IAP數(shù)據(jù)
  65.     IAP_TRIG = 0x5a;                            //寫(xiě)觸發(fā)命令(0x5a)
  66.     IAP_TRIG = 0xa5;                            //寫(xiě)觸發(fā)命令(0xa5)
  67.     _nop_();
  68.     IapIdle();                                  //關(guān)閉IAP功能
  69. }
  70. /*----------------------------
  71. ISP/IAP/EEPROM扇區(qū)擦除
  72. ----------------------------*/
  73. void IapErase(int addr)
  74. {
  75.     IAP_CONTR = WT_12M;                         //使能IAP
  76.     IAP_CMD = 3;                                //設(shè)置IAP擦除命令
  77.     IAP_ADDRL = addr;                           //設(shè)置IAP低地址
  78.     IAP_ADDRH = addr >> 8;                      //設(shè)置IAP高地址
  79.     IAP_TRIG = 0x5a;                            //寫(xiě)觸發(fā)命令(0x5a)
  80.     IAP_TRIG = 0xa5;                            //寫(xiě)觸發(fā)命令(0xa5)
  81.     _nop_();                                    //
  82.     IapIdle();                                  //關(guān)閉IAP功能
  83. }

  84. void keyscan()                                                                        //按鍵掃描程序
  85. {
  86.         static bit key1_sign=0;                                                //按鍵1自鎖標(biāo)志
  87.         static bit key2_sign=0;                                                //按鍵2自鎖標(biāo)志
  88.         static unsigned char count1=0;                                //計(jì)數(shù)變量1                       
  89.         static unsigned char count2=0;                                //計(jì)數(shù)變量2
  90.         if(!key1)                                                                        //檢測(cè)按鍵1如果為0
  91.         {
  92.                 if((count1++>=250)&&(key1_sign==0))
  93.                 {                       
  94.                         key1_sign=1;                                                //按鍵自鎖標(biāo)志1置1
  95.                         if(num<10)
  96.                                 num++;
  97.                         IapErase(0x0400);                                        //扇區(qū)擦除(扇區(qū)首地址)
  98.                         IapProgram(0x0400, num);                        //寫(xiě)入一字節(jié)(地址,數(shù)據(jù))
  99.                 }
  100.         }
  101.         else                                                                                //按鍵抬起
  102.         {
  103.                 key1_sign=0;                                                        //按鍵自鎖標(biāo)志1清0
  104.                 count1=0;                                                                //消抖計(jì)數(shù)1清0
  105.         }
  106.         if(!key2)                                                                        //檢測(cè)按鍵2如果為0
  107.         {
  108.                 if((count2++>=250)&&(key2_sign==0))
  109.                 {                       
  110.                         key2_sign=1;                                                //按鍵自鎖標(biāo)志2置1
  111.                         if(num>0)
  112.                         {
  113.                                 num--;
  114.                                 IapErase(0x0400);                                //扇區(qū)擦除(扇區(qū)首地址)
  115.                                 IapProgram(0x0400, num);                //寫(xiě)入一字節(jié)(地址,數(shù)據(jù))
  116.                         }
  117.                 }
  118.         }
  119.         else                                                                                //按鍵抬起
  120.         {
  121.                 key2_sign=0;                                                        //按鍵自鎖標(biāo)志2清0
  122.                 count2=0;                                                                //消抖計(jì)數(shù)2清0
  123.         }
  124. }

  125. void main()
  126. {
  127. //        unsigned char i;
  128.         num=IapRead(0x0400);                                                 //讀取一字節(jié)
  129.         if((num<0)||(num>9))                                                //超出范圍表示沒(méi)有存儲(chǔ)數(shù)據(jù)
  130.         {
  131.                 num=5;                                                                        //賦初值
  132.                 IapErase(0x0400);                                                //扇區(qū)擦除(扇區(qū)首地址自動(dòng)增量),擦除數(shù)據(jù)后全部復(fù)位是0xff
  133.                 IapProgram(0x0400, num);                                //寫(xiě)入一字節(jié)(地址,數(shù)據(jù))
  134. //                連續(xù)讀寫(xiě)最多512個(gè)字節(jié)
  135. //                for(i=0;i<10;i++)
  136. //                {
  137. //                        IapProgram(0x0400+i,table1[i]);                //連續(xù)寫(xiě)10個(gè)字節(jié)數(shù)據(jù)
  138. //                }
  139.         }
  140.         while(1)
  141.         {
  142.                 keyscan();                                                                //按鍵掃描
  143.                 P0=table[num];                                                        //數(shù)碼管顯示
  144.         }
  145. }

復(fù)制代碼

回復(fù)

使用道具 舉報(bào)

5#
ID:388197 發(fā)表于 2019-8-20 22:31 | 只看該作者
手冊(cè)里有例程的,就算看不明白,先照著葫蘆畫(huà)瓢,直接復(fù)制,運(yùn)行.然后慢慢琢磨修改,自然就明白了.
回復(fù)

使用道具 舉報(bào)

6#
ID:476909 發(fā)表于 2019-8-28 16:01 | 只看該作者
wulin 發(fā)表于 2019-8-20 09:34
基于STC官方示例給你寫(xiě)了一個(gè)內(nèi)置EEPROM鍵控單字節(jié)測(cè)試程序,0~9共陰單數(shù)碼管靜態(tài)顯示。初始值5,每次操 ...

謝謝您
回復(fù)

使用道具 舉報(bào)

7#
ID:602448 發(fā)表于 2019-9-17 09:19 | 只看該作者
Y_G_G 發(fā)表于 2019-8-20 08:15
單片機(jī)的數(shù)據(jù)手冊(cè)都是有例程的,你可以看一下數(shù)據(jù)手冊(cè)的,C和匯編都有,但如果你說(shuō)你看不明白,那就沒(méi)有辦法了

請(qǐng)問(wèn)數(shù)據(jù)手冊(cè)在哪下載
回復(fù)

使用道具 舉報(bào)

8#
ID:155507 發(fā)表于 2019-9-17 23:26 | 只看該作者
禿頭使者 發(fā)表于 2019-9-17 09:19
請(qǐng)問(wèn)數(shù)據(jù)手冊(cè)在哪下載

這里

http://www.stcmcudata.com/STC8F-DATASHEET/STC8.pdf

回復(fù)

使用道具 舉報(bào)

9#
ID:878287 發(fā)表于 2021-4-18 22:04 | 只看該作者
wulin 發(fā)表于 2019-8-20 09:34
基于STC官方示例給你寫(xiě)了一個(gè)內(nèi)置EEPROM鍵控單字節(jié)測(cè)試程序,0~9共陰單數(shù)碼管靜態(tài)顯示。初始值5,每次操 ...

謝謝!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线视频免费观看 | 少妇久久久 | 日本韩国电影免费观看 | 亚洲成人av| 中文字幕91av | 亚洲经典一区 | 亚洲激情在线观看 | 国产在线小视频 | 一区二区免费在线观看 | 一区二区三区四区在线 | 欧美日韩不卡在线 | 中文字幕亚洲一区 | 伊人一区 | 99精品99 | 国产线视频精品免费观看视频 | 亚洲va国产日韩欧美精品色婷婷 | 国产精品一区二区在线免费观看 | 亚洲精品福利在线 | 国产精品亚洲成在人线 | 成人福利电影 | 在线免费看黄 | 日韩一区二区三区四区五区六区 | 国产美女永久免费无遮挡 | 精品国产一区二区三区久久久四川 | 国精品一区 | 极情综合网 | 成人在线视频一区二区三区 | 亚洲精品国产电影 | 在线观看成年人视频 | 亚洲午夜在线 | 在线看片网站 | 国产精品视频 | 久久精品电影 | 免费午夜电影 | 欧洲色综合 | 久久久青草婷婷精品综合日韩 | 国产成人精品免高潮在线观看 | 成人网在线观看 | 久久久久久国产精品 | 久久国产一区二区 | 国产成人精品一区二区三区四区 |