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

📄 st7565.c

📁 DSP TMS320F28335下MS5540大气压力传感器全程序
💻 C
📖 第 1 页 / 共 2 页
字号:

void display(void)
{
	 Uint16	i,j;
	 Uint16 pe=99;
	 Uint16 te=25;
	 	/****** 清屏 ******/
	for(j=0;j<8;j++)
	{
		lcd_w(0,addr[j]);
		lcd_w(0,0x10);
		lcd_w(0,0x00);
		for (i=0;i<128;i++)lcd_w(1,0x00);	
	}
	/*****************/
		
	/***** 分界线 *****/
	//列线
	for(i=0;i<6;i++)
	{
		lcd_w(0,addr[2+i]);
		lcd_w(0,0x12);
		lcd_w(0,0x00);
		lcd_w(1,0xff);
	}
		lcd_w(0,addr[1]);
		lcd_w(0,0x12);
		lcd_w(0,0x00);
		lcd_w(1,0xfc);

	//行线,部分,没包含图标的补线
		lcd_w(0,addr[1]);
		lcd_w(0,0x12);
		lcd_w(0,0x01);						
		for(i=0;i<111;i++)lcd_w(1,0x04);

	/*****************/

	/***** 顶上图标 ******/
	if(mod==0)
	{
		if(rev!=0)disp_pic(0);//fn_fg:使用参数校正功能							

		if(status==2)disp_pic(3);// rn_fg:泵转

		//if()disp_pic(2);//堵塞标志??	

		if(((zz*10000)/flow)<errer && status==2)disp_pic(1);//错误标志							
	}

	//显示电池
	lcd_w(0,addr[0]);
	lcd_w(0,0x16);
	lcd_w(0,0x08);
	for(i=0;i<20;i++)lcd_w(1,dc[i]);//dc图标,根据电池的电量改变数组值

	/*****************/

	/******** 左侧图标 *********/
	switch(mod)
	{
		case run_fg:disp_lf(2,0);//左侧 RUN 
					if(status==2 && pe!=0)disp_per(pe);//%减计数,如果等于0即正常完成则消失
					break;
	
		case set_fg:disp_lf(4,1);//左侧SYS
					break;

		case fun_fg:disp_lf(6,2);//左侧FUN
					break;

		default:	break;
	}

		//显示标识符
	if(mod==0)//运行菜单
	{
	switch(run_i)//要求mod=RUN,同时上翻下翻的显示
	{
		case te_fg:	disp_bsf(0,3);//设置值
					disp_bsf(1,4);//

					disp_dw(4,1);//min
					disp_dw(7,0);//slm
					break;

		case ft_fg:	disp_bsf(0,1);//时间--流量
					disp_bsf(1,0);//

					disp_dw(4,1);//min
					disp_dw(7,0);//slm
					break;

		case sf_fg:	disp_bsf(0,2);//温度--流量
					disp_bsf(1,0);//

					disp_dw(4,2);//温度
					disp_dw(7,0);//slm
					break;

		default:	break;
	}
	}
	else if(mod==1)//设置菜单
	{	
		disp_bsf(2,0);//温度--流量
		disp_bsf(4,1);//
		disp_bsf(6,2);//

		disp_dw(3,0);//温度
		disp_dw(5,1);//slm
		disp_dw(7,2);//slm
	}

	if(mod==2)//功能菜单
	{
		disp_letter(2,2);
		disp_letter(4,0);
		disp_letter(6,1);

		disp_num(6,((float)errer)/100);

	}

	//显示数字
	if(mod==1)//设置菜单
	{
		disp_num(2,((float)flow)/100);//进入菜单默认设置
		disp_num(4,((float)time)/100);//
		disp_num(6,((float)rev)/100);//	
	}
	else if(mod==0)
	{	
		disp_num(3,((float)te)/100);
		disp_num(6,zz);
	}				
	
}


