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

📄 330_display.c

📁 C8051F330部分模块程序,已经调试成功
💻 C
字号:

/******************
filename:display.c
master:  liuyul
startdate: 4-17 2006
fishceddate:4-18 2006
************/
/*
显示
*/
extern struct screen setdata;
extern struct keyboard out;
unsigned int screen;
extern xdata unsigned char screenkeep;            //屏保参数;  
void write(unsigned char add,unsigned char da,bit d);//写LCD显示模块;
void numten(unsigned char x);               //LCD数码显示十位;
void numone(unsigned char x);               //LCD数码显示个位;             
void wind(unsigned char windnum);           //风速标志显示;
extern void refreshWDT(void) ;
void del1s(void);                           //延时;
void openlcd(void);                         //LCD初始程序;   
/***********************************
入口地址:display()
全局变量:out
函数调用:write(unsigned char add,unsigned char da,bit d),numten(unsigned char x),numone(unsigned char x),openlcd();
功能:对液晶显示器的显示内容进行显示和刷新;
************************************/
void display(void)                          //显示所有该显示的模块;
	{
	openlcd();                                  //LCD初始化;
	wind(out.wind);                             //风速显示刷新;
	write(4,3,1);
	numone(setdata.tempnum%10);                 //数码个位的显示;
	numten(setdata.tempnum/10);                 //数码十位的显示;
		if(out.heat==1)                         //制冷制热模式标志的刷新;
			{                                   
			write(2,1,1);                       //显示制热标志;
	   		write(2,2,0);                       //关闭制冷标志; 
			}
	  	else 
			{
			write(2,2,1);                       //显示制冷标志;
			write(2,1,0);                       //关闭制热标志;
			}
		if(out.manual==1)                       //手动自动标志的刷新;
			{
			write(3,1,1);                       //显示手动标志;
			write(3,2,0);                       //关闭自动标志;
			}
		else 
			{
			write(3,2,1);                       //显示自动标志;
			write(3,1,0);                       //关闭手动标志;
			}
	}
/*************************************************************************************
入口地址:del1s()																	 *
局部变量:out																		 *
函数调用:delay10ms();  															 *
功能:对液晶显示器的显示内容进行显示和刷新;                                         *     
**************************************************************************************/
void del1s(void)
	{
	unsigned char i;
	for(i=0;i<20;i++)
		{
		delay10ms();
		}
	}
/*************************************************************************************
入口地址:delay10ms()																 *
局部变量:out																		 * 															 *
功能:对液晶显示器的显示内容进行显示和刷新;                                         *     
**************************************************************************************/
void delay10ms(void)
	{
	unsigned int aa,bb;
	refreshWDT() ;
	for(aa=0;aa<670;aa++)
		{
		for(bb=0;bb<30;bb++)
			{}
		}
	}
/**********************************************
入口地址:keyscan()
功能:键盘扫描,屏保处理;
***********************************************/
keyscan(void)
	{  
	unsigned char num ; 
	p1mdout |= 0xf0 ;  
	p1 |= 0xf0 ;
	num = p1 ;                                      //读取键盘数据;
	num = (num >> 4) ;
	switch(num)                                  //键盘开关量入口;
		{
		case 0x0f:return(0);break;               //无键按下时返回值为零;
		case 0x0b:return(1);break;               //设置键返回1;                                                                           
		case 0x0e:return(2);break;               //减少键返回2;
	 	case 0x0d:return(3);break;               //增加键返回3;
	 	case 0x07:return(4);break;               //POWER键返回4;
		}
	p1mdout &= ~0xf0 ;
	}

