⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_seg.h

📁 客车车身控制模块 分为仪表部分 前控左 前控右 尾控和中控程序模块
💻 H
📖 第 1 页 / 共 2 页
字号:
		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 + -