//顶上图标
void disp_pic(Uint16 sel)
{
	Uint16	i;

	lcd_w(0,addr[0]);
	lcd_w(0,0x12+sel);
	lcd_w(0,0x00);
	for(i=0;i<14;i++)lcd_w(1,pic_f[sel][i]);//rn图标
	//补充行线
	lcd_w(0,addr[1]);
	lcd_w(0,0x12+sel);
	lcd_w(0,0x00);
	if(sel==0)lcd_w(1,0xfd);//补全断线,fn影响部分列线
	for(i=0;i<14;i++)lcd_w(1,0x05);

}

//百分比
void disp_per(Uint16 perc)
{
	Uint16	i,j,k;
	
	Uint16 temp[3];

	temp[0]=(perc%100/10);
	temp[1]=(perc%10);
	temp[2]=10;

	for(i=0;i<2;i++)//占用2个page
	{
		lcd_w(0,addr[6+i]);//显示的位置
		lcd_w(0,0x10);
		lcd_w(0,0x03);

		for(k=0;k<3;k++)//显示2位数据
		{
			if(i)lcd_w(1,0x7f);
			else lcd_w(1,0xfe);
			for(j=i*8;j<8*(i+1);j++)lcd_w(1,per_num[temp[k]][j]);
			
		}
		if(i)lcd_w(1,0x7f);
		else lcd_w(1,0xfe);
	}
}


//RUN Set fuc
void disp_lf(Uint16 z,Uint16 sel)
{
	Uint16	i,j;

	for(i=0;i<2;i++)//占用2个page
	{
		lcd_w(0,addr[z+i]);//显示的位置
		lcd_w(0,0x10);
		lcd_w(0,0x00);
		for(j=i*32;j<32*(i+1);j++)lcd_w(1,lf[sel][j]);
	}
}


//标识符
void disp_bsf(Uint16 ud,Uint16 sel)
{
	Uint16	i,j;
	Uint16 z;
	
	if(mod==0)
	{	
		if(ud==0)z=2;//显示的位置
		else z=5;
	}
	else z=ud;

	if(mod==1)
	{

		for(i=0;i<2;i++)//menu_sel菜单选择
		{
			lcd_w(0,addr[i+2*(menu+1)]);//显示的位置
			lcd_w(0,0x12);
			lcd_w(0,0x02);
			for(j=i*4;j<4*(i+1);j++)lcd_w(1,menu_sel[j]);
		}

		for(i=0;i<2;i++)//占用2个page
		{
			lcd_w(0,addr[z+i]);//显示的位置
			lcd_w(0,0x12);
			lcd_w(0,0x06);
			for(j=i*24;j<24*(i+1);j++)lcd_w(1,bsf_set[sel][j]);
		}
	}
	else if(mod==0)
	{
		for(i=0;i<3;i++)//占用3个page
		{
			lcd_w(0,addr[z+i]);//显示的位置
			lcd_w(0,0x12);
			lcd_w(0,0x01);
			for(j=i*32;j<32*(i+1);j++)lcd_w(1,bsf_run[sel][j]);
		}
	}
}

//显示单位
void disp_dw(Uint16 ud,Uint16 sel)
{
	Uint16	j;

	lcd_w(0,addr[ud]);//显示的位置
	lcd_w(0,0x16);
	lcd_w(0,0x01);
	for(j=0;j<24;j++)lcd_w(1,dw[sel][j]);
}

//数据
void disp_num(Uint16 z,float w)
{
	Uint16	i,j,k;
	Uint16 ud;

	Uint16 temp[3];
	Uint16 x;

	x=w/1;
	w=(w-x)*100;

	temp[0]=(x%10);
	temp[1]=((int)w%100/10);
	temp[2]=((int)w%10);

	for(i=0;i<2;i++)//占用2个page
	{
		lcd_w(0,addr[z+i]);//显示的位置
		lcd_w(0,0x14);
		lcd_w(0,0x01);

		if(w<0)lcd_w(1,0xff);
									
		for(k=0;k<3;k++)//显示3位数据
		{
			for(j=i*9;j<9*(i+1);j++)lcd_w(1,num[temp[k]][j]);

			if(mod==0)ud=6;
			else if(mod==1)ud=2;

			if(k==0 && i==0 && z==ud)
				for(j=0;j<2;j++)lcd_w(1,0x00);//上面空间对齐
			if(k==0 && i==1 && z==ud)
				for(j=0;j<2;j++)lcd_w(1,0x60);//下面小数点
		}
	}
}