/*************************************************************************************
入口地址:wind(x)															 		 *
输入:unsigned char x																 *		 * 															 *
功能:对液晶显示器风速的显示内容进行显示和刷新;                                         *     
**************************************************************************************/
void wind(unsigned char x)
	{
	switch(x)
		{
		case 0:                         //显示风速为0;
			write(0,3,0);
			write(0,2,0);
			write(0,1,0);		
			write(1,2,0);
			write(1,3,0);
			write(1,1,1);
			break;
		case 1:                         //显示风速为10%到20%;
		case 2:
			write(0,3,0);
			write(0,2,0);
			write(0,1,0);
			write(1,3,0);
			write(1,2,1);
			write(1,1,1);
			break;
		case 3:                         //显示风速为30%到40%;
		case 4:
			write(0,3,0);
			write(0,2,0);
			write(0,1,0);
			write(1,3,1);
			write(1,2,1);
			write(1,1,1);
			break;
		case 5:                         //显示风速为50%到60%;
		case 6:
			write(0,3,1);
			write(0,2,0);
			write(0,1,0);
			write(1,3,1);
			write(1,2,1);
			write(1,1,1);
			break;
		case 7:                         //显示风速为70%到80%;
		case 8:
			write(0,3,1);
			write(0,2,1);
			write(0,1,0);
			write(1,3,1);
			write(1,2,1);
			write(1,1,1);
			break;
		case 9:                        //显示风速为90%到100%;
		case 10:
			write(0,3,1);
			write(0,2,1);
			write(0,1,1);
			write(1,3,1);
			write(1,2,1);
			write(1,1,1);
			break;
		}
	}
/*************************************************************************************
入口地址:numone(b)															 		 *
输入:unsigned char b																 *
局部变量:unsigned char u,m,q														 * 														
功能:对液晶显示器数码个位的显示内容进行显示和刷新;                                         *     
**************************************************************************************/
/************************************************
    u   0	1	2	3	4	5	6	7
m
0       
1
2
3   
*************************************************/
void numone(unsigned char b)                  //b选择数码显示的一维数组
	{
	unsigned char u;                          //如上图中的u对应模块的纵坐标;
	unsigned char m;                          //如上图中的m对应模块的横坐标; 
	unsigned char q;                          //数码显示数组的二维数组;
	bit z;                                    //显示标志,为1显示,为0不显示;
	q=0;                                      //二维数组指针清0;
	u=4;                                      //选择4纵列;
		for(m=0;m<3;m++)                      //对横行的选择;
			{
			z=lcdonemap[b][q];                //读取数码模块的值,为1显示,为0不显示;
			write(u,m,z);                     //写数码模块;
			q++;                              //数码指针加1;
			}
	u=5;                                      //选择5纵列;
		for(m=0;m<4;m++)                      //对横行的选择;
			{
			z=lcdonemap[b][q];                //读取数码模块的值,为1显示,为0不显示;
			write(u,m,z);                     //写数码模块;
			q++;                              //数码指针加1;
			}
	}
/*************************************************************************************
入口地址:numten(a)															 		 *
输入:unsigned char a																 *
局部变量:unsigned char u,m,q														 * 														
功能:对液晶显示器数码十位的显示内容进行显示和刷新;                                         *     
**************************************************************************************/
void numten(unsigned char a)
	{
	unsigned char u,m,q;
	bit z;
	q=0;
	for(u=6;u<8;u++)                        //选择纵列;
		{
		for(m=0;m<4;m++)                    //对横行的选择;
			{
			z=lcdtenmap[a][q];              //读取数码模块的值,为1显示,为0不显示;
			write(u,m,z);                   //写数码模块
			q++;                            //数码指针加1;
			}
		}
	}
/*************************************************************************************
入口地址:write(add,da,d)															 		 *
输入:unsigned char add,da,d																 *
局部变量:unsigned char var														 * 														
功能:对液晶显示器的显示内容进行显示和刷新;                                         *     
**************************************************************************************/
void write(unsigned char add,unsigned char da,bit d)
	{
	unsigned char var;	                       //HT1621显示对应的代码;
	if(d)                                      //d为1要求显示对应位;
		{	
		switch(da)                             //显示位的开关量;
			{
			case 0:var|=0x01;break;            //显示器存储第1行的选择;
			case 1:var|=0x02;break;            //显示器存储第2行的选择;
			case 2:var|=0x04;break;            //显示器存储第3行的选择;
			case 3:var|=0x08;break;            //显示器存储第4行的选择;
			}
		}
	else                                       //d为0要求不显示对应的位;
		{
		switch(da)                             //不显示位的开关量;
			{
			case 0:var&=0xfe;break;            //不选择显示器存储第1行;
			case 1:var&=0xfd;break;            //不选择显示器存储第2行;
			case 2:var&=0xfb;break;            //不选择显示器存储第3行;
			case 3:var&=0xf7;break;            //不选择显示器存储第4行;
			}
		}
	writemem(add,var);
	}
