//=========================几个功能常用函数=================================
void lcd_cls() { lcd_B(0, 0x01+0, 2); } //清屏
void lcd_cur0() { lcd_B(0, 0x0C+0, 0); } //隐藏光标
void lcd_goto1(uchar x){ lcd_B(0, 0x80+x, 0); } //设置DDRAM地址,第1行x位
void lcd_goto2(uchar x){ lcd_B(0, 0xC0+x, 0); } //设置DDRAM地址,第2行x位
void lcd_putc(uchar d) { lcd_B(1, 0x00+d, 0); } //字符输出
void lcd_puts(uchar *s){ for(; *s; s++) lcd_B(1,*s,0); } //字串输出
//==============字符显示函数====================
#define digW 4 //数字显示位数宏
void lcd_puti(long a,char w){ //定宽显示正整数
char i=0, s[10]={32,32,32,32,32,32,32,32,32,32};
if(a<0) { a=-a; lcd_puts("-"); }
else lcd_puts(" ");
do{
s[i++] = a%10+48;
a /= 10;
}while(a);
for(;w;w--) lcd_putc(s[w-1]);
}
void lcd_putf(float a,char n,char w){ //浮点输出,n是保留小数的位数,w是数字宽度
char i,g,fi=0;
long b,c=1;
if(a<0) { lcd_putc('-'); a = -a; }
else { lcd_putc(' '); }
for(i=0;i<n;i++) a *= 10;
for(i=1;i<w;i++) c *= 10;
b = a;
for(i=0;i<w;i++){
g = b/c;
b -= g*c;
c /= 10;
if(g>9||g<0) g='*'-48;
if(i == w-n ) lcd_putc('.');
if(!g && !fi && i<w-n-1) { lcd_putc(' '); continue; }
lcd_putc(g+48);
fi = 1;
}
if(!n) lcd_putc(' '); //无小数点的补足显示宽度
}
//==========================================================================
//===============================延时函数===================================
void delay(uint loop) { uint i; for(i=0;i<loop;i++); } //延时函数
void delay2(uint k) { for(;k>0;k--) delay(10000); } //长延时,k=100大约对应1秒
//==========================================================================
//==================================EEPROW偏程==============================
sfr IAP_data = 0xC2;
sfr IAP_addrH = 0xC3;
sfr IAP_addrL = 0xC4;
sfr IAP_cmd = 0xC5;
sfr IAP_trig = 0xC6;
sfr IAP_contr = 0xC7;
/********************
写字节时,可以将原有数据中的1改为0,无法将0改为1,只能使用擦除命令将0改为1
应注意,擦除命令会将整个扇区擦除
*********************/
int eepEn = 0;
void saEEP(){ //触发并EEP保护
if(eepEn==12345) IAP_trig = 0x5A; //先送5A
if(eepEn==12345) IAP_trig = 0xA5; //先送5A再送A5立即触发
IAP_cmd = 0; //关闭令,保护
IAP_contr = 0; //关EEPROM,保护 (责任编辑:admin) |