//显示字母
void disp_letter(Uint16 ud,Uint16 sel)
{
	Uint16	i,j,k;
	Uint16 temp[3];

	switch(sel)
	{
		case 0:
				temp[0]=17;//r
				temp[1]=18;//s
				temp[2]=19;//t
				break;
		case 1:
				temp[0]=4;//e
				temp[1]=17;//r
				temp[2]=17;//r
				break;
		case 2:
				temp[0]=1;//
				temp[1]=2;//
				temp[2]=3;//
				break;
		default:break;
	}

	for(i=0;i<2;i++)//menu_sel菜单选择
	{
		lcd_w(0,addr[i+2*(menu+1)]);//显示的位置
		lcd_w(0,0x12);
		lcd_w(0,0x02);
		for(j=i*4;j<4*(i+1);j++)lcd_w(1,menu_sel[j]);
	}

	lcd_w(0,addr[ud]);//显示的位置
	lcd_w(0,0x12);
	lcd_w(0,0x06);
	for(k=0;k<3;k++)//显示3位数据
		for(j=0;j<9;j++)lcd_w(1,letter[temp[k]][j]);
	
}



//显示图片
void disp_bmp()
{
	Uint16 i=0,j=0;

	for(j=0;j<4;j++)
	{
		lcd_w(0,addr[4+j]);
		lcd_w(0,0x10);
		lcd_w(0,0x00);
		for(i=0;i<128;i++)
		{
			lcd_w(1,tab1[i+j*128+512]);
		}
	}

	for(j=0;j<4;j++)
	{
		lcd_w(0,addr[0+j]);
		lcd_w(0,0x10);
		lcd_w(0,0x00);
		for(i=0;i<128;i++)
		{
			lcd_w(1,tab1[i+j*128]);
		}
	}
}


void	lcd_w(Uint16 sel,Uint16 dat)	//sel:1写数据,0写命令
{
	Uint16	i;
	lcd_a0 = sel;

	for	(i=0;i<8;i++)
		{
			if ((dat & 0x80)==0) dat_clr;//数据送0
			else dat_set;				//数据送1
			dat <<= 1;					//左移?右移?我的164是左移,板的程序右移				
			clk_clr;					//CLK低电平
			clk_set;					//CLK高电平
		}
}


void	lcd_Init(void)
{
	lcd_w(0,0xE2);		//DB	11100010B		;RESET
	lcd_w(0,0x2C);		//DB	00101100B
	lcd_w(0,0x2E);
	lcd_w(0,0x2F);		//DB	00101111B		;SET POWER CONTROL
	lcd_w(0,0xA3);		//DB	10100011B		;SET LCD BIAS
	
	lcd_w(0,0x24);		//DB	00100100B		;SET V5 VOLTAGE RATIO
	lcd_w(0,0x81);		//DB	10000001B		;SET ELECTRONIC VOLUME MODE
	lcd_w(0,0x20);		//DB	00110010B		;SET ELECTRONIC VOLUME REGISTER
	
	lcd_w(0,0x00);		//DB	00000000B		;INITIAL DISPLAY LINE
	lcd_w(0,0xa0);		//DB	10100000B		;ADC SELECT
	lcd_w(0,0xC8);		//DB	11000000B		;COMMON OUTPUT MODE
	lcd_w(0,0xA2);		//DB	10100010B		;DISPLAY ALL POINTS OFF
	lcd_w(0,0xA6);		//DB	10100110B		;NORMAL DISPLAY
	lcd_w(0,0xAD);       //                      ;STATIC INDICATOR
	lcd_w(0,0x00);
	lcd_w(0,0xAF);		//DB	10101111B		;DISPLAY ON
	lcd_w(0,0xAF);		//DB	10101111B
	lcd_w(0,0x03);		//DB	00000011B 
}	

		
//===========================================================================
// No more.
//===========================================================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -