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

📄 wdd.c

📁 单片机液晶界面系统,128*64,整个系统中容易开发
💻 C
📖 第 1 页 / 共 3 页
字号:
         n=0;//初始化设定位为第零位,此后n指向当前所设定的位
	  if(dat>999999){dat=999999;}//最打值为999999
	  dat_buf[0]=dat/100000;                 //求BCD码
	  dat=dat%100000;dat_buf[1]=dat/10000;
	  dat=dat%10000;dat_buf[2]=dat/1000;
	  dat=dat%1000;dat_buf[3]=dat/100;
	  dat=dat%100;dat_buf[4]=dat/10;
	  dat_buf[5]=dat%10;

	  NO_CPLdisp(5,48,dat_buf[0]);
	  for(i=1;i<6;++i)
	  {NO_disp(5,i*8+48,dat_buf[i]);
	  	}

		while(1)
		{i=key();
		 switch(i)
		    {case key_SET:
		 	         {	Show_new();
		 	         	 dat=(long)dat_buf[0]*100000;
		 	         	 dat+=(long)dat_buf[1]*10000;
		 	         	 dat+=(long)dat_buf[2]*1000;
		 	                 dat+=(long)dat_buf[3]*100;
		 	                 dat+=dat_buf[4]*10;
		 	                 dat+=dat_buf[5];
		 	        	  return(dat);
		 	         }
		   	case key_UP:
		 		       {if(++dat_buf[n]>9)dat_buf[n]=0;
		 		       	NO_CPLdisp(5,n*8+48,dat_buf[n]);
		 		       	break;
		 		       }
		   	case key_DOWN:
		 		       {if(--dat_buf[n]==255)dat_buf[n]=9;
		 		       	NO_CPLdisp(5,n*8+48,dat_buf[n]);
		 		       	break;
		 		       }
		    case key_R:
		 		      {NO_disp(5,n*8+48,dat_buf[n]);
		 		      	if(++n>5)n=0;
		 		       NO_CPLdisp(5,n*8+48,dat_buf[n]);
		 		       break;
		 		      }

		  	case key_L:
		 		      {NO_disp(5,n*8+48,dat_buf[n]);
		 		      	if(--n==255)n=5;
		 		       NO_CPLdisp(5,n*8+48,dat_buf[n]);
		 		       break;
		 		      	}
		 	 case key_EXIT :
		 		       {Show_new();return temp;
		 		       }
		 	case key_CLR:break;
		  	default :break;
		 	 }

	  }
   }

}
//---------------------------------------------------------------------------------
//号码输入框,可在画面显示(最多16字)提示信息,
//输入:cha为要显示提示信息内容数组的首地址,该数组存放要显示的字符在字库点阵CHA_lib[][]中第一维的位置
//输入:n为要提示信息的字符个数
//输入:NO为初始号码数组的首地址,
//返回:设定的号码数组的首地址;按确定键后返回号码数组为设定的号码;如果按下退出键,则为输入的初始号码
//说明:退出后自动刷新显示,恢复界面
//---------------------------------------------------------------------------------
unsigned char *Inputbox_NO(unsigned char *cha,unsigned char n,unsigned char *NO)
{unsigned char i;
   Clr_Scr();
	 if(n<9)
	 {for(i=0;i<n;i++)
	 	 {cha_disp(3,i*16+(8-n)*8,cha[i]);
	 	 	}
	 	}
	else
	 {if(n>16)n=16;//最大只能显示16个字符
	 	for(i=0;i<8;i++)
	 	 {cha_disp(1,i*16,cha[i]);
	 	 	}
	 	 for(i=8;i<n;i++)
	 	 {cha_disp(3,i*16+(16-n)*8,cha[i]);
	 	 	}
	 	}
     {

         static unsigned char dat_buf[6];//最大输入六位
           n=0;//初始化设定位为第零位,此后n指向当前所设定的位
	 for(i=0;i<6;++i)
	 {if(NO[i]<10){dat_buf[i]=NO[i];}
	 	else{dat_buf[i]=9;}
	 	}

	 NO_CPLdisp(5,48,dat_buf[0]);
	  for(i=1;i<6;++i)
	  {NO_disp(5,i*8+48,dat_buf[i]);
	  	}


		while(1)
		{i=key();
		 switch(i)
		    {case key_SET:
		 	         {	Show_new();
		 	        	  return(dat_buf);
		 	         }
		   	case key_UP:
		 		       {if(++dat_buf[n]>9)dat_buf[n]=0;
		 		       	NO_CPLdisp(5,n*8+48,dat_buf[n]);
		 		       	break;
		 		       }
		   	case key_DOWN:
		 		       {if(--dat_buf[n]==255)dat_buf[n]=9;
		 		       	NO_CPLdisp(5,n*8+48,dat_buf[n]);
		 		       	break;
		 		       }
		        case key_R:
		 		      {NO_disp(5,n*8+48,dat_buf[n]);
		 		      	if(++n>5)n=0;//如果为最右边
		 		       NO_CPLdisp(5,n*8+48,dat_buf[n]);
		 		       break;
		 		      }

		  	case key_L:
		 		      {NO_disp(5,n*8+48,dat_buf[n]);
		 		      	if(--n==255)n=5;//如果为最左边
		 		       NO_CPLdisp(5,n*8+48,dat_buf[n]);
		 		       break;
		 		      	}
		 	 case key_EXIT :
		 		       {Show_new();for(i=0;i<6;++i){dat_buf[i]=NO[i];} ;return dat_buf;
		 		       }
		 	case key_CLR:break;
		  	default :break;
		 	 }

	  }
     }

}
//---------------------------------------------------------------------------------
//
//选项往下移一项,Select_NO加1始终指向当前选项,Select_NO最大为Select_MAX
//
//
//---------------------------------------------------------------------------------
void  Select_down()
{unsigned char i;
  {for(i=0;i<8;i++)cha_disp(Select_NO*2,i*16,Tree[Menu_NO].DISP[Select_NO][i]);}
 ++Select_NO;
 if(Select_NO<=Select_MAX)//如果小于Select_MAX,说明未到显示底部
  {if((Tree[Menu_NO].DISP[Select_NO][0]!=10)||(Tree[Menu_NO].DISP[Select_NO][1]!=10)||\
  	   (Tree[Menu_NO].DISP[Select_NO][2]!=10)||(Tree[Menu_NO].DISP[Select_NO][3]!=10)||\
  	   (Tree[Menu_NO].DISP[Select_NO][4]!=10)||(Tree[Menu_NO].DISP[Select_NO][5]!=10)||\
  	   (Tree[Menu_NO].DISP[Select_NO][6]!=10)||(Tree[Menu_NO].DISP[Select_NO][7]!=10))//判断是否存在下一选项

      {for(i=0;i<8;i++)cpl_disp(Select_NO*2,i*16,Tree[Menu_NO].DISP[Select_NO][i]); }

   else//如果没有下一选项,恢复上一选项反选
    {--Select_NO;if(Select_NO==255){Select_NO=0;}
     {for(i=0;i<8;i++)cpl_disp(Select_NO*2,i*16,Tree[Menu_NO].DISP[Select_NO][i]);}
    }
  }
 else if(Tree[Menu_NO].add_menu[1]!=0)//如果已到底部,则判断是否同目录下是否含有其他的扩展目录
       {Select_NO=0;Menu_NO=Tree[Menu_NO].add_menu[1];
        Show_new();
       }
 else//Select_NO=Select_MAX;已到底部,而且同目录下不含有其他的目录
       {Select_NO=Select_MAX;
       	for(i=0;i<8;i++)cpl_disp(Select_NO*2,i*16,Tree[Menu_NO].DISP[Select_MAX][i]);
       	}
}
//---------------------------------------------------------------------------------
//
//选项往上移一项,Select_NO减1始终指向当前选项,Select_NO最小为0
//
//            
//---------------------------------------------------------------------------------
void  Select_up()
{unsigned char i;            
 for(i=0;i<8;i++){cha_disp(Select_NO*2,i*16,Tree[Menu_NO].DISP[Select_NO][i]);}
 --Select_NO;
 if(Select_NO!=255)
  { if((Tree[Menu_NO].DISP[Select_NO][0]!=10)||(Tree[Menu_NO].DISP[Select_NO][1]!=10)||\
  	   (Tree[Menu_NO].DISP[Select_NO][2]!=10)||(Tree[Menu_NO].DISP[Select_NO][3]!=10)||\
  	   (Tree[Menu_NO].DISP[Select_NO][4]!=10)||(Tree[Menu_NO].DISP[Select_NO][5]!=10)||\
  	   (Tree[Menu_NO].DISP[Select_NO][6]!=10)||(Tree[Menu_NO].DISP[Select_NO][7]!=10))//判断是否存在下一选项

      {for(i=0;i<8;i++)cpl_disp(Select_NO*2,i*16,Tree[Menu_NO].DISP[Select_NO][i]); }

   else//如果没有下一选项,恢复上一选项反选
    {++Select_NO;if(Select_NO>Select_MAX){Select_NO=Select_MAX;}
     {for(i=0;i<8;i++)cpl_disp(Select_NO*2,i*16,Tree[Menu_NO].DISP[Select_NO][i]);}
    }
  }
 else if(Tree[Menu_NO].add_menu[0]!=0)//如果已到顶部,则判断是否同目录下是否含有其他的扩展目录
       {Select_NO=0;Menu_NO=Tree[Menu_NO].add_menu[0];
        Show_new();
       }
 else//已到顶部,而且同目录下不含有其他的目录
       {Select_NO=0;
       	for(i=0;i<8;i++)cpl_disp(Select_NO*2,i*16,Tree[Menu_NO].DISP[0][i]);
       	}
}
//---------------------------------------------------------------------------------
//
//返回上一级菜单目录
//Menu_NO将指向该菜单目录
//
//---------------------------------------------------------------------------------
void Go_last(void)
{Select_NO=0;Menu_NO=Tree[Menu_NO].last;
	if(Menu_NO==0){Select_NO=3;}//如果返回首界面,则指向最后一栏:“进入”
 Show_new();
}
//-------------------------------------------------------------------------------------
//
//如果当前Select_NO指向的选项有子菜单
//进入下一级菜单(子菜单)目录,Menu_NO将指向该菜单目录
//
//--------------------------------------------------------------------------------------
Go_next()
{if(Tree[Menu_NO].next[Select_NO]!=0)
	{
	Menu_NO=Tree[Menu_NO].next[Select_NO];Select_NO=0;
 Show_new();
 }
}

