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

📄 lcd.c

📁 该程序文件作为密码小键盘项目的主程序模块
💻 C
📖 第 1 页 / 共 2 页
字号:
        setpages(p->y/8+j);
        setpagem(p->y/8+j);

	     for(i=p->x;i<p->w+p->x;i++)
		  {
			   if(i<61)
			   {//是主控制器控制的列
				    setcolm(i);
				    OutMD(0);
			   }
			   else
			   {//是从控制器控制的列
				    setcols(i-61);
				    OutSD(0);
			   }
			   buf++;
		  }
    }
}

/*
调用方式:void drawbmp(struct PIC *p)
函数说明:画图程序
入口参数: 图形结构体指针
出口参数:无
内部函数:是
*/
void drawbmp(struct PIC *p)
{//y must 0,8,16 or 24
    /*display a 8*8 bitmap */
    uchar i;
	 uchar *buf;

	 buf=p->dat;


    if(p->h==16)
	 {	  
	     setpages(p->y/8+2);
         setpagem(p->y/8+2);
	     for(i=0;i<p->w+p->x;i++)
		  {
		       if(i < p->x)
			   {
				   setcolm(i);
				   OutMD(0);      
			   }
			   else if(i>=p->x && i<61)
			   {//是主控制器控制的列
			       
				    setcolm(i);
				    OutMD(*buf);
					buf +=2;
			   }
			   else
			   {//是从控制器控制的列
				    setcols(i-61);
				    OutSD(*buf);
					buf +=2;
			   }
			   //buf +=2;
          }

		  buf=p->dat+1;
    	  setpages(p->y/8+3);
    	  setpagem(p->y/8+3);

	      for(i=0;i<p->w+p->x;i++)
		  {
		       if(i < p->x)
			   {
				   setcolm(i);
				   OutMD(0);      
			   }
			   else if(i>=p->x && i<61)
			   {//是主控制器控制的列
				    setcolm(i);
				    OutMD(*buf);
					buf +=2;
			   }
			   else
			   {//是从控制器控制的列
				    setcols(i-61);
				    OutSD(*buf);
					buf +=2;
			   }
			   //buf +=2;
		  }
    }
	if(p->h==32)
	 {	  
	     setpages(p->y/8+2);
         setpagem(p->y/8+2);
	     for(i=p->x;i<120;i++)
		  {
			   if(i<61)
			   {//是主控制器控制的列
				    setcolm(i);
				    OutMD(*buf);
			   }
			   else
			   {//是从控制器控制的列
				    setcols(i-61);
				    OutSD(*buf);
			   }
			   buf +=2;
          }

		  buf=p->dat+1;
    	  setpages(p->y/8+3);
    	  setpagem(p->y/8+3);

	      for(i=p->x;i<120;i++)
		  {
			   if(i<61)
			   {//是主控制器控制的列
				    setcolm(i);
				    OutMD(*buf);
			   }
			   else
			   {//是从控制器控制的列
				    setcols(i-61);
				    OutSD(*buf);
			   }
			   buf +=2;
		  }

		  buf=p->dat;
		  setpages(p->y/8);
          setpagem(p->y/8);
	      for(i=p->x;i<p->w+p->x-120;i++)
		  {
			   if(i<61)
			   {//是主控制器控制的列
				    setcolm(i);
				    OutMD(*buf);
			   }
			   else
			   {//是从控制器控制的列
				    setcols(i-61);
				    OutSD(*buf);
			   }
			   buf +=2;
          }

		  buf=p->dat+1;
    	  setpages(p->y/8+1);
    	  setpagem(p->y/8+1);

	      for(i=p->x;i<p->w+p->x-120;i++)
		  {
			   if(i<61)
			   {//是主控制器控制的列
				    setcolm(i);
				    OutMD(*buf);
			   }
			   else
			   {//是从控制器控制的列
				    setcols(i-61);
				    OutSD(*buf);
			   }
			   buf +=2;
		  }
    }
}

