📄 键盘液晶显示.c
字号:
#include<reg52.h>
sbit RS=P1^1;
sbit RW=P1^2;
sbit E=P1^0;
#define uchar unsigned char
//********************************以下是液晶显示部分程序*****************************
//--------------------------延时程序-------------------------------
void delay(uchar i)
{uchar a;
while(i--)
{for(a=0;a<=125;a++)
{}
}
}
//-----------------------查LCD是否忙程序----------------------------
void wait(void)
{uchar temp;
do
{RS=0; // 检验是否忙
RW=1;
E=1;
delay(10);
temp=P3;
E=0;}
while(temp&0x80); //10000000是忙。00000000是不忙。
}
//------------------------清屏程序---------------------------------
void clear(void)
{ wait();
RS=0;
RW=0;
E=1;
P3=0x01; //清屏命令
E=0;
}
//-------------------------向LCD输入指令程序-------------------------
void command(uchar com)
{wait();
RS=0;
RW=0;
E=1;
P3=com; //指令
E=0;
}
//------------------------向LCD写数据程序-------------------------------
void lcddata(uchar num)
{wait();
RS=1;
RW=0;
E=1;
P3=num;
E=0;
}
//------------------------向LCD写地址程序---------------------------------
void position(unsigned char pos)
{
unsigned char temp;
wait();
if ( pos<=0x10 )
temp=( pos+0x80-1 ); //第一行地址:0x00~~0x0f
else
temp=( ( pos-17)+0xC0 ); //第二行地址:0x40~~0x4f
command(temp);
delay(1);
}
//---------------------显示字符程序-------------------------
display(uchar address, uchar num) //位置为10进制,数为16进制
{wait();
position(address);
lcddata(num);
}
//-------------------------初始化程序--------------------------
void initial()
{ uchar i;
delay(50);
for(i=0;i<3;i++) //很有必要 ?
command(0x38); //5*7 2行8位
delay(5);
command(0x0f); //显示开/关控制:开显示、关光标和光标闪烁
command(0x06); //设置输入模式:AC自动加 1、关画面平移
clear();
}
//********************************以下是键盘扫描程序**********************************
//----------------------------------键盘扫描------------------------------------
void delay1(void) // 延时消抖
{uchar i;
for(i=0;i<=250;i++)
{;}
}
unsigned char keyboard() // 键盘扫描
{uchar search,keynum;
P2=0x0f;
if(P2|0xf0!=0xff)
{delay1();
if(P2|0xf0!=0xff)
{search=0xef; // 列扫描
while(search!=0xff) // 扫描之前
{P2=search;
if((P2&0x0f)!=0x0f)
{keynum=P2; // 捕捉此时按键信号
return(~keynum);} // 正逻辑返回
else search=(search<<1)|0x0f;
// 若不在此行则换列扫描
}
}
}
return 0; //若无按键返回0
}
//**********************************以下是液晶加键盘综合程序***********************************
//----------------------------------键盘液晶主函数-----------------------------------
// (以开发16个按键的功能)
main()
{uchar key,p=0;
initial();
while(1)
{key=keyboard();
if(key!=0){delay(920);if(key!=0)p=p+1;} //延时,以确认按键仅按下一次,避免过多显示,次步十分重要!
switch(key)
{case 0x11:display(p,0x41);break; //A 键1
case 0x21:display(p,0x42);break; //B 键2
case 0x41:display(p,0x43);break; //C 键3
case 0x81:display(p,0x44);break; //D 键4
case 0x12:display(p,0x45);break; //E 键5
case 0x22:display(p,0x46);break; //F 键6
case 0x42:display(p,0x47);break; //G 键7
case 0x82:display(p,0x20);break; //空格 键8
case 0x14:p=p-1;command(0x10);p--;break; //光标左移 键9(p-1是为了抵消按键是的p++,保证只在显示字符是光标才移位)
case 0x24:p=p-1;command(0x14);p++;break; //光标右移 键10
case 0x44:p=p-1;command(0x0c);break; //光标关 键11
case 0x84:p=p-1;command(0x0f);break; //光标开 键12
case 0x18:p=p-1;command(0x1c);break; //屏幕右移 键13
case 0x28:p=p-1;command(0x18);break; //屏幕左移 键14
case 0x48:p=p-1;initial();p=0;break; //初始化 键15
case 0x88:p=p-1;clear();p=0;break; //清屏 键16
case 0:break; //无按键则保持上次状态
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -