while(1)
{
mode();
if(d==1)
{
CR=1;
if((key1==1)&&(key3==0)&&(key4==0))
{
count1++;
if(count1>8000)
{
count1=0;
if(num>0)
{
num=num-17;
if((key3==1)&&(key1==0))break;
CCAP3H=num;
delay(10);
}
}
}
if((key1==1)&&(key3==1))
{
count2++;
if(count2>8000)
{
count2=0;
if(num<0xFF)
{
num=num+17;
if((key3==1)&&(key1==0))break;
CCAP3H=num;
delay(10);
}
}
}
if((key4==1)&&(key1==1)&&(key3==0))
{
count3++;
if(count3>20000)
{
count3=0;
sum++;
if((key3==1)&&(key1==0))break;
if(sum==0x11)
{
sum=0x10;
}
}
}
if(key2==1)
{
count4++;
if(count4>20000)
{
count4=0;
sum--;
if((key3==1)&&(key1==0))break;
if(sum==0x00)
{
sum=0x01;
}
}
}
switch(sum)
{
//case 0x00:CCAP0H=0xFF;CCAP1H=0xFF;CCAP2H=0xFF;break;
case 0x01:PWM1();break;
case 0x02:PWM2();break;
case 0x03:PWM3();break;
case 0x04:PWM4();break;
case 0x05:PWM5();break;
case 0x06:PWM6();break;
case 0x07:PWM7();break;
case 0x08:PWM8();break;
case 0x09:PWM9();break;
case 0x0A:PWM10();break;
case 0x0B:PWM11();break;
case 0x0C:PWM12();break;
case 0x0D:PWM13();break;
case 0x0E:PWM14();break;
case 0x0F:PWM15();break;
case 0x10:PWM16();break;
default:break;
}
}
if(d==0)
{
temp=0xFF;
CCAP0H=temp;
CCAP1H=temp;
CCAP2H=temp;
CCAP3H=temp;
CR=0;
delay(100);
}
}
/*----------------------------
关闭IAP
----------------------------*/
void IapIdle()
{
ISP_CONTR = 0; //关闭IAP功能
ISP_CMD = 0; //清除命令寄存器
ISP_TRIG = 0; //清除触发寄存器
ISP_ADDRH = 0x80; //将地址设置到非IAP区域
ISP_ADDRL = 0x00;
}
/*----------------------------
从ISP/IAP/EEPROM区域读取一字节
----------------------------*/
uchar IapReadByte(uint addr)
{
uchar dat; //数据缓冲区
ISP_CONTR = ENABLE_ISP; //使能IAP
ISP_CMD = CMD_READ; //设置IAP命令
ISP_ADDRL = addr; //设置IAP低地址
ISP_ADDRH = addr >> 8; //设置IAP高地址
ISP_TRIG = 0x46; //写触发命令(0x5a)
ISP_TRIG = 0xB9; //写触发命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
dat = ISP_DATA; //读ISP/IAP/EEPROM数据
IapIdle(); //关闭IAP功能
return dat; //返回
}
/*----------------------------
写一字节数据到ISP/IAP/EEPROM区域
----------------------------*/
void IapProgramByte(uint addr, uchar dat)
{
ISP_CONTR = ENABLE_ISP; //使能IAP
ISP_CMD = CMD_PROGRAM; //设置IAP命令
ISP_ADDRL = addr; //设置IAP低地址
ISP_ADDRH = addr >> 8; //设置IAP高地址
ISP_DATA = dat; //写ISP/IAP/EEPROM数据
ISP_TRIG = 0x46; //写触发命令(0x5a)
ISP_TRIG = 0xB9; //写触发命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
IapIdle();
}
/*----------------------------
扇区擦除
----------------------------*/
void IapEraseSector(uint addr)
{
ISP_CONTR = ENABLE_ISP; //使能IAP
ISP_CMD = CMD_ERASE; //设置IAP命令
ISP_ADDRL = addr; //设置IAP低地址
ISP_ADDRH = addr >> 8; //设置IAP高地址
ISP_TRIG = 0x46; //写触发命令(0x5a)
ISP_TRIG = 0xB9; //写触发命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
IapIdle();
}
要求同时保存参数d,num,sum三个参数,我现在只能按照例子保存一个参数,在上电读出,请教各位高手
|