?? 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 + -