📄 lcd.c
字号:
//bear zhou 编辑
#include <at89x51.h>
#include <lcd.h>
char code int2charLCD[]="0123456789";//感觉code不用的
void write_LCD_command(unsigned char command)
{
rw=WRITE;
rs=COMMAND;
enable=ENABLE;
P1=command;
delay100us(20);
enable=DISABLE;
rw=1;
}
void write_LCD_data(unsigned char LCDdata)
{
rw=WRITE;
rs=DATA;
enable=ENABLE;
P1=LCDdata;//不管输入什么,他直接编译成二进制
delay100us(20);
enable=DISABLE;
rw=1;
}
void init_LCD(void)
{
write_LCD_command(TwoLine_8bit); //0x38
write_LCD_command(CURSOR_ON); //0x0C
write_LCD_command(CURSOR_RIGHT); //0x06
}
void clear_LCD(void)
{
write_LCD_command(CLEAR);
write_LCD_command(CURSOR_HOME);
}
void display_LCD_string(char *p)
{
while(*p!='\0')
{
write_LCD_data(*p);
p++;
}
}
void display_LCD_number(unsigned char number)
{
unsigned char x;
x=number/100;
write_LCD_data(int2charLCD[x]);
x=(number/10)%10;
write_LCD_data(int2charLCD[x]);
x=number%10;
write_LCD_data(int2charLCD[x]);
}
void gotoxy(unsigned char x,unsigned char y)
{
if(x==1)
write_LCD_command(GOTO_LINE_1+y);
else
write_LCD_command(GOTO_LINE_2+y);
}
void delay100us(unsigned char i)
{
unsigned char a,j;
for(a=0;a<i;a++)
for(j=0;j<34;j++);
}
unsigned char scan(unsigned char* key_v)//51>1,61>4.71>7,81>0,54>A,64>a,74>up,84>down,72>left,73>right
{
unsigned char i1,i2,j,a,b,c,i=0;
P0=0x0f;
b=P0;
if(b==0x0f)
{
*key_v='\0';
return 0;
}
// gotoxy(2,0);
for(i1=1;i1<=4;i1++)
{
switch(i1){
case 1:a=0xfe;break;
case 2:a=0xfd;break;
case 3:a=0xfb;break;
case 4:a=0xf7;break;
default: break;
}
P0=a;
delay100us(10);
b=P0;
c=b;
delay100us(10);
b=P0;
//display_LCD_number(b);
if(b!=c) return i1;
b=b>>4;
for(i2=0;i2<=3;i2++)
{
switch(i2){
case 0:a=b|14;break;
case 1:a=b|13;break;
case 2:a=b|11;break;
case 3:a=b|7;break;
default: break;
}
switch(a){
default: j=0;break;
case 0x0e:j=50+i1;
break;
case 13:j=60+i1;
break;
case 11:j=70+i1;
break;
case 7:j=80+i1;
break;
}
if(j!=0)
{
key_v[i]=value(j);
key_v[i+1]='\0';
i++;
}
}
}
return 100;
}
unsigned char value(unsigned char i)
{
switch(i){
case 51: return '1';break;
case 52: return '4';break;
case 53: return '7';break;
case 54: return '0';break;
case 61: return '2';break;
case 62: return '5';break;
case 63: return '8';break;
case 64: return 'l';break;
case 71: return '3';break;
case 72: return '6';break;
case 73: return '9';break;
case 74: return 'u';break;
case 81: return 'A';break;
case 82: return 'a';break;
case 83: return 'r';break;
case 84: return 'd';break;
default: return 0;
}
}
unsigned char VS_key_V(unsigned char* key_v1,unsigned char* key_v2)
{
unsigned char i=0;
while(i!=17)
{
if(key_v1[i]!=key_v2[i]) return 0;
if((key_v1[i]=='\0')&&(key_v2[i]=='\0')) break;
i++;
//key_v2++;
}
if(i!=17)
return 1;
return 0;
}
void StrToStr(unsigned char* key_v1,unsigned char* key_v2)
{
do
{
*key_v2=*key_v1;
key_v1++;
key_v2++;
}while(*key_v1!='\0');
*key_v2='\0';
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -