欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
STC12CXX單片機片內EEPROM開機次數顯示
[打印本頁]
作者:
騰飛的龍
時間:
2016-7-28 09:59
標題:
STC12CXX單片機片內EEPROM開機次數顯示
STC12C5A60S2單片機片內EEPROM應用
/*************************************************
功能:用STC12C5A60S2內部EEPROM記開機次數
數碼管顯示
根據慧靜電子改寫
單片機:STC12C5A60S2
晶 振:11.0592M
作者 :蘇義江
時間:2015-7-22
*****************************************************/
#include<reg52.h>
#include"stc12ceeprom.h"
//STC5Axx 系列 EEPROM 測試起始地址
#define DATA_flash_START_address 0x0000
sbit wei=P2^7;
sbit duan=P2^6;
uchar t,a=0,gewei,shiwei,bai;
//uchar code table[]="0123456789";
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,
0xa1,0x86,0x8e,0x89};//0到H共陽段碼
void delay(uint x)
{
uint z,j;
for(z=x;z>0;z--)
for(j=800;j>0;j--);
}
void main()
{
delay(10);
// sector_Erase(0x0000);//擦除扇區
a=Byte_read(0x0000);//讀一個字節 從起始地址開始讀
a++;//計數變量自加1
if(a>=999)//加到999
a=0;
sector_Erase(0x0000);//擦除扇區
Byte_write(0x0000,a);//字節編程
gewei=a%10;
shiwei=a%100/10;
bai=a/100;
while(1)
{
wei=1;
P0=0xfe;
wei=0;
P0=0xFF;
duan=1;
P0=table[bai];
duan=0;
P0=0xFF;
delay(10);
wei=1;
P0=0xfd;
wei=0;
P0=0xFF;
duan=1;
P0=table[shiwei];
duan=0;
P0=0xFF;
delay(10);
wei=1;
P0=0xfb;
wei=0;
P0=0xFF;
duan=1;
P0=table[gewei];
duan=0;
P0=0xFF;
delay(10);
}
}
復制代碼
STC12CXX EEPROM.H文件
#ifndef __STC12CEEPROM_H__
#define __STC12CEEPROM_H__
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//用于STC12C2052
//sfr IAP_DATA =0XE2;
//sfr IAP_ADDRH =0XE3;
//sfr IAP_ADDRL =0XE4;
//sfr IAP_CMD =0XE5;
//sfr IAP_TRIG =0XE6;
//sfr IAP_CONTR =0XE7;
//#define WD1 0X46
//#define WD2 0XB9
//用于STC12C5A60S2
sfr IAP_DATA =0XC2;
sfr IAP_ADDRH =0Xc3;
sfr IAP_ADDRL =0Xc4;
sfr IAP_CMD =0Xc5;
sfr IAP_TRIG =0Xc6;
sfr IAP_CONTR =0Xc7;
#define WD1 0X5A
#define WD2 0XA5
//定義Flash 操作等待時間及允許IAP/ISP/EEPROM 操作的常數
//#define ENABLE_ISP 0X80//晶振小于30M
//#define ENABLE_ISP 0X81//晶振小于24M
#define ENABLE_ISP 0X82//晶振小于20M
//#define ENABLE_ISP 0X83//晶振小于12M
//#define ENABLE_ISP 0X84//晶振小于6M
//#define ENABLE_ISP 0X85//晶振小于3M
uchar Byte_read(uint add);//讀一字節 調用前打開IAP
void Byte_write(uint add,uchar ch);//字節編程調用前打開IAP
void sector_Erase(uint add);//擦除扇區
void IAP_Disable();//關閉IAP
uchar Byte_read(uint add)//讀一字節 調用前打開IAP
{
IAP_DATA=0X00;
////打開 IAP 功能, 設置Flash 操作等待時間
IAP_CONTR=ENABLE_ISP;
IAP_CMD =0X01;
IAP_ADDRH=add/256;
IAP_ADDRL =add%256;
IAP_TRIG =WD1;//先送 5Ah,再送A5h 到ISP/IAP 觸發寄存器
IAP_TRIG =WD2;//送完A5h 后,ISP/IAP 命令立即被觸發起動
_nop_();_nop_();
IAP_Disable();//關閉IAP
return (IAP_DATA);
}
//字節編程調用前打開IAP 寫
void Byte_write(uint add,uchar ch)
{
IAP_CONTR =ENABLE_ISP;
IAP_CMD =0X02;//IAP/ISP/EEPROM 字節編程命令
IAP_ADDRH=add/256;//設置目標單元地址的高8 位地址
IAP_ADDRL =add%256;//設置目標單元地址的低8 位地址
IAP_DATA=ch;//要編程的數據先送進IAP_DATA 寄存器
IAP_TRIG =WD1;
IAP_TRIG =WD2;
_nop_();_nop_();
IAP_Disable();
}
//擦除扇區
void sector_Erase(uint add)
{
IAP_CONTR =ENABLE_ISP;
IAP_CMD =0X03;//IAP/ISP/EEPROM 扇區擦除命令
IAP_ADDRH=add/256;
IAP_ADDRL =add%256;
IAP_TRIG =WD1;
IAP_TRIG =WD2;
_nop_();_nop_();
IAP_Disable();
}
void IAP_Disable()
{
IAP_CONTR =0;
IAP_CMD =0;
IAP_TRIG =0;
IAP_ADDRH=0;
IAP_ADDRL =0;
}
#endif
復制代碼
作者:
mobicity
時間:
2019-12-30 20:53
學習,學習,感謝
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1