📄 key.c
字号:
#include <reg51.h>
#include <intrins.h>
#define DB0_DB7 P2
sbit dat3 =P1^0; //键盘扫描移位数据端;
sbit clk3 =P1^1; //键盘扫描移位时钟端;
sbit lie1 =P1^2; //键盘第一列;
sbit lie2 =P1^3; //键盘第二列;
sbit RS=P3^5;
sbit RW=P3^6;
sbit E =P3^7;
bit flag=0;
unsigned char code shuzi[10]={'0','1','2','3','4','5','6','7','8','9'};
unsigned char key();
void delay(unsigned char a);
void write_cmd (unsigned int tempdata);
void write_ddr (unsigned int tempdata);
void init();
void delay(unsigned char a)
{
unsigned char i;
unsigned char j;
for(j=0;j<a;j++)
for(i=0;i<125;i++);
}
void write_cmd (unsigned int tempdata) //液晶写命令子程序//
{
DB0_DB7=tempdata;
RS=0;
RW=0;
E=1;
_nop_();
E=0;
_nop_();
delay(10);
}
void write_ddr (unsigned char tempdata) //液晶写数据子程序//
{
DB0_DB7=tempdata;
RS=1;
RW=0;
E=1;
_nop_();
E=0;
_nop_();
delay(10);
}
void init() //液晶初始化子程序//
{
write_cmd(0x30);
delay(10);
write_cmd(0x01);
delay(10);
write_cmd(0x38);
write_cmd(0x0c);
}
unsigned char key()
{
unsigned char k=0,i=0,j=0,lie=0;
while(1)
{
flag=0;
for (i=0;i<=7;i++)
{
clk3=0;
_nop_();
dat3=0;
_nop_();
clk3=1;
_nop_();
clk3=0;
_nop_();
} //先输入八个零
if(lie1^lie2)
{
flag=1;
delay(5);
if(lie1^lie2)
{
if(!lie1)
lie=0;
if(!lie2)
lie=1;
}
clk3=0;
dat3=1;
for(k=0;k<16;k++)
{
if(clk3)
clk3=0;
else
clk3=1;
} //给8个1//
clk3=0;
_nop_();
dat3=0;
_nop_();
clk3=1;
_nop_();
clk3=0;
_nop_();
for(j=0;j<8;j++)
{
if(lie1^lie2)
break;
else
{
dat3=1;
_nop_();
clk3=0;
_nop_();
clk3=1;
_nop_();
clk3=0;
_nop_(); //送1//
}
}
while (!(lie1&lie2));
}
break;
}
return (lie*8+j);
}
void main()
{
unsigned char keyzhi,m=0,n=0,p=0;
init();
write_cmd(0x80);
while(1)
{
keyzhi=key();
if(flag)
{
switch(keyzhi)
{
case 10 : break;
case 11 : break;
case 12 : break;
case 13 : break;
case 14 : break;
case 15 : break;
default : write_ddr(shuzi[keyzhi]);break;
}
p=p+1;
if(p==16){write_cmd(0xc0);}
if(p==32){write_cmd(0x80);p=0;}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -