1、/*存贮多个变量两个 long 型和一个 char 型(long 型的转换成 4 个 char 型)用两个不同的按键控制显示存贮的值*/#include #include typedef unsigned char uchar;typedef unsigned int uint;typedef unsigned long ulong;#define led_port P0 sbit dm=P23; /数码管控制芯片段码控制位sbit wm=P22; /数码管控制芯片位码控制位sbit gn=P20;sbit gn1=P21;ulong a,a1,v,v1;/uchar a;uchar temp
2、1,temp2,temp3,temp4,temp5,temp6,temp7,temp8;bit bz1,bz2;uchar code dxian=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/数码显示区 0-9uchar code wxian=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/选通哪位数码管控制位uchar bcd8;/数码管 bcd 码缓冲区void delay(uint t);/延时函数声明void bin_bcd();/bcd 分离函数void smxs();/数码管显示函数void
3、anjian();/掉电保持寄存器申明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 CMD_IDLE 0#define CMD_READ 1#define CMD_PROGRAM 2#define CMD_ERASE 3/定义 Flash 操作等待时间及允许 IAP/ISP/EEPROM 操作的常数/#define ENABLE_IAP 0x82 /系统工作时钟24)temp2=(a16)temp3=(a
4、8)temp4=avoid xs8_32()a = (ulong)(temp1)24)temp6=(a116)temp7=(a18)temp8=a1void xs8_321()a1 = (ulong)(temp5)8; / 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 = 扇区单元
5、地址 , dat = 待写入数据*/void xcx(uint addr,uchar dat)IAP_CONTR = ENABLE_IAP; IAP_CMD = CMD_PROGRAM; / 用户可以对“Data Flash/EEPROM 区“进行字节编程IAP_ADDRL = addr; IAP_ADDRH = addr8; IAP_DATA = dat; / 数据进 IAP_DATA/EA = 0;IAP_TRIG = 0x46; IAP_TRIG = 0xB9; /_nop_();GB_IAP(); / 关闭 IAP/IAP/*函数:读一字节入口:addr = 扇区单元地址出口:dat
6、= 读出的数据*/uchar dcx(uint addr) uchar dat;IAP_CONTR = ENABLE_IAP; IAP_CMD = CMD_READ; / 用户可以对“Data Flash/EEPROM 区“进行字节读IAP_ADDRL = addr; IAP_ADDRH = addr8; /EA = 0;IAP_TRIG = 0x46; IAP_TRIG = 0xB9; /_nop_();dat = IAP_DATA; / 取出数据GB_IAP(); / 关闭 IAP/IAP 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;