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

📄 lcd_menu.c

📁 c51 led菜单 程序 功能 上下选择菜单
💻 C
字号:
#include <REG51.h>
#include<math.h>
#include<INTRINS.H>

#define Uchar unsigned char
#define Uint  unsigned int
/***********液晶显示器接口引脚定义***************/
sbit	Elcm=	   P1^0;
sbit	Rwlcm=	P1^1;
sbit	Dilcm=	P1^2;	
sbit	CS2LCM=	P1^3;
sbit	CS1LCM=	P1^4;//
/*这个连接只是做实验的临时接法。*/
sfr Datalcm=0xA0;//p2 yin jiao
#define KEYP ((P3>>4)&0X0F) 

#define  UP   1
#define  DOWN 2
#define  ENTER 4
#define  BACK  8 //特殊按键的编码号

#define  AD 1
#define  KEY 2 //数据数组排列安排

#define LCDMS 0
#define LCDMB 40 
//菜单边界
#define LCDDS 45 //数据起点
#define LCDDB 85 //数据显示边界
#define LCDUS 90 //单位显示起始
#define LCDPS 120 //小数点位置

/******************数组列表*********************/
Uchar code Ezk[];		/*ASCII常规字符点阵码表	*/
Uchar code Hzk[];		/*自用汉字点阵码表	*/
/********************************/
//定义字符串数组		*/
/********************************/
Uchar code MENU[7][5]={"MENU ","ADOUT","KEY  ","menu3","menu4","menu5","menu6"};
Uchar code MENU_MAIN1[]={0X80,0X81};
Uchar code MENU_MAIN2[]={0X82,0X83};
Uchar code MENU_MAIN3[]={0X84,0X85};
Uchar code UNIT[7][3]={"   "," MV","   ","mv2","mv3","mv4","mv5",};
Uchar code SIGN[1]='*';
Uchar  DISDATA[7][5]={"12345"};
unsigned int  SHUJU[6]={12345,20000,30000,40000,50000,60000};
//Uchar  disdata1[7]="12345";
//Uchar  disad[7];
Uchar  adbuff[2];
Uchar  LINE=0;


#include "ziku.h"
#include "lcddir.h"
#include "tupian.h"
void Dismenu(void);
void int2str(char *ss,int ii);
void   uartcsh();

void Delay1s(void)
 {
  unsigned char h,i,j,k;
 for(h=5;h>0;h--)
 for(i=4;i>0;i--)
 for(j=116;j>0;j--)
 for(k=214;k>0;k--);
 }   

	
void int2str(char *ss,int ii)

       {  
         ss[4]=ii%10+48;
         ss[3]=(ii/10)%10+48;
         ss[2]=(ii/100)%10+48;
         //ss[2]='.';
         ss[1]=(ii/1000)%10+48;
         ss[0]=(ii/10000)%10+48;
        }

//初始化串行口
void   uartcsh()//buad 1200
	  {
	SM0=0;
	SM1=1;
	REN=1;
	TI=0;
	RI=0;
	PCON=0;
	TH1=0x9c;
	TL1=0X9c;
	TMOD=0X20;
	EA=1;
	ET1=0;
	ES=1;
	TR1=1;
	RI=0;
	TI=0;
	  }



   


Uchar Getkey(void)
    { Uchar temp9;
	   temp9=0;
 	   temp9=KEYP;
      if(temp9!=0)
	     { while(KEYP!=0);
	      return(temp9);
          }
		else return(0);
		}
	

	
void Keyfun(void)
    { Uchar temp8;
 	   temp8=Getkey();
        switch(temp8)
		    {case  UP :
			           LINE++;
						  if(LINE>3) LINE=0;
			           Dismenu();break;
			  case  DOWN:
			           if(LINE<1) LINE=3;
			           LINE--;
						  Dismenu();break;
			  default:_nop_();
			  }

			}

void Dismenu(void)
   {	
	Display(0,LCDMS+5,MENU_MAIN1,2);
	Display(0,LCDDS+5,MENU_MAIN2,2);
	Display(0,LCDUS+5,MENU_MAIN3,2);
   Display(2,LCDMS,MENU[LINE+1],5);
   Display(4,LCDMS,MENU[LINE+2],5);
	Display(6,LCDMS,MENU[LINE+3],5);
   Display(2,LCDUS,UNIT[LINE+1],3);
	Display(4,LCDUS,UNIT[LINE+2],3);
	Display(6,LCDUS,UNIT[LINE+3],3);
	Display(4,LCDPS,SIGN,1);

   
	 }
/********************************/
/* 演示主程序			*/
/********************************/

void main(void)

{
   int temp_ad;

	col=0;
	row=0;
	Delay(40);		/*延时大约40Ms,等待外设准备好	*/
	Lcminit();/*液晶模块初始化,包括全屏幕清屏*/
	uartcsh();
	  
	  col=0;
	  row=0;
	  for(row=0;row<8;row++)
	      for(col=0;col<LCMLIMIT;col++)
	           { Wrdata(nBitmapDot[row*128+col]);}
     while(Getkey()==0);
   Lcminit();
   int2str(DISDATA[0],SHUJU[AD]);
	Display(6,LCDDS,DISDATA[0],5);
	temp_ad=adbuff[1];
	SHUJU[AD]=(temp_ad<<7)+adbuff[0];
	int2str(DISDATA[AD],SHUJU[AD]);
	Display(2,LCDDS,DISDATA[AD],5);
  
	int2str(DISDATA[KEY],SHUJU[KEY]);
	Display(4,LCDDS,DISDATA[KEY],5);
	Dismenu();	

	while(1)
	{ 
     Keyfun();

}
 

}


void getadshuju() interrupt 4
	{
    char temp;
    temp=SBUF;
	 if(temp&0x80)
    adbuff[1]=(temp&0x7f);
	 else
	 adbuff[0]=temp;
    P0=temp;
	 RI=0;
  	 TI=0;
	 ES=1;}

⌨️ 快捷键说明

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