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

📄 12864精简版.c

📁 12864手机操作菜单
💻 C
字号:
#include "reg51.h"
#include "code.h"

#define rs P20
#define rw P21
#define e P22
#define cs1 P23
#define cs2 P24
#define lcd P0
#define keydata P1

sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;

bit busy_bit=1;
#define unchar unsigned char

unchar i,j,k;


void delay10ms(void)   //延时程序

{

       
        for(j=3;j>0;j--)

        for(k=214;k>0;k--);
		
}

char getkey()                          //按键判断
{
char i;
keydata=0x0f;
while(keydata==0x0f);          //判断有无按键按下,无则等待
delay10ms();  //去抖动
keydata=0xef;
if(keydata==0xee) i=12;
else if(keydata==0xed) i=8;
else if(keydata==0xeb) i=4;
else if(keydata==0xe7) i=0; 
keydata=0xdf;
if(keydata==0xde) i=13;
else if(keydata==0xdd) i=9;
else if(keydata==0xdb) i=5;
else if(keydata==0xd7) i=1;
keydata=0xbf;
if(keydata==0xbe) i=14;
else if(keydata==0xbd) i=10;
else if(keydata==0xbb) i=6;
else if(keydata==0xb7) i=2;
keydata=0x7f;
if(keydata==0x7e) i=15;
else if(keydata==0x7d) i=11;
else if(keydata==0x7b) i=7;
else if(keydata==0x77) i=3;
delay10ms();     //去抖动
keydata=0x0f;
return(i);
}

void checkbusy(void)                       
{
	unchar state=0;
while(busy_bit)
   {
	lcd=0xFF;//空读操作
	rw=1;
	rs=0;
	e=1;
    e=1;
	e=0;

	lcd=0xFF;//再读才有效
	rw=1;
	rs=0;
	e=1;
	state=lcd;
	e=0;
	busy_bit=(bit)(state>>7);
   }
}

displayon()          //开显示
{
cs1=1;
cs2=0;
checkbusy();
rw=0;
rs=0;
lcd=0x3f;
e=1;
e=0;

cs1=0;
cs2=1;
checkbusy();
rw=0;
rs=0;
lcd=0x3f;
e=1;
e=0;
}

displayoff()           //关显示
{
cs1=1;
cs2=0;
checkbusy();
rw=0;
rs=0;
lcd=0x3e;
e=1;
e=0;

cs1=0;
cs2=1;
checkbusy();
rw=0;
rs=0;
lcd=0x3e;
e=1;
e=0;
}

rwcmd(unchar cmd)				  //写指令
{
checkbusy();
rw=0;
rs=0;
lcd=cmd;
e=1;
e=0;
}

rwdata(unchar displaydata)                 //写数据
{
checkbusy();
rw=0;
rs=1;
lcd=displaydata;
e=1;
e=0;
}



void addresswrite(unchar x,unchar y)             //写地址函数
{
unchar unit;
rwcmd(0x0c);                  //写z地址,一般z地址默认为0
unit=x+0xb8;
rwcmd(unit);                 //写x地址;
unit=y+0x40;
rwcmd(unit);                //写y地址
}