/*
调用方式:void init_lcd(void)
函数说明:lcd初始化程序
入口参数: 无
出口参数:无
用到的全局变量:无
调用函数:void OutMI(uchar a);
          void OutSI(uchar a);
*/
void init_lcd(void)
{	    

    //OutMI(0XE3);                  /***复位***/
    //OutSI(0XE3);
    //OutMI(0X56);                  /***电源保护****/
    //OutSI(0X56);
    //OutMI(0XA4);                  /***动态驱动***/
    //OutSI(0XA4);
    //OutMI(0XA9);                  /***1/32占空比***/
    //OutSI(0XA9);
    //OutMI(0XA1);                  /***ADC选择,选择顺时针读入显示RAM数据***/
    //OutSI(0XA1);
    //OutMI(0XE0);                  /***写模式***/
    //OutSI(0XE0);
	//OutMI(0XAF);                  /***开显示器***/
    //OutSI(0XAF);
    //OutMI(0X00);                  /***设置主控制和从控制选择显示列为0***/
    //OutSI(0X00);
    //OutMI(0XC0);                  /***设置主控制和从控制选择显示行为0***/
    //OutSI(0XC0);

	OutMI(0XE3);                  /***复位***/
    OutSI(0XE3);
	OutMI(0XAE);                  /***关显示器***/
    OutSI(0XAE);
	OutMI(0XA4);                  /***OFF 动态驱动***/
    OutSI(0XA4);
	OutMI(0XA9);                  /***1/32占空比***/
    OutSI(0XA9);
	//OutMI(0XA1);                  /***ADC选择,选择顺时针读入显示RAM数据***/
    //OutSI(0XA1);
	OutMI(0XA0);                  /***ADC选择,选择~顺时针读入显示RAM数据***/
    OutSI(0XA0);
	OutMI(0XEE);                  /***OFF 读修改写模式***/
    OutSI(0XEE);
	OutMI(0X00);                  /***设置主控制和从控制选择显示列为0***/
    OutSI(0X00);
    OutMI(0XC0);                  /***设置主控制和从控制选择显示行为0***/
    OutSI(0XC0);
	OutMI(0XAF);                  /***开显示器***/
    OutSI(0XAF);
	
	//OutMI(0XAF);                  /***开显示器***/
    //OutSI(0XAF);
    //OutMI(0X00);                  /***设置主控制和从控制选择显示列为0***/
    //OutSI(0X00);
    //OutMI(0XC0);                  /***设置主控制和从控制选择显示行为0***/
    //OutSI(0XC0);
	

}

/*
调用方式:void lcd(uchar order, uchar num)
函数说明:lcd显示程序
入口参数: order:显示数据标志字符,num:*的数量
出口参数:无
用到的全局变量:无
调用函数:void drawbmp(struct PIC *p);
          void clearbmp(struct PIC *p);
*/
void lcd(uchar order, uchar num)
{
    struct PIC This;
	 if ('a' == order)
	 {/*欢迎使用*/

	      This.x=0;
		  This.y=0;
		  This.w=122;
		  This.h=32;
		  clearbmp(&This); 
						   
		  This.x=16;
		  This.y=0;
		  This.w=88;
		  This.h=16;
		  This.dat=huanyingshiyong;
		  drawbmp(&This);
	 }
	 else if('b' == order)
	 {/*请输入密码*/
		  This.x=0;
		  This.y=0;
		  This.w=122;
		  This.h=32;
		  clearbmp(&This);

		  This.x=24;
		  This.y=0;
		  This.w=80;
		  This.h=16;
		  This.dat=qing;
		  drawbmp(&This);
    }
	 else if ('c' == order)
	 {  /*请重新输入密码*/
		  This.x=0;
		  This.y=0;
		  This.w=122;
		  This.h=32;
		  clearbmp(&This);

		  This.x=24;
		  This.y=0;
		  This.w=80;
		  This.h=16;
		  This.dat=chongxin;
		  drawbmp(&This);
	 }
	 else if ('d' == order)
	 {   /*显示'*'*/
	     
		  if(num >= 0 && num < 30)
		  {	  
		      This.x=0;
			  This.y=0;
		      This.w=122;
			  This.h=32;
		      clearbmp(&This);

		      This.x=0;
			   This.y=0;
		      This.w=(num+1)*8;
			   This.h=16*(num/15+1);
		      This.dat=xing;
		      drawbmp(&This); 
		  }	  
    }
	else if ('e' == order)
	 {  /*clrlcd*/
		  This.x=0;
		  This.y=0;
		  This.w=122;
		  This.h=32;
		  clearbmp(&This);
	 }  
}

⌨️ 快捷键说明

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