1、/**存贮多个变量两个long型和一个char型(long型的转换成4个char型)用两个不同的按键控制显示存贮的值***/
#include
2、 sbit gn1=P2^1; ulong a,a1,v,v1; //uchar a; uchar temp1,temp2,temp3,temp4,temp5,temp6,temp7,temp8; bit bz1,bz2; 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];
3、 //数码管bcd码缓冲区 void delay(uint t); //延时函数声明 void bin_bcd(); //bcd分离函数 void smxs(); //数码管显示函数 void anjian(); //掉电保持寄存器申明 sfr IAP_DATA=0xe2; sfr IAP_ADDRH=0xe3; sfr IAP_ADDRL=0xe4; sfr IAP_CMD=0xe5; sfr IAP_TRIG=0xe6; sfr IAP_
4、CONTR=0xe7; #define CMD_IDLE 0 #define CMD_READ 1 #define CMD_PROGRAM 2 #define CMD_ERASE 3 //定义Flash操作等待时间及允许IAP/ISP/EEPROM操作的常数 //#define ENABLE_IAP 0x82 //系统工作时钟<20MHZ #define ENABLE_IAP 0x83 //系统工作时钟<40MHZ #define IAP_ADDRESS 0x2000 #define IAP_ADDRESS1 0x2200 void cc(uint ad
5、dr);// 擦除某一扇区 void xcx(uint addr,uchar dat);// 写一字节 uchar dcx(uint addr);// 读一字节 void GB_IAP();//关闭IAP/IAP操作 void delay(uint t) { while(--t); } void smxs() { uchar i; for(i=0;i<8;i++) { led_port=0; dm=1; dm=0; led_port=wxian[i]; wm=1; wm=
6、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]=(a%100000)/10000; bcd[4]=(a%10000)/1000; bcd[5]=(a%1000)/100; bcd[6]=(a%1
7、00)/10; bcd[7]=(a%100)%10; } void bin_bcd1() { bcd[0]=a1/10000000; bcd[1]=a1/1000000; bcd[2]=a1/100000; bcd[3]=(a1%100000)/10000; bcd[4]=(a1%10000)/1000; bcd[5]=(a1%1000)/100; bcd[6]=(a1%100)/10; bcd[7]=(a1%100)%10; } void xs32_8() { temp1=(a>>24)&0xff; temp2=(a>>
8、16)&0xff; temp3=(a>>8)&0xff; temp4=a&0xff; } void xs8_32() { a = ((ulong)(temp1)<<24)|((ulong)(temp2)<<16)|((ulong)(temp3)<<8)|temp4; } void xs32_81() { temp5=(a1>>24)&0xff; temp6=(a1>>16)&0xff; temp7=(a1>>8)&0xff; temp8=a1&0xff; } void xs8_321() { a1 = ((ulong)(temp5
9、)<<24)|((ulong)(temp6)<<16)|((ulong)(temp7)<<8)|temp8; } /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ 函数:主程序 ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/ void main(void) { uchar num; temp1=dcx(IAP_ADDRESS); temp2=dcx(IAP_ADDRESS+1); temp3=dcx(IAP_ADDRESS+2); temp4=dcx(IAP_ADDRESS+3); num=dcx(IAP_AD
10、DRESS+4); temp5=dcx(IAP_ADDRESS1+5); temp6=dcx(IAP_ADDRESS1+6); temp7=dcx(IAP_ADDRESS1+7); temp8=dcx(IAP_ADDRESS1+8); num++; a=222222+num; a1=333333+num; xs32_81(); //long型转成char型 xs32_8(); cc(IAP_ADDRESS); // 擦除第1个扇区(2000h~21FFh) xcx(IAP_ADDRESS,temp1); xcx(IAP_ADDRES
11、S+1,temp2); // 对EEPROM区2001h写入 xcx(IAP_ADDRESS+2,temp3); xcx(IAP_ADDRESS+3,temp4); xcx(IAP_ADDRESS+4,num); cc(IAP_ADDRESS1); xcx(IAP_ADDRESS1+5,temp5); xcx(IAP_ADDRESS1+6,temp6); xcx(IAP_ADDRESS1+7,temp7); xcx(IAP_ADDRESS1+8,temp8); xs8_32(); //char型转成long型 xs8_321(); w
12、hile(1) { anjian(); if(bz1==1) bin_bcd(); if(bz2==1) bin_bcd1(); smxs(); } } void anjian() { bit bzjia,bzjian,djia,djian; gn=1; gn1=1; //置1 djia=gn; //读状态 djian=gn1; if(djia!=1) if(bzjia!=1) { bzjia=1; bz1=1; bz2=0; } if(d
13、jia==1) bzjia=0; if(djian!=1) if(bzjian!=1) { bzjian=1; bz1=0; bz2=1; } if(djian==1) bzjian=0; } /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ 函数:擦除某一扇区(每个扇区512字节) 入口:addr = 某一扇区首地址 ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/ void cc(uint addr) { // 0x83(晶振<5M
14、) 0x82(晶振<10M) 0x81(晶振<20M) 0x80(晶振<40M) IAP_CONTR = ENABLE_IAP; // 打开 IAP 功能(IAPEN(IAP_CONTR.7)=1:允许编程改变Flash, 设置 Flash 操作等待时间。 IAP_CMD = CMD_ERASE; // 用户可以对"Data Flash/EEPROM区"进行扇区擦除 IAP_ADDRL = addr; // IAP/IAP操作时的地址寄存器低八位, IAP_ADDRH = addr>>8; //
15、 IAP/IAP操作时的地址寄存器高八位。 //EA =0; IAP_TRIG = 0x46; // 在IAPEN(IAP_CONTR.7)=1时,对IAP_TRIG先写入46h, IAP_TRIG = 0xB9; // 再写入B9h,IAP/IAP命令才会生效。 //_nop_(); GB_IAP(); // 关闭IAP/IAP } /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ 函数:写一字节 入口:addr = 扇区单元地址 , dat = 待写入数据 ┈┈
16、┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/ void xcx(uint addr,uchar dat) { IAP_CONTR = ENABLE_IAP; IAP_CMD = CMD_PROGRAM; // 用户可以对"Data Flash/EEPROM区"进行字节编程 IAP_ADDRL = addr; IAP_ADDRH = addr>>8; IAP_DATA = dat; // 数据进IAP_DATA //EA = 0; IA
17、P_TRIG = 0x46; IAP_TRIG = 0xB9; //_nop_(); GB_IAP(); // 关闭IAP/IAP } /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ 函数:读一字节 入口:addr = 扇区单元地址 出口:dat = 读出的数据 ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/ uchar dcx(uint addr) { uchar dat; IAP_CONTR = ENABLE_IAP;
18、 IAP_CMD = CMD_READ; // 用户可以对"Data Flash/EEPROM区"进行字节读 IAP_ADDRL = addr; IAP_ADDRH = addr>>8; //EA = 0; IAP_TRIG = 0x46; IAP_TRIG = 0xB9; //_nop_(); dat = IAP_DATA; // 取出数据 GB_IAP(); // 关闭IAP/IAP
19、 return dat; } /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ 函数:关闭IAP/IAP操作 ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/ void GB_IAP() { IAP_CONTR = 0; // 关闭IAP功能 IAP_CMD = 0; // 待机模式,无IAP操作 IAP_TRIG = 0; // 关闭IAP功能, 清与IAP有关的特殊功能寄存器 IAP_ADDRH = 0x80; IAP_ADDRL =0; }
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818