/*************************************************************************************
入口地址:writemem()															 		 *
输入:unsigned char add,var;																 *
局部变量:unsigned char temp,i;														 * 														
功能:对液晶显示器的显示内容进行显示和刷新;                                         *     
**************************************************************************************/
void writemem(unsigned char add,unsigned char var)
	{
	unsigned char temp,i;
	lcdcs=0;                                 //显示器控制芯片的选择位有效;
	delay();
	writeic(1);                              //写数据指令;
	writeic(0);
	writeic(1);
	for(i=0;i<6;i++)                         //6位地址的处理;
		{
		temp=add&0x20;                       //地址最高位屏避;
		if(temp)                             //地址为1写地址;
			{
			writeic(1);                      //写地址;
			}
		else                                 //为0不写;
			{
			writeic(0);                      //不写地址;
			}
		add=add<<1;                          //地址数据左移1位;
		}
	for(i=0;i<4;i++)                         //4位数据的处理;
		{
		temp=var&0x01;                       //最低位有效;
		if(temp)                             //如果最低位有效就写1; 
			{
			writeic(1);                      //写数据1;
			}
		else                                 //如果最低位无效就写0;
			{
			writeic(0);                      //写0;
			}
		var=var>>1;                          //数据位右移;
		}
	lcdcs=1;                                 //显示器控制芯片的选择无效;
	delay();                                 //延时;
	} 
/********************************
入口地址:delay
备注:液晶显示器所使用的工作频率决定延时的长短;
*********************************/
void delay(void)
	{
	unsigned int i;
	for(i=0;i<20;i++)
		{;}
	}
/********************************
入口地址:writeic()
备注:写数据;
*********************************/
void writeic(bit x)
	{
	lcddata=x;                              //对显示控制器进行写操作;
	lcdwr=0;                                //数据写有效;
	delay();                                //延时;
	lcdwr=1;                                //数据写无效; 
	delay();                                //延时;
	}
/********************************
入口地址:openlcd()
备注:打开LCD
*********************************/
void openlcd(void)
	{
	unsigned char i;
	bit z;
	lcdcs=0;
	delay();
	for(i=0;i<12;i++)
		{
		z=openlcdnum[0][i];
		writeic(z);
		}
	lcdcs=1;
	delay();
	lcdcs=0;
	delay();
	for(i=0;i<12;i++)
		{
		z=openlcdnum[1][i];
		writeic(z);
		}
	lcdcs=1;
	delay();
	lcdcs=0;
	delay();
	for(i=0;i<12;i++)
		{
		z=openlcdnum[2][i];
		writeic(z);
		}
	delay();
	}
/********************************
入口地址:closelcd()
备注:关闭LCD
*********************************/
void closelcd(void)
	{
	unsigned char i;
	bit z;
	lcdcs=0;
	delay();
	for(i=0;i<12;i++)
		{
		z=openlcdnum[3][i];
		writeic(z);
		}
	lcdcs=1;
	delay();
	lcdcs=0;
	delay();
	for(i=0;i<12;i++)
		{
		z=openlcdnum[4][i];
		writeic(z);
		}
	lcdcs=1;
	delay();
	}
/********************************
入口地址:closewind()
备注:关闭风速显示;
*********************************/
void closewind(void)
	{
	write(4,3,0);
	write(0,0,0);
	write(1,2,0);
	write(1,3,0);
	write(0,3,0);
	write(0,2,0);
	write(0,1,0);
	write(1,1,0);
	}
/********************************
入口地址:closetemp()
备注:关闭数码显示;
*********************************/
void closetemp(void)
	{
	write(4,0,0);
	write(4,1,0);
	write(4,2,0);
	write(4,3,1);
	write(5,0,0);
	write(5,1,0);
	write(5,2,0);
	write(5,3,0);
	write(6,0,0);
	write(6,1,0);
	write(6,2,0);
	write(6,3,0);
	write(7,0,0);
	write(7,1,0);
	write(7,2,0);
	write(7,3,0);
	delay10ms();
	}
/********************************
入口地址:closemode()
备注:关闭自动和手动模式;
*********************************/
void closemode(void)
	{
	write(3,1,0);
	write(3,2,0);
	delay10ms();
	}
/********************************
入口地址:closekind()
备注:关闭制冷和制热;
*********************************/
void closekind(void)
	{
	write(2,1,0);
	write(2,2,0);
	delay10ms();
	}

⌨️ 快捷键说明

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