📄 lcd.c
字号:
//
//================================================
void dispoint_font(void)
{ uint8 i;
for(i=0;i<13;i++)
{ if(curent_dispoint>0)
curent_dispoint--;
else
curent_dispoint=81;
if(dis_table[curent_dispoint].typedisp!=0)
break;
}
}
*/
//================================================
//函数功能:根据指针读出要显示的数据
//
//==============================================
void refreshdisp_formtable(void)
{ uint8 i;
uint8 xdata *point;
uint8 temp_type,num_data;
unsigned char xdata disp_buffer[15];
CfgLCD(0x84); // 开LCD,扫描频率512Hz,分压电阻 70K
for(i=0;i<12;i++)
disp_buffer[i]=0; // 清显示缓存
data_addr.word[1]=dis_table[curent_dispoint].data_ID; //获取数据ID号
if(addr_from_coreID(0,data_addr.word[1])!=0);
{ data_addr.word[1]=(*ID_coretalbpoint[0]).dataaddr;
temp_type=(*ID_coretalbpoint[0]).stortype;
}
data_addr.word[1]=data_addr.word[1]+dis_table[curent_dispoint].offset; // 计算偏移量,存放首地址+偏移量
num_data=dis_table[curent_dispoint].datalong; // 取数据的个数
Read_data(temp_type,num_data); // 获取显示数据
if(temp_type==FLASH)
{ for(i=0;i<num_data;i++)
{ if(wr_buff[i]==0xff)
wr_buff[i]=0;
}
}
swap_higtlow(wr_buff,num_data); //高低位互换
for(i=0;i<num_data;i++)
{ disp_buffer[2*i+1]=LCD_NNumber[wr_buff[i]&0x0f]; // 放入显示缓存中
disp_buffer[2*i+2]=LCD_NNumber[(wr_buff[i]>>4)&0x0f];
}
//====================================================================
disp_buffer[0]=(disp_buffer[1]>>4)&0x0f;
disp_buffer[1]=((disp_buffer[1]<<4)&0xf0)|((disp_buffer[2]>>4)&0x0f);
disp_buffer[2]=(disp_buffer[2]<<4)&0xf0;
for (i=12;i>4;i--)
{disp_buffer[i+1]=disp_buffer[i];}
for (i=5;i<10;i++)
{
disp_buffer[i]=((disp_buffer[i+1]>>4)&0x0f)|((disp_buffer[i]<<4)&0xf0);
}
// disp_buffer[11]=0xff;
disp_buffer[9]=0x00;
disp_buffer[10]=0x0;
disp_buffer[8]=disp_buffer[8]&0xf0;
// disp_buffer[7]=disp_buffer[7]&0xf0;
disp_buffer[5]=disp_buffer[5]&0x0f;
// for (i=(num_data*2+3);i<13;i++)
// disp_buffer[i]=0;
temp_type=dis_table[curent_dispoint].dotflag; // 小数点
if((temp_type&0x01)==1)
{ disp_buffer[6]|=BIT4;} // Y1
if((temp_type&0x02)==0X02)
{ disp_buffer[4]|=BIT0;} // Y2
if((temp_type&0x04)==0X04)
{disp_buffer[5]|=BIT4;} // Y3
if((temp_type&0x08)==0X08)
{disp_buffer[3]|=BIT0;} // Y4
if((temp_type&0x10)==0X10)
{disp_buffer[2]|=BIT4;} // Y5
if((temp_type&0x20)==0X20)
{disp_buffer[2]|=BIT0;} // Y6
if((temp_type&0x40)==0X40)
{ disp_buffer[1]|=BIT4;} // Y7
/*
if(flag_lunxian==0) //无轮显项设置
num_data=dis_table[curent_dispoint].discode; //序号
else
num_data=point_dipnum;
disp_buffer[8]=LCD_NNumber[num_data&0x0f];
disp_buffer[9]=LCD_NNumber[(num_data>>4)&0x0f];
disp_buffer[10]=LCD_NNumber[0];
*/
temp_type=dis_table[curent_dispoint].chaflag_1; // 特殊标志位1
if((temp_type&0x01)==1)
{ disp_buffer[11]|=BIT0;} // x1
if((temp_type&0x02)==0X02)
{ disp_buffer[10]|=BIT0;} // x2
if((temp_type&0x04)==0X04)
{disp_buffer[9]|=BIT4;} // x3
if((temp_type&0x08)==0X08)
{disp_buffer[9]|=BIT1;} // x4
if((temp_type&0x10)==0X10)
{disp_buffer[9]|=BIT2;} // x5
if((temp_type&0x20)==0X20)
{disp_buffer[9]|=BIT3;} // x6
if((temp_type&0x40)==0X40)
{ disp_buffer[9]|=BIT0;} // x7
if((temp_type&0x80)==0X80)
{ disp_buffer[8]|=BIT4;} // x8
temp_type=dis_table[curent_dispoint].chaflag_2; // 特殊标志位2
if((temp_type&0x01)==1)
{ disp_buffer[7]|=BIT4;} // x9
if((temp_type&0x02)==0X02)
{ disp_buffer[5]|=BIT6;} // x10
if((temp_type&0x10)==0X10)
{disp_buffer[2]|=BIT2;} // x13
if((temp_type&0x20)==0X20)
{disp_buffer[2]|=BIT3;} // x14
if((temp_type&0x40)==0X40)
{ disp_buffer[5]|=BIT5;} // x15 K
if((temp_type&0x80)==0X80)
{ disp_buffer[0]|=BIT4;} // x16
temp_type=dis_table[curent_dispoint].chaflag_3; // 特殊标志位3
if((temp_type&0x01)==1)
{ disp_buffer[0]|=BIT7;} // x17
if((temp_type&0x02)==0X02)
{ disp_buffer[0]|=BIT6;} // x18
if((temp_type&0x04)==0X04)
{disp_buffer[0]|=BIT5;} // x19
if(F_commudiv!=0)
{disp_buffer[5]|=BIT7;} // x11 通讯符号显示 COM
if(battest==1)
{disp_buffer[2]|=BIT1;} // x12 电池电压检测报警显示
for(i=0;i<12;i++) // 刷新显示
{ point=LCD_DISaddr[i];
*point=disp_buffer[i];
}
}
//=========================================================
//函数功能:显示模块主函数,
//
//=========================================================
void display_mode(void)
{ if(type_dispevent!=idle_envent) //如果有显示驱动事件发生,优先处理
{ time_dispdelay=0; //请显示延时时间
switch(type_dispevent)
{ case keyup_envent:
if(station_disp==auto_disp)
{ station_disp=key_disp; //进入按键驱动状态
point_begindisp(); //指向显示第一项
}
else
dispoint_next(); //显示下一项
type_dispevent=idle_envent;
break;
/*
case keyup_envent:
dispoint_font(); //显示上一项
type_dispevent=idle_envent;
station_disp=key_disp; //进入按键驱动状态
break;
case keydownlong_event:
if(flag_startlcddisp==true) //下翻长按键没1秒刷新一项
{ flag_startlcddisp=false;
dispoint_next();
}
station_disp=key_disp; //进入按键驱动状态
break;
case keyuplong_event:
if(flag_startlcddisp==true)
{ flag_startlcddisp=false;
dispoint_font();
}
station_disp=key_disp; //进入按键驱动状态
break;
*/
default:
break;
}
refreshdisp_formtable();
}
else // 如果无外部事件
{ if(dis_table[curent_dispoint].typedisp==2) // 即时更新数据
refreshdisp_formtable(); // 更新显示
if(flag_startlcddisp==true)
{ flag_startlcddisp=false;
if(station_disp==auto_disp) // 如果是在自动显示状态
{ time_turn++;
Read_datafromID(ID_TIMERETUN);
//addr_from_coreid(0,ID_TIMERETUN); //取地址
//data_addr.word[1]=(*ID_coretalbpoint[0]).dataaddr;
//Read_data((*ID_coretalbpoint[0]).stortype,(*ID_coretalbpoint[0]).datalong);
if(time_turn>value_hex_from_bcd(wr_buff[0])) //轮显显示8秒
{ time_turn=0;
dispoint_next(); // 指向下一项
}
}
else // 如果在非自动显示状态
{ time_dispdelay++; // 事件延时加
if(time_dispdelay>60)
{ time_dispdelay=0;
station_disp=auto_disp; // 恢复到自动轮显
point_begindisp(); // 指向显示第一项
}
}
refreshdisp_formtable(); //更新显示
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -