📄 111.c
字号:
/*********************程序功能*********************/
/******************第一行显示键码******************/
/****************第二行显示总按键数****************/
/*******当按键超过1.5秒时总数加一并提示警告********/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DS=P1^5;
sbit ST=P1^4;
sbit SH=P1^3;
sbit DS2=P1^2;
sbit ST2=P1^1;
sbit SH2=P1^0;
uchar key,temp,num=0;
uchar g=0x30,s=0x30,b=0x30,q=0x30;
uchar code table[]=
"0123456789ABCDEF";
uchar code table1[]=
"warnning!!!";
uchar code table2[]=
"it is rignt";
void delay(uchar x)
{
uchar a,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
/*液晶数据端写入函数(即第一个595)*/
void date_input(uchar date)
{
uchar temp;
uchar i;
for(i=0;i<8;i++)
{
temp=date&(_cror_(0x80,i));
if(temp==0)
{
DS=0;
SH=0;
SH=1;
// delay(20); //5ms
}
else
{
DS=1;
SH=0;
SH=1;
// delay(20);
}
}
ST=0;
ST=1;
// delay(20);
}
/*液晶控制端写入函数(即第二个595)*/
void control_input(uchar date1)
{
uchar temp1;
uchar i;
for(i=0;i<8;i++)
{
temp1=date1&(_cror_(0x80,i));
if(temp1==0)
{
DS2=0;
SH2=0;
SH2=1;
// delay(20);
}
else
{
DS2=1;
SH2=0;
SH2=1;
// delay(20);
}
}
ST2=0;
ST2=1;
// delay(20);
}
/*液晶写指令函数*/
void write_com(uchar date2)
{
control_input(0x00);
date_input(date2);
delay(20); //5ms
control_input(0x40);
delay(50); //11.7ms
control_input(0x00);
}
/*液晶写数据函数*/
void write_date(uchar date3)
{
control_input(0x10);
date_input(date3);
delay(20); //5ms
control_input(0x50);
delay(50); //11.7ms
control_input(0x10);
}
/*液晶初始化函数*/
void init()
{
write_com(0x38);
delay(20);
write_com(0x0f);
delay(20);
write_com(0x06);
delay(20);
write_com(0x01);
delay(20);
}
/*键码显示函数*/
void display(uchar num1)
{
write_com(0x80);
delay(20);
write_date(table[num1]);
}
/*按键次数显示函数*/
void display1()
{
write_com(0xc0);
delay(20);
write_date(q);
write_date(b);
write_date(s);
write_date(g);
}
/*按键超过1.5S时显示警告函数*/
void display2()
{
uchar i;
write_com(0x83);
for(i=0;i<11;i++)
{
write_date(table1[i]);
}
}
/*键盘扫描函数*/
void key_scan()
{
uchar i;
P0=0Xef;
temp=P0;
temp=temp&0x0f;
if(temp!=0x0f)
{
delay(50); //10ms(去抖动)
if(temp!=0x0f)
{
switch(temp)
{
case 0x0e: key=1;
break;
case 0x0d: key=2;
break;
case 0x0b: key=3;
break;
case 0x07: key=4;
break;
}
while(P0!=0XEF)
{
/*开定时器1,当延时到达1.5秒时显示警告*/
EA=1;
ET1=1;
TMOD=0X10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
while(P0!=0XEF); //松手时关中断,并消除警告显示正确
num=0; //松手时num清0
EA=0;
write_com(0x83);
for(i=0;i<11;i++)
{
write_date(table2[i]); //按键不超过1.5S(正常情况)或松手时,显示it is right
}
}
}
}
P0=0Xdf;
temp=P0;
temp=temp&0x0f;
if(temp!=0x0f)
{
delay(50);
if(temp!=0x0f)
{
switch(temp)
{
case 0x0e: key=5;
break;
case 0x0d: key=6;
break;
case 0x0b: key=7;
break;
case 0x07: key=8;
break;
}
while(P0!=0XDF)
{
EA=1;
ET1=1;
TMOD=0X10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
while(P0!=0XDF);
num=0;
EA=0;
write_com(0x83);
for(i=0;i<11;i++)
{
write_date(table2[i]);
}
}
}
}
P0=0Xbf;
temp=P0;
temp=temp&0x0f;
if(temp!=0x0f)
{
delay(50);
if(temp!=0x0f)
{
switch(temp)
{
case 0x0e: key=9;
break;
case 0x0d: key=10;
break;
case 0x0b: key=11;
break;
case 0x07: key=12;
break;
}
while(P0!=0XBF)
{
EA=1;
ET1=1;
TMOD=0X10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
while(P0!=0XBF);
num=0;
EA=0;
write_com(0x83);
for(i=0;i<11;i++)
{
write_date(table2[i]);
}
}
}
}
P0=0X7f;
temp=P0;
temp=temp&0x0f;
if(temp!=0x0f)
{
delay(50);
if(temp!=0x0f)
{
switch(temp)
{
case 0x0e: key=13;
break;
case 0x0d: key=14;
break;
case 0x0b: key=15;
break;
case 0x07: key=16;
break;
}
while(P0!=0X7F)
{
EA=1;
ET1=1;
TMOD=0X10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
while(P0!=0X7F);
num=0;
EA=0;
write_com(0x83);
for(i=0;i<11;i++)
{
write_date(table2[i]);
}
}
}
}
}
void main()
{
init();
while(1)
{
key_scan();
if(key!=0) //当有键按下时才进行一次液晶显示
{
display(key-1);
g++;
if(g>0x39)
{
g=0x30;
s++;
}
if(s>0x39)
{
s=0x30;
b++;
}
if(b>0x39)
{
b=0x30;
q++;
}
display1();
key=0; //显示1次后key清0,防止液晶不停显示
}
}
}
void time1() interrupt 4
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
num++;
if(num==30) //延时50ms*30=1.5s
{
num=0;
g++;
if(g>0x39)
{
g=0x30;
s++;
}
if(s>0x39)
{
s=0x30;
b++;
}
if(b>0x39)
{
b=0x30;
q++;
}
display1();
display2();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -