📄 key_lcd.c
字号:
char rdkey(){
char keyin;
port6 = 0x0 ;
keyin = port6 ;
keyin = keyin & 0x3 ;
if (keyin == 0x3)
return 0 ;
else
return 1 ;
}
int scan_key(){
char keyornot;
char keyin;
char keyvalue;
keyornot = rdkey() ;
if (!keyornot)
return 255;
delay3(); //消除抖动
delay3();
keyornot = rdkey() ;
if (keyornot ){ //某个键按下!
port6 = 0xe ;
keyin = port6 & 0x3 ;
if ( keyin != 0x3){
keyvalue = 2;
keyvalue = keyin + keyvalue ;
while (keyornot = rdkey()) //等键松下
delay3();
return keyvalue;
}
port6 = 0xd ;
keyin = port6 & 0x3 ;
if ( keyin != 0x3){
keyvalue = 0;
keyvalue = keyin + keyvalue ;
while (keyornot = rdkey())
delay3();
return keyvalue;
}
port6 = 0xb ;
keyin = port6 & 0x3 ;
if ( keyin != 0x3){
keyvalue = 6;
keyvalue = keyin + keyvalue ;
while (keyornot = rdkey())
delay3();
return keyvalue;
}
port6 = 0x7 ;
keyin = port6 & 0x3 ;
keyin = port6 & 0x3 ;
if ( keyin != 0x3){
keyvalue = 4;
keyvalue = keyin + keyvalue ;
while (keyornot = rdkey())
delay3();
return keyvalue;
}
}
return 255;
}
void lcd_dsp(char lorr,char page_cnt,char line,char num){
char clr_byte_cnt;
char numa[8];
char lcdi=0;
if (num==0)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num0[lcdi];
if (num==1)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num1[lcdi];
if (num==2)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num2[lcdi];
if (num==3)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num3[lcdi];
if (num==4)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num4[lcdi];
if (num==5)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num5[lcdi];
if (num==6)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num6[lcdi];
if (num==7)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num7[lcdi];
if (num==8)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num8[lcdi];
if (num==9)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num9[lcdi];
//
if (num==0x1a)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num1a[lcdi];
if (num==0x41)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num41[lcdi];
if (num==0x42)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num42[lcdi];
if (num==0x43)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num43[lcdi];
if (num==0x44)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num44[lcdi];
if (num==0x45)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num45[lcdi];
if (num==0x46)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num46[lcdi];
if (num==0x47)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num47[lcdi];
if (num==0x48)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num48[lcdi];
if (num==0x49)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num49[lcdi];
if (num==0x4a)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num4a[lcdi];
if (num==0x4d)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num4d[lcdi];
if (num==0x53)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num53[lcdi];
if (num==0x54)
for (lcdi=0;lcdi<8;lcdi++)
numa[lcdi]=num54[lcdi];
//
page_cnt = (page_cnt - 1) | 0xb8;
line = (line-1)*8 + 0x40 ;
if (lorr==0){
Wr_c_l(page_cnt);
Wr_c_l(line);
for(clr_byte_cnt=1;clr_byte_cnt<=8;clr_byte_cnt++){
Wr_d_l(numa[clr_byte_cnt-1]);
}
}
else{
Wr_c_r(page_cnt);
Wr_c_r(line);
for(clr_byte_cnt=1;clr_byte_cnt<=8;clr_byte_cnt++){
Wr_d_r(numa[clr_byte_cnt-1]);
}
}
}
void Wr_c_r(char com){ //写指令
char temp;
temp = portb ; //clr cs1
portc = temp ; //clr cs2
porta = 0x0 ; //di = 0
temp = port8 & 0x80; //读状态字
delay1();
while (temp == 0x80){
temp = port8 & 0x80;
delay1();
}
port8 = com ;
delay1();
}
void Wr_c_l(char com){
char temp=0;
portb = temp ; //clr cs1
temp = portc ;
porta = 0x0 ; //di = 0
temp = port8 & 0x80; //读状态字
delay1();
while (temp == 0x80){
temp = port8 & 0x80;
delay1();
}
port8 = com ;
delay1();
}
void Wr_d_r(char data){ //写数据
char temp;
temp = portb; //clr cs1
portc = temp ; //clr cs2
porta = 0x0 ; //di = 0
temp = port8 & 0x80; //读状态字
delay1();
while (temp == 0x80){
temp = port8 & 0x80;
delay1();
}
porta = 0x1 ;
port8 = data ;
delay1();
}
void Wr_d_l(char data){
char temp=0;
portb = temp ; //clr cs1
temp = portc ; //clr cs2
porta = 0x0 ; //di = 0
temp = port8 & 0x80; //读状态字
delay1();
while (temp == 0x80){
temp = port8 & 0x80;
delay1();
}
porta = 0x1 ;
port8 = data ;
delay1();
}
void Init_Lcd(){
Wr_c_l(0xc0);
Wr_c_r(0xc0);
Wr_c_l(0x3f);
Wr_c_r(0x3f);
}
void Cls_Lcd(){
for(clr_page_cnt=1;clr_page_cnt<=8;clr_page_cnt++){
page_cnt = (clr_page_cnt - 1) | 0xb8;
Wr_c_l(page_cnt);
Wr_c_r(page_cnt);
Wr_c_l(0x40);
Wr_c_r(0x40);
for (clr_byte_cnt=1;clr_byte_cnt<=64;clr_byte_cnt++){
Wr_d_l(0x0);
Wr_d_r(0x0);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -