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