x:显示列,取值范围0-7 y:显示行,取值范围0-3 */
void LCD12864_SZXS(signed long sj,unsigned char xsfs,x,y) {
unsigned long xc; //显示缓存 unsigned char d[13]; bit xsd,fs,bf=0; xsd=0; fs=0;
LCD12864_XZL(0x04);//设置光标左移
LCD12864_XZL(LCD12864_SZDZ(x,y));//写入显示地址 y=0;
if(xsfs>10)
{x=16; //输出十六进制 d[y]=0x48; //十六进制显示H y++; } // else
{if(sj<0) //十进制正负数判断 {sj=~sj+1;
fs=1;} //负号显示使能 if(xsfs!=0) xsd=1;//小数点显示使能 x=10; } //
xc=sj;
if(xc!=0) //显示数据不为0;则显示
{while(xsd) //判是否需要显示小数 {if(xc!=0) //是否还需要计算 {sj=xc%x;
if(bf|sj!=0) //小数部分为0不需要显示 {d[y]=ascll12864[xc%x];
y++; //取数的ascll码并显示
bf=1; //小数部分不为0标志,小数部分数字有效 }
xc/=x; //取剩下的数 } else if(bf)
{d[y]=0x30; //判是否需要补0 y++;}
else; //小数部分无效,不需要补0
xsfs--;
if(xsfs==0) //小数点位数减一 {xsd=0; //小数计算部分结束标志 if(bf)
{d[y]=0x2e; //小数部分存在有效数字则显示小数点 y++;} } } }
do
{d[y]=ascll12864[xc%x]; //取数的ascll码 y++; xc/=x; } while(xc!=0); if(fs)
{d[y]=0x2d; //取负号ascll码 y++;}
if(y&&0x01) //如果显示的位数为奇数 {d[y]=0x20; //显示一个空格 y++;} x=y; y=1;
///////////////显示数据////////////// do {
LCD12864_XSJ(d[y]);//显示一个地址的前一个字符 y--;
LCD12864_XSJ(d[y]);//显示一个地址的后一个字符 y+=3; //跳到下一个要显示的两个字符 }
while(y LCD12864_XZL(0x06);//设置光标右移 } /***************************************************** **********LCD12864字符显示函数************************ ****************************************************** *zfc:需要显示的字符串指针,字符数不得超过64个 x:显示列,取值范围0-7 y:显示行,取值范围0-3 */ void LCD12864_ZFXS(unsigned char *zfc,x,y) { unsigned char k1,k2,k3; k3=x*2; k1=16-k3; k2=32-k3; k3=48-k3; switch(y) //设置显示地址x和换行标志y {case 0:x|=0x80;y=0;break; case 1:x|=0x90;y=16;break; case 2:x|=0x88;y=32;break; case 3:x|=0x98;y=48;break; default:;}