📄 lcd_menu.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 + -