📄 lcd_seg.h
字号:
case 1:j=0b00000011; break;
case 2:j=0b01111010; break;
case 3:j=0b01101011; break;
case 4:j=0b10100011; break;
case 5:j=0b11101001; break;
case 6:j=0b11111001; break;
case 7:j=0b00001011; break;
case 8:j=0b11111011; break;
case 9:j=0b11101011; break;
case 10:j=0b11111011; break;
case 11:j=0b00000000; break;
default:j=0b00000000; break;
}
return(j);
}
///////////////////////////////////
//函数: unsigned char pcf8576_conver_b(unsigned char)
//描述: 数据转换
//参数: 数值
//返回值:状态码
////////////////////////////////////
static unsigned char pcf8576_conver_b(unsigned char i){
unsigned char j;
switch(i){
case 0:j=0b11011111; break;
case 1:j=0b00000111; break;
case 2:j=0b01111110; break;
case 3:j=0b01101111; break;
case 4:j=0b10100111; break;
case 5:j=0b11101101; break;
case 6:j=0b11111101; break;
case 7:j=0b00001111; break;
case 8:j=0b11111111; break;
case 9:j=0b11101111; break;
case 10:j=0b11111111; break;
case 11:j=0b00000000; break;
default:j=0b00000000; break;
}
return(j);
}
///////////////////////////////////
//函数: distance_subclr() distance_sub() distance_total()distance_change(unsigned long)
//描述: 状态变化
//参数: none
//返回值:状态改变标志
////////////////////////////////////
void distance_subclr(void){
disp_ram[1]=0x0;disp_ram[2]=0x0;
disp_ram[3]=0b11011111;disp_ram[4]=0b11011011;
pcf_sub=0;
}
//
void distance_sub(void){
unsigned long data;
unsigned char temp;
data=pcf_sub%1000000;
temp=(unsigned char)(data/100000);disp_ram[1]=pcf8576_conver(temp);data=data%100000;
__RESET_WATCHDOG();
temp=(unsigned char)(data/10000);disp_ram[2]=pcf8576_conver(temp);data=data%10000;
__RESET_WATCHDOG();
temp=(unsigned char)(data/1000);disp_ram[3]=pcf8576_conver_b(temp);data=data%1000;
__RESET_WATCHDOG();
temp=(unsigned char)(data/100);disp_ram[4]=pcf8576_conver(temp);
}
//
void distance_total(void){
unsigned long data;
unsigned char temp;
data=pcf_total%1000000000;
temp=(unsigned char)(data/100000000);disp_ram[5]=pcf8576_conver(temp);data=data%100000000;
__RESET_WATCHDOG();
temp=(unsigned char)(data/10000000);disp_ram[6]=pcf8576_conver(temp);data=data%10000000;
__RESET_WATCHDOG();
temp=(unsigned char)(data/1000000);disp_ram[7]=pcf8576_conver(temp);data=data%1000000;
__RESET_WATCHDOG();
temp=(unsigned char)(data/100000);disp_ram[8]=pcf8576_conver(temp);data=data%100000;
__RESET_WATCHDOG();
temp=(unsigned char)(data/10000);disp_ram[9]=pcf8576_conver(temp);data=data%10000;
__RESET_WATCHDOG();
temp=(unsigned char)(data/1000);disp_ram[10]=pcf8576_conver(temp);
}
//
void distance_change(unsigned long data)
{
//pcf_total,pcf_sub
unsigned char temp;//0-9
if(data!=last_sub)
{
pcf_total=mile_total+data;
pcf_sub=mile_sub+data;
if(pcf_sub>999999) pcf_sub=pcf_sub-1000000;
last_sub=data;
__RESET_WATCHDOG();
//sub
data=pcf_sub%1000000;
temp=(unsigned char)(data/100000);disp_ram[1]=pcf8576_conver(temp);data=data%100000;
__RESET_WATCHDOG();
temp=(unsigned char)(data/10000);disp_ram[2]=pcf8576_conver(temp);data=data%10000;
__RESET_WATCHDOG();
temp=(unsigned char)(data/1000);disp_ram[3]=pcf8576_conver_b(temp);data=data%1000;
__RESET_WATCHDOG();
temp=(unsigned char)(data/100);disp_ram[4]=pcf8576_conver(temp);
//total
data=pcf_total%1000000000;
__RESET_WATCHDOG();
temp=(unsigned char)(data/100000000);disp_ram[5]=pcf8576_conver(temp);data=data%100000000;
__RESET_WATCHDOG();
temp=(unsigned char)(data/10000000);disp_ram[6]=pcf8576_conver(temp);data=data%10000000;
__RESET_WATCHDOG();
temp=(unsigned char)(data/1000000);disp_ram[7]=pcf8576_conver(temp);data=data%1000000;
__RESET_WATCHDOG();
temp=(unsigned char)(data/100000);disp_ram[8]=pcf8576_conver(temp);data=data%100000;
__RESET_WATCHDOG();
temp=(unsigned char)(data/10000);disp_ram[9]=pcf8576_conver(temp);data=data%10000;
__RESET_WATCHDOG();
temp=(unsigned char)(data/1000);disp_ram[10]=pcf8576_conver(temp);
}
__RESET_WATCHDOG();
//去前面零
if(disp_ram[1]==0b11011011)
{//sub
disp_ram[1]=pcf8576_conver(11);
if(disp_ram[2]==0b11011011)
{
disp_ram[2]=pcf8576_conver(11);
}
}
if(disp_ram[5]==0b11011011)
{//total
disp_ram[5]=pcf8576_conver(11);
if(disp_ram[6]==0b11011011)
{
disp_ram[6]=pcf8576_conver(11);
if(disp_ram[7]==0b11011011)
{
disp_ram[7]=pcf8576_conver(11);
if(disp_ram[8]==0b11011011)
{
disp_ram[8]=pcf8576_conver(11);
if(disp_ram[9]==0b11011011)
{
disp_ram[9]=pcf8576_conver(11);
}
}
}
}
}
//
}
///////////////////////////////////
//函数: void init_mil(void)
//描述: 里程读E2PROM初始化
//参数: none
//返回值:none
///////////////////////////////////
void init_mil(void){
//pcf8576
// DDRC_DDRC2=1;//clk//
// DDRC_DDRC3=1;//output//
//e2prom
// DDRD_DDRD6=1;
// DDRD_DDRD7=1;
at24_rd_all();//读E2
distance_total();//里程总计
distance_sub();//里程小计
//去前面零
if(disp_ram[1]==0b11011011){//sub
disp_ram[1]=pcf8576_conver(11);
if(disp_ram[2]==0b11011011){
disp_ram[2]=pcf8576_conver(11);
}
}
if(disp_ram[5]==0b11011011){//total
disp_ram[5]=pcf8576_conver(11);
if(disp_ram[6]==0b11011011){
disp_ram[6]=pcf8576_conver(11);
if(disp_ram[7]==0b11011011){
disp_ram[7]=pcf8576_conver(11);
if(disp_ram[8]==0b11011011){
disp_ram[8]=pcf8576_conver(11);
if(disp_ram[9]==0b11011011){
disp_ram[9]=pcf8576_conver(11);
}
}
}
}
}
//
}
///////////////////////////////////
//函数: void init_pcf8576(void)
//描述: PCF8576初始化
//参数: none
//返回值:none
////////////////////////////////////
void init_pcf8576(void){
/*
//pcf8576
DDRC_DDRC2=1;//clk//
DDRC_DDRC3=1;//output//
//e2prom
DDRD_DDRD6=1;
DDRD_DDRD7=1;
at24_rd_all();
distance_change(pcf_total,1);
distance_change(pcf_sub,2);
*/
start_pcf8576();
wr_pcf8576_byte(0x70);//sa0=0,wr
wr_pcf8576_byte(0xc8);//normal enable 1/3bias 4com
wr_pcf8576_byte(0xe0);//subaddr=000
wr_pcf8576_byte(0xf8);//normal rd/wr
wr_pcf8576_byte(0xf0);//no blinking0x70 :blinking test ok
wr_pcf8576_byte(0x00);//start at 00
wr_pcf8576_byte(0x0);
wr_pcf8576_byte(disp_ram[1]);
wr_pcf8576_byte(disp_ram[2]);
wr_pcf8576_byte(disp_ram[3]);
wr_pcf8576_byte(disp_ram[4]);
wr_pcf8576_byte(disp_ram[5]);
wr_pcf8576_byte(disp_ram[6]);
wr_pcf8576_byte(disp_ram[7]);
wr_pcf8576_byte(disp_ram[8]);
wr_pcf8576_byte(disp_ram[9]);
wr_pcf8576_byte(disp_ram[10]);
wr_pcf8576_byte(0x0);
stop_pcf8576();
///
last_sub=0; //
}
///////////////////////////////////
//函数: void disp_pcf8576(void)
//描述: pcf8576显示
//参数: none
//返回值:none
////////////////////////////////////
void disp_pcf8576(void){
if(disp_data4!=disp_ram[4] || disp_data3!=disp_ram[3] ||
disp_data10!=disp_ram[10] || disp_data2!=disp_ram[2] ||
disp_data1!=disp_ram[1] || disp_data9!=disp_ram[9] ||
disp_data8!=disp_ram[8] || disp_data7!=disp_ram[7] ||
disp_data6!=disp_ram[6] || disp_data5!=disp_ram[5]){//
disp_data1=disp_ram[1];
disp_data2=disp_ram[2];
disp_data3=disp_ram[3];
disp_data4=disp_ram[4];
disp_data5=disp_ram[5];
disp_data6=disp_ram[6];
disp_data7=disp_ram[7];
disp_data8=disp_ram[8];
disp_data9=disp_ram[9];
disp_data10=disp_ram[10];
__RESET_WATCHDOG();
start_pcf8576();
wr_pcf8576_byte(0x70);//sa0=0,wr
wr_pcf8576_byte(0xe0);//subaddr=000
wr_pcf8576_byte(0xf8);//normal rd/wr
wr_pcf8576_byte(0x00);//start at 00:test
wr_pcf8576_byte(0x0);
wr_pcf8576_byte(disp_ram[1]);
wr_pcf8576_byte(disp_ram[2]);
wr_pcf8576_byte(disp_ram[3]);
wr_pcf8576_byte(disp_ram[4]);
wr_pcf8576_byte(disp_ram[5]);
wr_pcf8576_byte(disp_ram[6]);
wr_pcf8576_byte(disp_ram[7]);
wr_pcf8576_byte(disp_ram[8]);
wr_pcf8576_byte(disp_ram[9]);
wr_pcf8576_byte(disp_ram[10]);
wr_pcf8576_byte(0x0);
stop_pcf8576();
}
}
///////////////////////////////////
//函数: void pcfdisplay(void)
//描述: 里程显示
//参数: 无
//返回值:无
////////////////////////////////////
void pcfdisplay(void){
licheng_temp=licheng;
//unsigned long temp;
//unsigned char temp1,temp2,temp3;
//temp1=CAN_WKD5.Byte;
//temp2=CAN_WKD4.Byte;
//temp3=CAN_WKD3.Byte;
//temp=temp3;temp<<=8;
//temp+=temp2;temp<<=8;
//temp+=temp1;//*/
distance_change(licheng_temp);
//disp_ram[1]=canfault_conver((mc389_faultstatus.Byte>>4)&0xf);
//disp_ram[2]=canfault_conver(mc389_faultstatus.Byte&0xf);
//can故障临时显示
disp_pcf8576();
}
////////////////////////////////////
/*
上电复位->调用init_pcf8576()->pcfdisplay();
掉电或休眠:调用at24_wr_all();保存unsigned long pcf_total,pcf_sub数据
上电或wake up:调用init_pcf8576();读取保存的数据,distance_change(pcf_total,1),distance_change(pcf_sub,2)
小计里程清零:distance_change(0,0);disp_pcf8576();
第一次使用e2prom,清除里面数据:at24_init();
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -