📄 液晶.c
字号:
#include<reg51.h>
#include<intrins.h>
#define nop _nop_() //空操作宏定义//
#define DB0_DB7 P2
sbit RS=P3^5;
sbit RW=P3^6;
sbit E =P3^7;
unsigned char code shuzi[11]={'0','1','2','3','4','5','6','7','8','9'};
void delay(unsigned int count) //延时count MS子程序//
{
unsigned char i,j;
for(i=0;i<count;i++)
for(j=0;j<125;j++);
}
unsigned char KEYZHI() //按键扫描程序//
{
unsigned k,j,i;
k=0;
while(k==0) //扫描//
{
do
{
P1=0xf0;
}
while ((0xf0&P1)==0xf0) ; //有按下?有则跳出do……while循环//
delay(5); //延时,防干扰//
if((0xf0&P1)==0xf0) k=0; //真的按下去了吗?延时后再作判断//
else k=1;
}
P1=0x0f;
//扫描行,得出行号j//
switch(P1)
{
case 0x0e: j=0;break;
case 0x0d: j=1;break;
case 0x0b: j=2;break;
case 0x07: j=3;break;
default: break;
}
P1=0xf0; //扫描列,得出列号i//
switch(P1)
{
case 0xe0: i=0;break;
case 0xd0: i=1;break;
case 0xb0: i=2;break;
case 0x70: i=3;break;
default: break;
}
return(i+4*j); //返回键值,供下面作数据处理//
}
void DF() //等待按键释放程序//
{
unsigned n;
n=0;
while(n==0)
{
do
{
P1=0x0f;
}
while((0x0f&P1)!=0x0f); //等待按键释放,即若没有放开则一直循环//
delay(5); //放开键后消抖//
P1=0x0f;
if((0x0f&P1)!=0x0f) //真的放开了吗?延时后再次判断//
n=0;
else
n=1;
}
}
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 int 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);
}
void main()
{
unsigned char key,m=0,n=0;
init();
write_cmd(0x80);
while(1)
{
key=KEYZHI();
DF();
switch(key)
{
case 10 : break;
case 11 : break;
case 12 : break;
case 13 : break;
case 14 : break;
case 15 : break;
default : write_ddr(shuzi[key]);break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -