51hei論壇混這么多年,第一次發貼,搜索了下我們論壇有關這方面的帖子不多,決定發一個。本人不是科班出身,學的法律專業,單片機純屬自己愛好,所以不專業之處還請各位大俠包涵。
我用的是4位595驅動的數碼管作為數據顯示;
#include "STC15w408as.H"
#include "intrins.h"
#define U8 unsigned char
#define U16 unsigned int
#include "EEPROM.H" //這個文件在附件中可以下載
sbit DS=P1^2; //測試鍵
sbit SDA=P1^1; //595驅動數碼管
sbit CLK=P1^0;
sbit ST=P3^7;
U8 shuzi[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //數碼管編碼
void SEND_595(U8 D_dat) //向595發送一個字節
{ U8 i;
for(i=0;i<8;i++)
{ CLK = 0;
if(D_dat&0x80) {SDA=1;} else{SDA=0;}
D_dat<<=1;
CLK = 1;
}
}
void disp(U16 R_dat) //數碼管顯示
{ U8 ge,shi,bai,qian;
ge=R_dat%10;
shi=R_dat/10; shi=shi%10;
bai=R_dat/100; bai=bai%10;
qian=R_dat/1000;
SEND_595(shuzi[ge]);
SEND_595(shuzi[shi]);
SEND_595(shuzi[bai]);
SEND_595(shuzi[qian]);
ST=1;ST=0;
}
void main ()
{ DS=1;
while(1)
{IAP_READ(0x0001); // 讀取地址為0x0001里的數據
disp(IAP_READ_DAT); // 顯示地址為0x0001里的數據
if(DS==0)
{IAP_del(0x0001); // 擦除0x0001里的數據 (發現每次寫新的數據進去都要先擦除)
IAP_Write_DAT++; // 對原有的數據+1
IAP_Write(0x0001);} // 將新數據寫入地址為0x0001里
}
}
說明:DS鍵每低電平一次EEPROM的地址為0x0001里的數據就加1 ,顯示在數碼管上。
最重要的是斷電后,重新上電,剛才累加計數依然可以顯示出來,這就是EEPROM的作用!
不是很專業,只希望給剛玩單片機的朋友們一點點幫助!!!
全部資料51hei下載地址:
EEPROM測試.zip
(28.61 KB, 下載次數: 59)
2020-3-4 21:41 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|