void display(unchar beginx,unchar endx,unchar beginy,unchar endy,unchar block,unchar p,unchar colour)             //反白显示
{            //显示 行开始    行结束          列开始       列结束        块选择     数组   反白与否
if(block==1) {cs1=0;cs2=1;}
if(block==2) {cs1=1;cs2=0;}


for(i=beginx;i<endx;i++)
{
addresswrite(i,beginy);
for(j=beginy;j<endy;j++)
{
if(colour==1)
switch(p)
{             
case 1:rwdata(~character1[i][j]);break;
case 2:rwdata(~character2[i][j]);break;
case 3:rwdata(~character3[i][j]);break;
case 4:rwdata(~character4[i][j]);break;
case 5:rwdata(~character5[i][j]);break;
case 6:rwdata(~character6[i][j]);break;
case 7:rwdata(~character7[i][j]);break;
case 8:rwdata(~character8[i][j]);break;
case 9:rwdata(~character9[i][j]);break;
case 10:rwdata(~character10[i][j]);break;
case 11:rwdata(~character11[i][j]);break;
case 12:rwdata(~character12[i][j]);break;
case 13:rwdata(~character13[i][j]);break;
case 14:rwdata(~character14[i][j]);break;
case 15:rwdata(~character15[i][j]);break;
case 16:rwdata(~character16[i][j]);break;
case 17:rwdata(~character17[i][j]);break;
case 18:rwdata(~character18[i][j]);break;
case 19:rwdata(~character19[i][j]);break;
case 20:rwdata(~character20[i][j]);break;
case 21:rwdata(~character21[i][j]);break;
case 22:rwdata(~character22[i][j]);break;
case 23:rwdata(~character23[i][j]);break;
case 24:rwdata(~character24[i][j]);break;
case 25:rwdata(~character25[i][j]);break;
case 26:rwdata(~character26[i][j]);break;
case 27:rwdata(~character27[i][j]);break;
case 28:rwdata(~character28[i][j]);break;
default:break;
}
else if(colour==0)
switch(p)
{ 
case 1:rwdata(character1[i][j]);break;
case 2:rwdata(character2[i][j]);break;
case 3:rwdata(character3[i][j]);break;
case 4:rwdata(character4[i][j]);break;
case 5:rwdata(character5[i][j]);break;
case 6:rwdata(character6[i][j]);break;
case 7:rwdata(character7[i][j]);break;
case 8:rwdata(character8[i][j]);break;
case 9:rwdata(character9[i][j]);break;
case 10:rwdata(character10[i][j]);break;
case 11:rwdata(character11[i][j]);break;
case 12:rwdata(character12[i][j]);break;
case 13:rwdata(character13[i][j]);break;
case 14:rwdata(character14[i][j]);break;
case 15:rwdata(character15[i][j]);break;
case 16:rwdata(character16[i][j]);break;
case 17:rwdata(character17[i][j]);break;
case 18:rwdata(character18[i][j]);break;
case 19:rwdata(character19[i][j]);break;
case 20:rwdata(character20[i][j]);break;
case 21:rwdata(character21[i][j]);break;
case 22:rwdata(character22[i][j]);break;
case 23:rwdata(character23[i][j]);break;
case 24:rwdata(character24[i][j]);break;
case 25:rwdata(character25[i][j]);break;
case 26:rwdata(character26[i][j]);break;
}
}
}
}
/*********************menufunction*************************/