//-------------------------------------------------------------------------------------
//
//
//菜单(子菜单)目录菜单向下翻页,Menu_NO将指向该菜单目录
//
//--------------------------------------------------------------------------------------
Go_add_menu_d()
{if(Tree[Menu_NO].add_menu[1]!=0)
	{
	Menu_NO=Tree[Menu_NO].add_menu[1];Select_NO=0;
 Show_new();
 }
}

//-------------------------------------------------------------------------------------
//
//
//菜单(子菜单)目录菜单向上翻页,Menu_NO将指向该菜单目录
//
//--------------------------------------------------------------------------------------
Go_add_menu_u()
{if(Tree[Menu_NO].add_menu[0]!=0)
	{
	Menu_NO=Tree[Menu_NO].add_menu[0];Select_NO=0;
 Show_new();
 }
}

//--------------------------------------------------
//常用字符组合(可不必定义,)
unsigned char code QSRMM[5]={15,16,17,24,25};//请输入密码
unsigned char code MMCW[4]={24,25,18,19};//密码错误
/*
unsigned char code
unsigned char code
unsigned char code*/
//*****************************************************************************************
//重要功能实现程序模块
//----------------------------------------------------------------------------------------
//输入键执行程序
//根据状态机Menu_NO、Select_NO执行不同的操昨
//各子菜单,各选项下,按下SET键需要实现的功能基本在该模块实现
//主程序调用该函数
//-----------------------------------------------------------------------------------------
void function_action(void)
{unsigned int i;
	i=(Menu_NO<<8)|(Select_NO);//求状态组合
	switch(i)                            //Inputbox_dat(QSRMM,5,999999)
 		{case 0x0003://在开机界面下
		 	        {if(Inputbox_dat(QSRMM,4,999999)!=199999){Msgbox(MMCW,4,1);break;}
		 	         else {GO_next();break;}
		 	         	}

		  default :{GO_next();break;}//其他未定义情况,进入下一级菜单
 			}

	}







