12864带字库显示屏按键选择菜单显示
2017-03-10 09:43
274 查看
/*****************************************************/
//描述:LCD12864的驱动
//作者:小四叶草
//时间:2015/07/16
//描述:显示与按键
//s2 ---------GPIO52 ;s3-----------GPIO54 ; s4 -------GPIO72 ; s5 ----GPIO71;
//两种写法:1.消抖;2.状态机
//按键消抖的是时间是20ms
/*****************************************************/
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File
#define LCD_DATA (*((volatile Uint16 *)0x45EF))
#define E GpioDataRegs.GPBDAT.bit.GPIO61
#define RW GpioDataRegs.GPADAT.bit.GPIO27
#define RS GpioDataRegs.GPBDAT.bit.GPIO60
#define LOW 0
#define HIGH 1
#define CLEAR_SCREEN 0x01 //清屏指令:清屏且AC值为00H
#define AC_INIT 0x02 //将AC设置为00H。且游标移到原点位置
#define CURSE_ADD 0x06 //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)
#define FUN_MODE 0x30 //工作模式:8位基本指令集
#define DISPLAY_ON 0x0c //显示开,显示游标,且游标位置反白
#define DISPLAY_OFF 0x08 //显示关
#define CURSE_DIR 0x14 //游标向右移动:AC=AC+1
#define SET_CG_AC 0x40 //设置AC,范围为:00H~3FH
#define SET_DD_AC 0x80
#define s2 GpioDataRegs.GPBDAT.bit.GPIO54
#define s3 GpioDataRegs.GPBDAT.bit.GPIO55
#define s4 GpioDataRegs.GPBDAT.bit.GPIO56
#define s5 GpioDataRegs.GPBDAT.bit.GPIO57
#define DELAY_MS(A) DELAY_US((long double)A * 1000.0L)
#define DELAY_100US(B) DELAY_US((long double)B * 100.0L)
void InitXintf(void);
void ConfigGpio(void);
void InitLcd(void);
void Read_Busy(void);
void WriteCmd12864(Uint16 cmd);
void WriteData12864(Uint16 dat);
void DisplayDdram(uchar *hz);
void DispBMP(uchar *adress);
void CLR_GDRAM(void);
void Disp(void);
void fanbai(uchar y,uchar x1,uchar x2);
void key(void);
void xuanze();
void xunhuan(uchar hang);
void jiantou(uchar hang);
uchar tab1[]="设置参数值";
uchar tab2[]="查询参数值";
uchar tab3[]="查询历史故障";
uchar tab4[]="清除历史故障";
uchar tab5[]="第二级菜单显示";
uchar key2 = 0;
uchar key3 = 0;
uchar key4 = 0;
uchar key5 = 0;
uchar keyindex = 0; //初始化的时候是第一行,选择行的索引
uchar keycur = 0; //0,1,2,3 显示屏的当前行
void main(void)
{
InitSysCtrl();
InitXintf();
InitXintf16Gpio();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
ConfigGpio();
InitLcd();
WriteCmd12864(CLEAR_SCREEN);
DELAY_US(50);
Disp();
WriteCmd12864(0x34); //开启扩展指令
fanbai(0,2,11);
WriteCmd12864(0x36);
WriteCmd12864(0x30); //返回到基本指令
while(1)
{
xuanze();
}
}
void ConfigGpio(void)
{
EALLOW;
//===12864====================================
GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;
GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO61 = 1;
GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO27 = 1;
//===12864====================================
//===key====================================
GpioCt
4000
rlRegs.GPBMUX2.bit.GPIO54 = 0; //s2 GPIO
GpioCtrlRegs.GPBDIR.bit.GPIO54= 0; //input
GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 0; //s2 GPIO
GpioCtrlRegs.GPBDIR.bit.GPIO55= 0; //input
GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 0; //s2 GPIO
GpioCtrlRegs.GPBDIR.bit.GPIO56= 0; //input
GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 0; //s2 GPIO
GpioCtrlRegs.GPBDIR.bit.GPIO57= 0; //input
//disable pull-up
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 1;
GpioCtrlRegs.GPAPUD.bit.GPIO1 = 1;
GpioCtrlRegs.GPAPUD.bit.GPIO2 = 1;
GpioCtrlRegs.GPAPUD.bit.GPIO3 = 1;
//===key====================================
EDIS;
}
void InitLcd(void)
{
DELAY_100US(5);
WriteCmd12864(FUN_MODE);
DELAY_US(5);
WriteCmd12864(FUN_MODE);
DELAY_US(5);
WriteCmd12864(0x0C);
DELAY_US(5);
WriteCmd12864(CLEAR_SCREEN);
DELAY_US(30);
WriteCmd12864(AC_INIT);
DELAY_US(4);
}
void Read_Busy() //读忙标志最高位为1,则busy,不能进行读写操作
{
RS = LOW;
RW = HIGH;
E = HIGH;
while(LCD_DATA & 0X80);
E = LOW;
}
void WriteCmd12864(Uint16 cmd)
{
Read_Busy();
RS = LOW;
RW = LOW;//写数据
E = HIGH;
LCD_DATA = cmd;
E = LOW;
}
void WriteData12864(Uint16 dat)
{
Read_Busy();
RS = HIGH;
RW = LOW;//写数据
E = HIGH;
LCD_DATA = dat;
E = LOW;
}
void DisplayDdram(uchar *hz)
{
while(*hz != '\0')
{
WriteData12864(*hz);//地址里面的值
hz++;
}
}
//初步显示的画面,选择第一行反白显示
void Disp()
{
WriteCmd12864(0x81);
DisplayDdram(tab1);
WriteCmd12864(0x91);
DisplayDdram(tab2);
WriteCmd12864(0x89);
DisplayDdram(tab3);
WriteCmd12864(0x99);
DisplayDdram(tab4);
}
//选择某一行反白显示,和某一行的几个数据显示(连续)
//y = {0,1,2,3}
//x = {0,...15} //修改数据 一行有16个数据
void fanbai(uchar y,uchar x1,uchar x2)
{
uchar x_adress;
uchar i;
uchar j;
switch(y)
{
case 0: x_adress = 0x80;break;
case 1: x_adress = 0x90;break;
case 2: x_adress = 0x88;break;
case 3: x_adress = 0x98;break;
default: x_adress = 0x80;break;
}
if(0x80 == x_adress) //显示屏的第一行
{
for(i = 0; i < 32; i++)
{
WriteCmd12864(0x80 + i); //y
WriteCmd12864(0x80); //x
if(i < 16)
{
for(j =0;j < 16;j++)
{
if((j >= x1) & (j <= x2))
{
WriteData12864(0xff);
}
else
{
WriteData12864(0x00);
}
}
}
else //显示屏的第二行
{
for(j =0;j < 16;j++)
{
WriteData12864(0x00);
}
}
}
for(i = 0;i < 32; i++)//显示屏的第三四行
{
WriteCmd12864(0x80 + i);
WriteCmd12864(0x88);
for(j = 0;j <16; j++)
{
WriteData12864(0x00);
}
}
}
if(0x90 == x_adress) //第二行
{
for(i = 0; i < 32; i++)
{
WriteCmd12864(0x80 + i); //y
WriteCmd12864(0x80); //x
if(i < 16)//显示屏第一行
{
for(j =0;j < 16;j++)
{
WriteData12864(0x00);
}
}
else
{
for(j =0;j < 16;j++)
{
if((j >= x1) & (j <= x2))
{
WriteData12864(0xff);
}
else
{
WriteData12864(0x00);
}
}
}
}
for(i = 0;i < 32; i++) //第三四行
{
WriteCmd12864(0x80 + i);
WriteCmd12864(0x88);
for(j = 0;j <16; j++)
{
WriteData12864(0x00);
}
}
}
if(0x88 == x_adress) //显示屏的第三行
{
for(i = 0;i < 32; i++) //显示屏的第一二行
{
WriteCmd12864(0x80 + i);
WriteCmd12864(0x80);
for(j = 0;j <16; j++)
{
WriteData12864(0x00);
}
}
for(i = 0; i < 32; i++)
{
WriteCmd12864(0x80 + i); //y
WriteCmd12864(0x88); //x
if(i < 16)
{
for(j =0;j < 16;j++) //显示屏第三行
{
if((j >= x1) & (j <= x2))
{
WriteData12864(0xff);
}
else
{
WriteData12864(0x00);
}
}
}
else //显示屏第四行
{
for(j =0;j < 16;j++)
{
WriteData12864(0x00);
}
}
}
}
if(0x98 == x_adress) //显示屏的第三行
{
for(i = 0;i < 32; i++) //显示屏的第一二行
{
WriteCmd12864(0x80 + i);
WriteCmd12864(0x80);
for(j = 0;j <16; j++)
{
WriteData12864(0x00);
}
}
for(i = 0; i < 32; i++)
{
WriteCmd12864(0x80 + i); //y
WriteCmd12864(0x88); //x
if(i < 16)
{
for(j =0;j < 16;j++) //显示屏第三行
{
WriteData12864(0x00);
}
}
else //显示屏第四行
{
for(j =0;j < 16;j++)
{
if((j >= x1) & (j <= x2))
{
WriteData12864(0xff);
}
else
{
WriteData12864(0x00);
}
}
}
}
}
}
//按上移下移键,发白显示那一行
//s4 --上移,s5 --下移
void key()
{
//1.设置对应IO为输入,在ConfigGpio()里面,已经设置。
if(0 == s4) //检测到被按下
{
DELAY_US(1000); //延时10MS,前消抖
if(0 == s4)
{
while(!s4); //确认被按下,等下释放
key5 ++;
}
}
if(0 == s5) //检测到被按下
{
DELAY_US(1000); //延时10MS,前消抖
if(0 == s5)
{
while(!s5); //确认被按下,等下释放
key5 ++;
}
}
}
void xuanze()
{
static int16 key_yidong = 0;
static k = 0;
if(0 == s4) //上移,检测到被按下
{
DELAY_US(1000); //延时10MS,前消抖
if(0 == s4)
{
while(!s4); //确认被按下,等下释放
key_yidong --;
if(-1 == key_yidong)
{
key_yidong = 3;
k++;
}
xunhuan(key_yidong);
}
}
if(0 == s5) //检测到被按下
{
DELAY_US(1000); //延时10MS,前消抖
if(0 == s5)
{
while(!s5); //确认被按下,等下释放
key_yidong ++;
if(4 == key_yidong)
{
key_yidong = 0;
}
xunhuan(key_yidong);
}
}
}
void xunhuan(uchar hang)
{
switch(hang)
{
case 0:
WriteCmd12864(0x34); //开启扩展指令
fanbai(0,2,11);
WriteCmd12864(0x36);
WriteCmd12864(0x30); //返回到基本指令
jiantou(0);
break;
case 1:
WriteCmd12864(0x34); //开启扩展指令
fanbai(1,2,11);
WriteCmd12864(0x36);
WriteCmd12864(0x30); //返回到基本指令
WriteCmd12864(0x90);
WriteData12864(0x10);
jiantou(1);
break;
case 2:
WriteCmd12864(0x34); //开启扩展指令
fanbai(2,2,13);
WriteCmd12864(0x36);
WriteCmd12864(0x30); //返回到基本指令
jiantou(2);
break;
case 3:
WriteCmd12864(0x34); //开启扩展指令
fanbai(3,2,13);
WriteCmd12864(0x36);
WriteCmd12864(0x30); //返回到基本指令
jiantou(3);
break;
default:
WriteCmd12864(0x34); //开启扩展指令
fanbai(0,2,13);
WriteCmd12864(0x36);
WriteCmd12864(0x30); //返回到基本指令
jiantou(0);
break;
}
}
void jiantou(uchar hang)
{
switch(hang)
{
case 0:
WriteCmd12864(0x80);
WriteData12864(0x10);
WriteCmd12864(0x90);
WriteData12864(0x20);
WriteCmd12864(0x88);
WriteData12864(0x20);
WriteCmd12864(0x98);
WriteData12864(0x20);
break;
case 1:
WriteCmd12864(0x80);
WriteData12864(0x20);
WriteCmd12864(0x90);
WriteData12864(0x10);
WriteCmd12864(0x88);
WriteData12864(0x20);
WriteCmd12864(0x98);
WriteData12864(0x20);
break;
case 2:
WriteCmd12864(0x80);
WriteData12864(0x20);
WriteCmd12864(0x90);
WriteData12864(0x20);
WriteCmd12864(0x88);
WriteData12864(0x10);
WriteCmd12864(0x98);
WriteData12864(0x20);
break;
case 3:
WriteCmd12864(0x80);
WriteData12864(0x20);
WriteCmd12864(0x90);
WriteData12864(0x20);
WriteCmd12864(0x88);
WriteData12864(0x20);
WriteCmd12864(0x98);
WriteData12864(0x10);
break;
default:
WriteCmd12864(0x80);
WriteData12864(0x10);
WriteCmd12864(0x90);
WriteData12864(0x20);
WriteCmd12864(0x88);
WriteData12864(0x20);
WriteCmd12864(0x98);
WriteData12864(0x20);
break;
}
}
有问题,请咨询,个人公众号。
//描述:LCD12864的驱动
//作者:小四叶草
//时间:2015/07/16
//描述:显示与按键
//s2 ---------GPIO52 ;s3-----------GPIO54 ; s4 -------GPIO72 ; s5 ----GPIO71;
//两种写法:1.消抖;2.状态机
//按键消抖的是时间是20ms
/*****************************************************/
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File
#define LCD_DATA (*((volatile Uint16 *)0x45EF))
#define E GpioDataRegs.GPBDAT.bit.GPIO61
#define RW GpioDataRegs.GPADAT.bit.GPIO27
#define RS GpioDataRegs.GPBDAT.bit.GPIO60
#define LOW 0
#define HIGH 1
#define CLEAR_SCREEN 0x01 //清屏指令:清屏且AC值为00H
#define AC_INIT 0x02 //将AC设置为00H。且游标移到原点位置
#define CURSE_ADD 0x06 //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)
#define FUN_MODE 0x30 //工作模式:8位基本指令集
#define DISPLAY_ON 0x0c //显示开,显示游标,且游标位置反白
#define DISPLAY_OFF 0x08 //显示关
#define CURSE_DIR 0x14 //游标向右移动:AC=AC+1
#define SET_CG_AC 0x40 //设置AC,范围为:00H~3FH
#define SET_DD_AC 0x80
#define s2 GpioDataRegs.GPBDAT.bit.GPIO54
#define s3 GpioDataRegs.GPBDAT.bit.GPIO55
#define s4 GpioDataRegs.GPBDAT.bit.GPIO56
#define s5 GpioDataRegs.GPBDAT.bit.GPIO57
#define DELAY_MS(A) DELAY_US((long double)A * 1000.0L)
#define DELAY_100US(B) DELAY_US((long double)B * 100.0L)
void InitXintf(void);
void ConfigGpio(void);
void InitLcd(void);
void Read_Busy(void);
void WriteCmd12864(Uint16 cmd);
void WriteData12864(Uint16 dat);
void DisplayDdram(uchar *hz);
void DispBMP(uchar *adress);
void CLR_GDRAM(void);
void Disp(void);
void fanbai(uchar y,uchar x1,uchar x2);
void key(void);
void xuanze();
void xunhuan(uchar hang);
void jiantou(uchar hang);
uchar tab1[]="设置参数值";
uchar tab2[]="查询参数值";
uchar tab3[]="查询历史故障";
uchar tab4[]="清除历史故障";
uchar tab5[]="第二级菜单显示";
uchar key2 = 0;
uchar key3 = 0;
uchar key4 = 0;
uchar key5 = 0;
uchar keyindex = 0; //初始化的时候是第一行,选择行的索引
uchar keycur = 0; //0,1,2,3 显示屏的当前行
void main(void)
{
InitSysCtrl();
InitXintf();
InitXintf16Gpio();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
ConfigGpio();
InitLcd();
WriteCmd12864(CLEAR_SCREEN);
DELAY_US(50);
Disp();
WriteCmd12864(0x34); //开启扩展指令
fanbai(0,2,11);
WriteCmd12864(0x36);
WriteCmd12864(0x30); //返回到基本指令
while(1)
{
xuanze();
}
}
void ConfigGpio(void)
{
EALLOW;
//===12864====================================
GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;
GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO61 = 1;
GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO27 = 1;
//===12864====================================
//===key====================================
GpioCt
4000
rlRegs.GPBMUX2.bit.GPIO54 = 0; //s2 GPIO
GpioCtrlRegs.GPBDIR.bit.GPIO54= 0; //input
GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 0; //s2 GPIO
GpioCtrlRegs.GPBDIR.bit.GPIO55= 0; //input
GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 0; //s2 GPIO
GpioCtrlRegs.GPBDIR.bit.GPIO56= 0; //input
GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 0; //s2 GPIO
GpioCtrlRegs.GPBDIR.bit.GPIO57= 0; //input
//disable pull-up
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 1;
GpioCtrlRegs.GPAPUD.bit.GPIO1 = 1;
GpioCtrlRegs.GPAPUD.bit.GPIO2 = 1;
GpioCtrlRegs.GPAPUD.bit.GPIO3 = 1;
//===key====================================
EDIS;
}
void InitLcd(void)
{
DELAY_100US(5);
WriteCmd12864(FUN_MODE);
DELAY_US(5);
WriteCmd12864(FUN_MODE);
DELAY_US(5);
WriteCmd12864(0x0C);
DELAY_US(5);
WriteCmd12864(CLEAR_SCREEN);
DELAY_US(30);
WriteCmd12864(AC_INIT);
DELAY_US(4);
}
void Read_Busy() //读忙标志最高位为1,则busy,不能进行读写操作
{
RS = LOW;
RW = HIGH;
E = HIGH;
while(LCD_DATA & 0X80);
E = LOW;
}
void WriteCmd12864(Uint16 cmd)
{
Read_Busy();
RS = LOW;
RW = LOW;//写数据
E = HIGH;
LCD_DATA = cmd;
E = LOW;
}
void WriteData12864(Uint16 dat)
{
Read_Busy();
RS = HIGH;
RW = LOW;//写数据
E = HIGH;
LCD_DATA = dat;
E = LOW;
}
void DisplayDdram(uchar *hz)
{
while(*hz != '\0')
{
WriteData12864(*hz);//地址里面的值
hz++;
}
}
//初步显示的画面,选择第一行反白显示
void Disp()
{
WriteCmd12864(0x81);
DisplayDdram(tab1);
WriteCmd12864(0x91);
DisplayDdram(tab2);
WriteCmd12864(0x89);
DisplayDdram(tab3);
WriteCmd12864(0x99);
DisplayDdram(tab4);
}
//选择某一行反白显示,和某一行的几个数据显示(连续)
//y = {0,1,2,3}
//x = {0,...15} //修改数据 一行有16个数据
void fanbai(uchar y,uchar x1,uchar x2)
{
uchar x_adress;
uchar i;
uchar j;
switch(y)
{
case 0: x_adress = 0x80;break;
case 1: x_adress = 0x90;break;
case 2: x_adress = 0x88;break;
case 3: x_adress = 0x98;break;
default: x_adress = 0x80;break;
}
if(0x80 == x_adress) //显示屏的第一行
{
for(i = 0; i < 32; i++)
{
WriteCmd12864(0x80 + i); //y
WriteCmd12864(0x80); //x
if(i < 16)
{
for(j =0;j < 16;j++)
{
if((j >= x1) & (j <= x2))
{
WriteData12864(0xff);
}
else
{
WriteData12864(0x00);
}
}
}
else //显示屏的第二行
{
for(j =0;j < 16;j++)
{
WriteData12864(0x00);
}
}
}
for(i = 0;i < 32; i++)//显示屏的第三四行
{
WriteCmd12864(0x80 + i);
WriteCmd12864(0x88);
for(j = 0;j <16; j++)
{
WriteData12864(0x00);
}
}
}
if(0x90 == x_adress) //第二行
{
for(i = 0; i < 32; i++)
{
WriteCmd12864(0x80 + i); //y
WriteCmd12864(0x80); //x
if(i < 16)//显示屏第一行
{
for(j =0;j < 16;j++)
{
WriteData12864(0x00);
}
}
else
{
for(j =0;j < 16;j++)
{
if((j >= x1) & (j <= x2))
{
WriteData12864(0xff);
}
else
{
WriteData12864(0x00);
}
}
}
}
for(i = 0;i < 32; i++) //第三四行
{
WriteCmd12864(0x80 + i);
WriteCmd12864(0x88);
for(j = 0;j <16; j++)
{
WriteData12864(0x00);
}
}
}
if(0x88 == x_adress) //显示屏的第三行
{
for(i = 0;i < 32; i++) //显示屏的第一二行
{
WriteCmd12864(0x80 + i);
WriteCmd12864(0x80);
for(j = 0;j <16; j++)
{
WriteData12864(0x00);
}
}
for(i = 0; i < 32; i++)
{
WriteCmd12864(0x80 + i); //y
WriteCmd12864(0x88); //x
if(i < 16)
{
for(j =0;j < 16;j++) //显示屏第三行
{
if((j >= x1) & (j <= x2))
{
WriteData12864(0xff);
}
else
{
WriteData12864(0x00);
}
}
}
else //显示屏第四行
{
for(j =0;j < 16;j++)
{
WriteData12864(0x00);
}
}
}
}
if(0x98 == x_adress) //显示屏的第三行
{
for(i = 0;i < 32; i++) //显示屏的第一二行
{
WriteCmd12864(0x80 + i);
WriteCmd12864(0x80);
for(j = 0;j <16; j++)
{
WriteData12864(0x00);
}
}
for(i = 0; i < 32; i++)
{
WriteCmd12864(0x80 + i); //y
WriteCmd12864(0x88); //x
if(i < 16)
{
for(j =0;j < 16;j++) //显示屏第三行
{
WriteData12864(0x00);
}
}
else //显示屏第四行
{
for(j =0;j < 16;j++)
{
if((j >= x1) & (j <= x2))
{
WriteData12864(0xff);
}
else
{
WriteData12864(0x00);
}
}
}
}
}
}
//按上移下移键,发白显示那一行
//s4 --上移,s5 --下移
void key()
{
//1.设置对应IO为输入,在ConfigGpio()里面,已经设置。
if(0 == s4) //检测到被按下
{
DELAY_US(1000); //延时10MS,前消抖
if(0 == s4)
{
while(!s4); //确认被按下,等下释放
key5 ++;
}
}
if(0 == s5) //检测到被按下
{
DELAY_US(1000); //延时10MS,前消抖
if(0 == s5)
{
while(!s5); //确认被按下,等下释放
key5 ++;
}
}
}
void xuanze()
{
static int16 key_yidong = 0;
static k = 0;
if(0 == s4) //上移,检测到被按下
{
DELAY_US(1000); //延时10MS,前消抖
if(0 == s4)
{
while(!s4); //确认被按下,等下释放
key_yidong --;
if(-1 == key_yidong)
{
key_yidong = 3;
k++;
}
xunhuan(key_yidong);
}
}
if(0 == s5) //检测到被按下
{
DELAY_US(1000); //延时10MS,前消抖
if(0 == s5)
{
while(!s5); //确认被按下,等下释放
key_yidong ++;
if(4 == key_yidong)
{
key_yidong = 0;
}
xunhuan(key_yidong);
}
}
}
void xunhuan(uchar hang)
{
switch(hang)
{
case 0:
WriteCmd12864(0x34); //开启扩展指令
fanbai(0,2,11);
WriteCmd12864(0x36);
WriteCmd12864(0x30); //返回到基本指令
jiantou(0);
break;
case 1:
WriteCmd12864(0x34); //开启扩展指令
fanbai(1,2,11);
WriteCmd12864(0x36);
WriteCmd12864(0x30); //返回到基本指令
WriteCmd12864(0x90);
WriteData12864(0x10);
jiantou(1);
break;
case 2:
WriteCmd12864(0x34); //开启扩展指令
fanbai(2,2,13);
WriteCmd12864(0x36);
WriteCmd12864(0x30); //返回到基本指令
jiantou(2);
break;
case 3:
WriteCmd12864(0x34); //开启扩展指令
fanbai(3,2,13);
WriteCmd12864(0x36);
WriteCmd12864(0x30); //返回到基本指令
jiantou(3);
break;
default:
WriteCmd12864(0x34); //开启扩展指令
fanbai(0,2,13);
WriteCmd12864(0x36);
WriteCmd12864(0x30); //返回到基本指令
jiantou(0);
break;
}
}
void jiantou(uchar hang)
{
switch(hang)
{
case 0:
WriteCmd12864(0x80);
WriteData12864(0x10);
WriteCmd12864(0x90);
WriteData12864(0x20);
WriteCmd12864(0x88);
WriteData12864(0x20);
WriteCmd12864(0x98);
WriteData12864(0x20);
break;
case 1:
WriteCmd12864(0x80);
WriteData12864(0x20);
WriteCmd12864(0x90);
WriteData12864(0x10);
WriteCmd12864(0x88);
WriteData12864(0x20);
WriteCmd12864(0x98);
WriteData12864(0x20);
break;
case 2:
WriteCmd12864(0x80);
WriteData12864(0x20);
WriteCmd12864(0x90);
WriteData12864(0x20);
WriteCmd12864(0x88);
WriteData12864(0x10);
WriteCmd12864(0x98);
WriteData12864(0x20);
break;
case 3:
WriteCmd12864(0x80);
WriteData12864(0x20);
WriteCmd12864(0x90);
WriteData12864(0x20);
WriteCmd12864(0x88);
WriteData12864(0x20);
WriteCmd12864(0x98);
WriteData12864(0x10);
break;
default:
WriteCmd12864(0x80);
WriteData12864(0x10);
WriteCmd12864(0x90);
WriteData12864(0x20);
WriteCmd12864(0x88);
WriteData12864(0x20);
WriteCmd12864(0x98);
WriteData12864(0x20);
break;
}
}
有问题,请咨询,个人公众号。
相关文章推荐
- 12864带字库显示屏按键选择菜单显示
- 12864带字库显示屏滚屏显示
- 12864带字库显示屏显示汉字程序
- 12864带字库显示屏自定义字符显示CGRAM
- 12864带字库显示屏滚屏显示
- 12864带字库显示屏显示汉字程序
- 12864带字库显示屏自定义字符显示CGRAM
- 12864带字库显示屏画图程序
- 12864显示菜单处理编程
- 右键菜单自由选择DataGrid显示隐藏列
- [安卓开发]在有物理按键的设备上依旧在Action Bar中显示虚拟菜单键
- 单片机--带字库12864显示正弦波程序
- shell脚本练习:显示菜单给用户选择
- 12864带字库显示的各种程序的总结
- 【12864】 LCD12864无字库显示汉字【仿真+程序+注意事项】
- zigbee网关 cc2530终端裸机串行驱动12864(字库ST7920)显示图片
- Swing添加鼠标右键菜单单击选择监听,并显示右键菜单
- 带字库12864显示矩形波 单片机
- UBUNTU 11.10 开机不在显示UBUNTU内核选择菜单
- CHtmlView屏蔽右键菜单、禁止显示I型指针以及禁止选择