#include
typedef unsigned char uchar; typedef unsigned int uint; typedef unsigned long ulong;
#define led_port P0 sbit dm=P2^3; sbit wm=P2^2; ulong a,v; //uchar a;
uchar temp1,temp2,temp3,temp4;
uchar code dxian[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码显示区0——9 uchar code wxian[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //选通哪位数码管控制位 uchar bcd[8]; void delay(uint t); void bin_bcd(); void smxs();
//掉电保持寄存器申明 sfr IAP_DATA=0xe2; sfr IAP_ADDRH=0xe3;
//数码管控制芯片段码控制位 //数码管控制芯片位码控制位
//数码管bcd码缓冲区 //延时函数声明
//bcd分离函数
//数码管显示函数
sfr IAP_ADDRL=0xe4; sfr IAP_CMD=0xe5; sfr IAP_TRIG=0xe6; sfr IAP_CONTR=0xe7;
#define CMD_IDLE
0
#define CMD_READ 1 #define CMD_PROGRAM #define CMD_ERASE 3
//定义Flash操作等待时间及允许IAP/ISP/EEPROM操作的常数 //#define ENABLE_IAP 0x82 #define ENABLE_IAP 0x83
//系统工作时钟<20MHZ
2
//系统工作时钟<40MHZ
#define IAP_ADDRESS 0x2000
void cc(uint addr);// 擦除某一扇区 void xcx(uint addr,uchar dat);// 写一字节 uchar dcx(uint addr);// 读一字节 void GB_IAP();//关闭IAP/IAP操作
void delay(uint t) { }
void smxs() {
while(--t);
}
uchar i;
for(i=0;i<8;i++) { }
led_port=0; dm=1; dm=0;
led_port=wxian[i]; wm=1; wm=0;
led_port=dxian[bcd[i]]; if(i==5)
led_port=led_port | 0x80; dm=1; dm=0;
delay(300);
void bin_bcd() {
bcd[0]=a/10000000; bcd[1]=a/1000000; bcd[2]=a/100000;
bcd[3]=(a0000)/10000; bcd[4]=(a000)/1000; bcd[5]=(a00)/100;
}
bcd[6]=(a0)/10; bcd[7]=(a0);
void xs32_8() { }
void xs8_32() {
a =
((ulong)(temp1)<<24)|((ulong)(temp2)<<16)|((ulong)(temp3)<<8)|temp4; }
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ 函数:主程序
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/ void main(void) {
uchar num;
temp1=(a>>24)&0xff; temp2=(a>>16)&0xff; temp3=(a>>8)&0xff; temp4=a&0xff;
/*测试Long型转char型是否正确成功*这里如果要验证请把void xs8_32()中的改成v然后调试哈就可以看出来/
/**********************************
a=99999999; xs32_8(); xs8_32();
*********************************/
/******测试存贮多个数据成功**********/
/*************************************************
cc(IAP_ADDRESS);
// 擦除第1个扇区(2000h~21FFh)
temp1++; temp2++; temp3++; temp4++;
a=temp1+temp2+temp3+temp4; temp1=dcx(IAP_ADDRESS); temp2=dcx(IAP_ADDRESS+1); temp3=dcx(IAP_ADDRESS+2); temp4=dcx(IAP_ADDRESS+3);
xcx(IAP_ADDRESS,temp1); xcx(IAP_ADDRESS+1,temp2); xcx(IAP_ADDRESS+2,temp3); xcx(IAP_ADDRESS+3,temp4);
// 对EEPROM区2002h写入
**************************************************/
temp1=dcx(IAP_ADDRESS); temp2=dcx(IAP_ADDRESS+1); temp3=dcx(IAP_ADDRESS+2); temp4=dcx(IAP_ADDRESS+3); num=dcx(IAP_ADDRESS+4);