//在指定为是显示数字串
//(当数字为十六进制时,调用此函数,例如显示nrfID:0x01,0xE1,0xE2,0xE3;十进制类型的串调用dispen)
void disphex(uint8_t x, uint8_t y, const uint8_t *pData ,uint8_t num)
{
uint8_t i;
setxy( x, y ) ;
for(i=0;i<num;i++)
{
LCD_Writedate(*(code+(*pData>>4)));
LCD_Writedate(*(code+(*pData&0x0f)));
pData++;
}
}
//在指定位置输出字符串
void dispen( uint8_t x, uint8_t y, const uint8_t *pData ,uint8_t num)
{
uint8_t i;
setxy( x, y ) ;
for(i=0;i<num;i++)
{
LCD_Writedate( *pData++ ) ;
}
}
//在指定位置输出汉字//汉字显示的时候是num*2,注意一下。
void dispch( uint8_t x, uint8_t y, const uint8_t *pData ,uint8_t num)
{
uint8_t i;
setxy( x, y ) ;
for(i=0;i<(num*2);i++)
{
LCD_Writedate( *pData++ ) ;
}
}
//显示开机画面:
//
// 无线测温终端
//
// V1.0
void **(void)
{
uint8_t *version="V1.0";
LCD_Init();
LCD_CLR();
dispen(0,0,"ID:",3);
disphex(2,0,&dizhi,1);
dispch(1,1,"无线测温终端",6);//此处显示:无线测温终端V2.0
dispen(6,3,version,4);
Delay_10us(300000); //delay 10ms
}
//显示节点温度画面:
//----------------------------
//0123456789012345
//1# 上 下
//A:
//B:
//C:
//----------------------------
void NodeDisp(void)
{
LCD_CLR();
// dispen(0,0," #",2);
dispch(3,0,"上 下",4);
dispen(0,1,"A:",2);
dispen(0,2,"B:",2);
dispen(0,3,"C:",2);
}
//显示参数设置画面:(以十六进制显示)
//临时只设置显示终端的设备dizhi,同时能显示显示flash中的nrf ID.
//----------------------------
//0123456789012345
//ID: FF
//01E1E2E302E1E2E3
//03E1E2E304E1E2E3
//05E1E2E306E1E2E3
//----------------------------
void SetDisp(void)
{
LCD_CLR();//初始化LCD
dispen(0,0,"ID:",3);
//disphex(0,3,unirfaddr.addr,8);//显示终端NRFID
disphex(2,0,&dizhi,1);
disphex(4,0,&unirfaddr.addr[0],4);
disphex(0,1,unirfaddr.addr,8);//unirfaddr.addr[] ,开机时从flash中读出并存到unirfaddr.addr[]所在的联合体中。
disphex(0,2,unirfaddr.addr+8,8);
disphex(0,3,unirfaddr.addr+16,8);
}
//显示保存与取消的提示界面
//默认时保存字体颜色置反
//----------------------------
//0123456789012345
//
//
// 是 否
//
//----------------------------
void SaveDisp(void)
{
LCD_CLR();
dispch(2, 2, "是 否", 3);
}
/*******************************************************
*函数名:TempDisp
*描述 :在屏幕上显示温度或电压值
*输入 :nod:节点,传递数据
n:节点下标,与LCD屏上的显示位置关联,n=0---5
status: 判断显示温度或电压的标志,SET显示温度,RESET显示电压
*输出 :在屏幕上显示出相关的数据
*调用 :外部调用
*******************************************************/
void TempDisp(StrNode nod, uint8_t n, FlagStatus status)
{
float tmp;//一般情况下nod参数传来的温度值0-1750 Float -50~125℃
uint16_t tmpbuf;
uint8_t buf[10];
int32_t len;
if(SET==status) //温度
{dispch(0,0,"温度",2);
tmpbuf=nod.temper<<8;
tmp=tmpbuf|(nod.temper>>8);//注意大小端,高低位对调
tmp=tmp*0.01-50.0;
len=sprintf(buf, "%3.2f", tmp); //返回值是字符串长度
if(len>5)
len=5;
}
else//电压
{dispch(0,0,"电压",2);
tmpbuf=nod.voltage<<8;
tmp=tmpbuf|(nod.voltage>>8);//注意大小端,高低位对调
tmp=tmp*0.01;
len=sprintf(buf, "%1.2f", tmp);
// len=len-1;
}
//在屏幕上合适的位置显示//n与之关联
//----------------------------
//0123456789012345
//1# 上 下
//A:
//B:
//C:
//----------------------------
switch(n)
{
case 0:
case 1:
case 2: dispen(2,n+1,buf,len);
break;
case 3:
case 4:
case 5: dispen(5,n-2,buf,len);
break;
default:break;
}
}
|