基于C8051F的AD UART0 KEY FLASH TIME3程序
0x02; // 上电复位VDD监视器复位标志
FLSCL=0X80; // 使能FLASH单稳态定时器,FLASH读时间SYSCLK<=25MHz
FLKEY = 0xA5; // 写入关键字
FLKEY = 0xF1; // 写入关键字
PSCTL |= 0x03; //允许擦,允许写
CPT_x[0] = 0;
PSCTL &= ~0x03; //禁止写,禁止擦
//EA = 1;
}
void Flash_Program_CTP() //flash写入充电时间时间和功率
{
uchar j;
EA =0;
//Flash_Erase_CTP();
VDM0CN = 0x80; //使能VDD监视器
RSTSRC = 0x02; //上电复位/VDD监视器复位标志
FLSCL=0X80; //使能FLASH单稳态定时器,FLASH读时间SYSCLK<=25MHz
PSCTL |= 0x01; //write enable
for(j =0;j<20;j++)
{
FLKEY = 0xa5;
FLKEY = 0xf1;
CPT_x[j] = Between[j];
//delayms(30);
}
PSCTL &= ~0x01; //禁止写
EA = 1;
}
//***********************************
void Flash_Erase_FTP() //flash擦除放电时间和功率
{
EA =0;
VDM0CN = 0x80; // 使能VDD监视器
RSTSRC = 0x02; // 上电复位VDD监视器复位标志
FLSCL=0X80; // 使能FLASH单稳态定时器,FLASH读时间SYSCLK<=25MHz
FLKEY = 0xA5; // 写入关键字
FLKEY = 0xF1; // 写入关键字
PSCTL |= 0x03; //允许擦,允许写
FPT_x[0] = 0;
PSCTL &= ~0x03; //禁止写,禁止擦
//EA = 1;
}
void Flash_Program_FTP() //flash写入放电时间和功率
{
uchar j;
//Flash_Erase_FTP();
EA = 0;
VDM0CN = 0x80; //使能VDD监视器
RSTSRC = 0x02; //上电复位/VDD监视器复位标志
FLSCL=0X80; //使能FLASH单稳态定时器,FLASH读时间SYSCLK<=25MHz
PSCTL|=0x01; //write enable
for(j =0;j<20;j++)
{
FLKEY = 0xa5;
FLKEY = 0xf1;
FPT_x[j] = Between[j];
}
PSCTL &= ~0x01; //禁止写
EA = 1;
}
/*void Flash_Read()
{
static uchar j;
for(j=0;j<3;j++)
{
timer[j]=Ftime_c[j];
}
}*/
//**********************************************
//按键处理程序
//**********************************************
void key_scan()
{
static uchar i,k;
uchar Mkey=P4;
if(BGset<2)
{
if((Mkey&0xFE)!= 0XFE) //有键按下先开启背光
{
delayms(200);
if((Mkey&0xFE)!= 0XFE)
{
BGset++;
if(BGset>1)
{
BGset = 2;
}
}
}
}
if(BGset ==2 )
{
if(!(Mkey&0x80)) //SW1按下吗?ALM
{
delayms(200); //消抖
if(!(Mkey&0x80)) //再判断
{
BGset =2; //开背光
if(k<1) {Page = 0;} //页面0:显示故障状态}
k++;
if(k>1) {k =0;Page = 1; } //再按后退出
set = 0;
}
}
if(!set)
{
if(!(Mkey&0x40)) //SW2按下吗?下翻
{
delayms(200);
if(!(Mkey&0x40))
{
if(Page !=0)
{
Page++;
BGset =2;
if(Page>6) //如果超过5界面回到1画面
{
Page = 1;
}
}
}
}
if(!(Mkey&0x20)) //SW3按下吗?上翻
{
delayms(200);
if(!(Mkey&0x20))
{
if(Page !=0)
{
Page--;
BGset =2;
if(Page<1) //小于1画面后不显示0画面,显示6画面
{
Page = 6;
}
}
}
}
}
if(Page ==6) //修改时间界面
{
if(!(Mkey&0x04)) //SW6按下吗?设定SET只在6画面设置时间
{
delayms(200);
if(!(Mkey&0x04))
{
BGset =2;
set = 1; //如果按下SET键表示开始设置时间,置设置标志位;
}
}
if(set)
{
if(!(Mkey&0x10)) //SW4按下吗?左移<- 只在6画面修改时间
{
delayms(200);
if(!(Mkey&0x10))
{
BGset =2;
direction--;
if(direction < 1)
{
direction = 6;
}
}
}
if(!(Mkey&0x08)) //SW5按下吗?右移->只在6画面修改时间
{
delayms(200);
if(!(Mkey&0x08))
{
BGset =2;
direction++;
if(direction > 6)
{
direction = 1;
}
}
}
switch(direction)
{
case 1:
{
if(!(P4&0x40)) //SW2按下吗?下翻
{
delayms(200);
if(!(P4&0x40))
{
BGset =2;
keybuffer[0]++;
if(keybuffer[0]>99) //年设置,不超过100年
{
keybuffer[0] = 11;
}
}
}
if(!(P4&0x20)) //SW3按下吗?上翻
{
delayms(200);
if(!(P4&0x20))
{
BGset =2;
keybuffer[0]--;
if(keybuffer[0]<11) //小于1画面后不显示0画面,显示6画面
{
keybuf
C8051FADUART0TIME 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)