/**************主程序************************/

void main(void)
{unsigned char i;

 unsigned char temp=32;                   //ASCII码控制范围起始值
 delay(10000);
 Menu_NO=0;Select_NO=3;
 init_lcd();                      //液晶初始化
 Clr_Scr();

 cha_disp(1,8,38);
 cha_disp(3,24,39);
 cha_disp(5,16,40);
 cha_disp(5,36,41);
 cha_disp(5,56,41);
 for(;;)
 {delay(60000);
 for(i=0;i<64;i++)
 	{
    Cs2=1;         //
    Cs1=0;
    delay(10);
 		Lcdwritecom(Start_Line+i);
 		Cs2=0;         //
    Cs1=1;
    delay(10);
 		Lcdwritecom(Start_Line+i);
 		delay(2000);
 		}
 	delay(60000);


 	}


while(1)
{i=key();
 if(i!=255)
 	{ switch(i)
 		{      case key_SET:
		 	         {function_action();
		 	         	break;
		 	         	}
		   	case key_UP:
		 		       { Select_up();
		 		       	break;
		 		       }
		   	case key_DOWN:
		 		       { Select_down();
		 		       	break;
		 		       }
		       case key_R:
		 		      {Go_add_menu_u();
		 		       break;
		 		      }

		      case key_L:
		 		      {Go_add_menu_d();
		 		       break;
		 		      	}
		      case key_EXIT :
		 		       {Go_last();

		 		       }
		     case key_CLR:{}break;
		  default :   {}break;
 			}
 	i=255;//已处理了键值
 	}
	}

}












⌨️ 快捷键说明

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