void menufunction(unchar floor,unchar menu)
{
/***************************显示层菜单**************************/
switch(menu)
{
case 1: 
{
display(0,8,0,64,1,3,0);
display(0,8,0,64,2,4,0);
} break;
case 2: 
{
display(0,8,0,64,1,5,0);
display(0,8,0,64,2,6,0);
} break;
case 3:
{
display(0,8,0,64,1,7,0);
display(0,8,0,64,2,8,0);
} break;
case 4:
{
display(0,8,0,64,1,9,0);
display(0,8,0,64,2,10,0);
} break;
case 5:
{
display(0,8,0,64,1,11,0);
display(0,8,0,64,2,12,0);
} break;

case 6:
{
display(0,8,0,64,1,13,0);
display(0,8,0,64,2,14,0);
} break;

case 7:
{
display(0,8,0,64,1,15,0);
display(0,8,0,64,2,16,0);
} break;

case 8:
{
display(0,8,0,64,1,17,0);
display(0,8,0,64,2,18,0);
} break;

case 9:
{
display(0,8,0,64,1,19,0);
display(0,8,0,64,2,20,0);
} break;

case 10:
{
display(0,8,0,64,1,21,0);
display(0,8,0,64,2,22,0);
} break;

case 11:
{
display(0,8,0,64,1,23,0);
display(0,8,0,64,2,24,0);
} break;

case 12:
{
display(0,8,0,64,1,25,0);
display(0,8,0,64,2,26,0);
} break;

case 13:
{
display(0,8,0,64,1,27,0);
display(0,8,0,64,2,28,0);
} break;

default: break;                   
}                                 //层菜单显示
/********************************显示行***********************/

switch(floor)
{
case 1:                           
{
display(0,2,0,64,1,3,1);         
} break;                    //作者简介反白,仿真QQ群正常显示

case 2:                          
{
display(2,4,0,64,1,3,1);         
} break;                          //仿真QQ群反白,上下两行正常

case 3:                           
{
display(6,8,0,32,1,3,1);         
} break;                          //功能反白,上一行正常

case 4:                           
{         
} break;                          //显示作者简介内容

case 5:                           
{         
} break;                          //显示QQ群信息

case 6:                           
{
display(0,4,0,32,1,9,1);          //第二项正常显示
} break;                          //显示图形菜单第一项

case 7:                           
{
display(0,4,32,64,1,9,1);     
} break;                           //图形第二项

case 8:                           
{
display(0,4,0,32,2,10,1);         
} break;                          //图形第三项

case 9:                           
{
display(0,4,32,64,2,10,1);        
} break;                          //图形第四项

case 10:                           
{
display(4,8,0,32,1,9,1);          //图形第五项        
} break; 

case 11:                          
{
display(4,8,32,64,1,9,1);       
} break;                          //图形第六项

case 12:                           
{
display(4,8,0,32,2,10,1);        
} break;                          //图形第七项

case 13:                          
{
display(4,8,32,64,2,10,1);         
} break;                          //图形第八项

case 14:                         //呼入号码
{
display(0,2,0,64,1,11,1);
} break;

case 15:                         //呼出号码
{
display(2,4,0,64,1,11,1);
} break;

case 16:                         //拨号
{
display(4,6,0,32,1,11,1);
} break;

case 17:                      //返回
{
display(6,8,0,64,1,11,1);
} break;

case 18:                      //收件箱
{
display(0,2,0,48,1,13,1);
} break;

case 19:                      //发件箱
{
display(2,4,0,64,1,13,1);
} break;

case 20:                      //编辑短信
{
display(4,6,0,64,1,13,1);
} break;

case 21:                      //返回
{
display(6,8,0,32,1,13,1);
} break;


case 22:                      //移动梦网
{
display(0,2,0,64,1,15,1);
} break;

case 23:                     //WAP浏览
{
display(2,4,0,64,1,15,1);
} break;

case 24:                      //
{
display(4,6,0,64,1,15,1);
} break;

case 25:                       //返回
{
display(6,8,0,64,1,15,1);
} break;


case 26:                        //陆小凤传奇
{
display(0,2,0,64,1,17,1);
display(0,2,0,16,2,18,1);
} break;

case 27:                        //俄罗斯方块
{
display(2,4,0,64,1,17,1);
display(2,4,0,16,2,18,1);
} break;

case 28:                      //射击游戏
{
display(4,6,0,64,1,17,1);
} break;

case 29:                       //返回
{
display(6,8,0,32,1,17,1);
} break;


case 30:                       //自拍
{
display(0,2,0,32,1,19,1);
} break;

case 31:                        //拍摄设置
{
display(2,4,0,64,1,19,1);
} break;

case 32:                        //返回
{
display(6,8,0,32,1,19,1);
} break;

case 33:                         //声音设定
{
display(0,2,0,64,1,21,1);
} break;

case 34:                         //桌面设定
{
display(2,4,0,64,1,21,1);
} break;

case 35:                         //返回
{
display(6,8,0,32,1,21,1);
} break;

case 36:                         //抵制日货
{
display(0,2,0,64,1,23,1);
} break;

case 37:                         //抵制日货
{
display(2,6,0,64,1,23,1);
} break;

case 38:                          //返回
{
display(6,8,0,32,1,23,1);
} break;


default:break;
}
}
/*************************************************************/
/*************************************************************/
/*************************************************************/
/**************************************main********************/

main()
{
unchar keydata,menu=1,floor=1;
display(0,8,0,64,1,1,0);       //行号起始0,结束8;列号起始0,结束64;选择LCD第一块;显示数组一;不反白显示
display(0,8,0,64,2,2,0);       //同上

menufunction(menu,floor);
while(1)
{
keydata=getkey();
switch(keydata)
{
 case 13:                    //按键向上
switch(menu) 
   {
case 1:{floor--;if(floor<1) floor=3;if(floor>3) floor=1;}break;
case 2:floor=4;break;
case 3:floor=5;break;
case 4:{floor--;if(floor<6) floor=13;if(floor>13) floor=6;}break;
case 5:{floor--;if(floor<14) floor=17;if(floor>17) floor=14;}break;
case 6:{floor--;if(floor<18) floor=21;if(floor>21) floor=18;}break;
case 7:{floor--;if(floor<22) floor=25;if(floor>25) floor=22;}break;
case 8:{floor--;if(floor<26) floor=29;if(floor>29) floor=26;}break;
case 9:{floor--;if(floor<30) floor=32;if(floor>32) floor=30;}break;
case 10:{floor--;if(floor<33) floor=35;if(floor>35) floor=33;}break;
case 11:{floor--;if(floor<36) floor=38;if(floor>38) floor=36;}break;
default:break; 
    } break;

case 9:                //按键确定
switch(floor)
{
case 1: {menu=2;floor=4;}break;
case 2: {menu=3;floor=5;}break;
case 3: {menu=4;floor=6;}break;
case 4: {menu=1;floor=1;}break;        //图形菜单
case 5: {menu=1;floor=2;}break;        //呼入呼出菜单
case 6: {menu=5;floor=14;}break;
case 7: {menu=6;floor=18;}break; 
case 8: {menu=7;floor=22;}break;
case 9: {menu=8;floor=26;}break;
case 10: {menu=9;floor=30;}break;
case 11: {menu=10;floor=33;}break;
case 12: {menu=11;floor=36;}break;
case 13: {menu=1;floor=1;}break;       //图形菜单第8项返回
case 14: {menu=12;floor=39;}break;       //以下为第三级菜单 
case 15: {menu=12;floor=40;}break;       //都为陆小凤
case 16: {menu=12;floor=41;}break;
case 17: {menu=4;floor=6;}break;
case 18: {menu=12;floor=42;}break;
case 19: {menu=12;floor=43;}break;
case 20: {menu=12;floor=44;}break;
case 21: {menu=4;floor=7;}break;
case 22: {menu=12;floor=45;}break;
case 23: {menu=12;floor=46;}break;
case 24: {menu=12;floor=47;}break;
case 25: {menu=4;floor=8;}break;
case 26: {menu=12;floor=48;}break;
case 27: {menu=12;floor=49;}break; 
case 28: {menu=12;floor=50;}break;
case 29: {menu=4;floor=9;}break;
case 30: {menu=12;floor=51;}break;
case 31: {menu=12;floor=52;}break;
case 32: {menu=4;floor=10;}break;
case 33: {menu=12;floor=53;}break;
case 34: {menu=12;floor=54;}break;
case 35: {menu=4;floor=11;}break;
case 36: {menu=12;floor=55;}break;
case 37: {menu=12;floor=56;}break;
case 38: {menu=4;floor=12;}break;
case 39: {menu=5;floor=14;}break;
case 40: {menu=5;floor=15;}break;
case 41: {menu=5;floor=16;}break;
case 42: {menu=6;floor=18;}break;
case 43: {menu=6;floor=19;}break;
case 44: {menu=6;floor=20;}break;
case 45: {menu=7;floor=22;}break;
case 46: {menu=7;floor=23;}break;
case 47: {menu=7;floor=24;}break;
case 48: {menu=8;floor=26;}break;
case 49: {menu=8;floor=27;}break;
case 50: {menu=8;floor=28;}break;
case 51: {menu=9;floor=30;}break;
case 52: {menu=9;floor=31;}break;
case 53: {menu=10;floor=33;}break;
case 54: {menu=10;floor=34;}break;
case 55: {menu=11;floor=36;}break;
case 56: {menu=11;floor=37;}break;

default:break;
}
break;

case 5:                   //按键向下
switch(menu) 
   {
case 1:{floor++;if(floor<1) floor=3;if(floor>3) floor=1;}break;
case 2:floor=4;break;
case 3:floor=5;break;
case 4:{floor++;if(floor<6) floor=13;if(floor>13) floor=6;}break;
case 5:{floor++;if(floor<14) floor=17;if(floor>17) floor=14;}break;
case 6:{floor++;if(floor<18) floor=21;if(floor>21) floor=18;}break;
case 7:{floor++;if(floor<22) floor=25;if(floor>25) floor=22;}break;
case 8:{floor++;if(floor<26) floor=29;if(floor>29) floor=26;}break;
case 9:{floor++;if(floor<30) floor=32;if(floor>32) floor=30;}break;
case 10:{floor++;if(floor<33) floor=35;if(floor>35) floor=33;}break;
case 11:{floor++;if(floor<36) floor=38;if(floor>38) floor=36;}break;
default:break; 
    } break;

default: break;
}
menufunction(floor,menu);
}
}

⌨️ 快捷键说明

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