📄 加入串口的按键.c
字号:
#include"reg51.h"
#include"absacc.h"
#include"stdio.h"
#include"string.h"
#define uchar unsigned char
#define unit unsigned int
//#define INBUF_LEN 1
unsigned char code dis[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0-9代码
unsigned char code shibie[8]={0x98,0x8c,0xb6,0x86,0xc6,0xc7,0x88,0x89};//符号q,p,三,E,【,L
uchar key_moshi=2; //模式按键
uchar key_up=2; //上调按键
uchar key_down=2; //下调按键
uchar key_queren=2; //确认按键
int queren_flag=0; //确认标志
int moshi_flag=0; // 模式标志
int key_first_flag=-1; //开机显示标志位
int moshi1[3],moshi2[3];
sbit ge=P2^4;
sbit shi=P2^5;
sbit bai=P2^6;
sbit fuhao=P2^7;
/******************************
串口发送接收函数
**********************************/
void init_serialcomm(void)
{
SCON=0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
TMOD=0x20; //TMOD: timer 1, mode 2, 8-bit reload
PCON=0x00; //SMOD=1;
TH1=253; //Baud:9600 fosc=12.0MHz
IE=0x90; //Enable Serial Interrupt
TR1=1; // timer 1 run
// TI=1;
}
/***************************
*******延时程序 ************
***************************/
void delay1(int time)
{ int j=0,i=0;
for(j=0;j<time;j++)
{for(i=0;i<10;i++);}
}
/*********************************************
*****读按键 *******************************
***********************************************/
void read_key(void)
{ if(P2&0X01!=0X01)
{delay1(153);
if(P2^0==0)
{
key_moshi=0;
}
}
if(P2&0X02!=0X02)
{ delay1(153);
if(P2^1==0)
{key_up=0;}
}
if(P2&0X04!=0X04)
{delay1(153);
if(P2^2==0)
{ key_down=0;}
}
if(P2&0X08!=0X08)
{delay1(153);
if(P2^3==0)
{
key_queren=0;}
}
}
/*******************************************
**************模式选择 ********************
******************************************/
void moshi_set(void)
{
if(key_moshi==0)
{ key_first_flag=1;
key_moshi=1;
delay1(153);
moshi_flag++;
if(moshi_flag>3)
{moshi_flag=0;}
}
}
/********************************************
***********模式1设置, 增加,减少 ****************
**********************************************/
void key_up_moshi1(void)
{
if(key_up==0&&moshi_flag==1&&queren_flag==0) //上升
{ key_up=0;
delay1(2);
moshi1[1]++;
if(moshi1[1]>=10)
{ moshi1[1]=0;}
}
}
void key_down_moshi1(void)
{
if(key_down==0&&moshi_flag==1&&queren_flag==0) //下调
{ key_down=1;
delay1(2);
moshi1[1]--;
if(moshi1[1]<0)
{ moshi1[1]=9;}
}
}
/************************************U*
************模式2设置,增加,减少 ******
***********************************/
void key_up_moshi2(void)
{
if(key_up==0&&moshi_flag==2&&queren_flag==0) //上升
{ key_up=0;
delay1(2);
moshi1[2]++;
if(moshi1[2]>=10)
{ moshi1[2]=0;}
}
}
void key_down_moshi2(void)
{
if(key_down==0&&moshi_flag==2&&queren_flag==0) //下调
{ key_down=1;
delay1(2);
moshi2[1]--;
if(moshi2[1]<0)
{ moshi2[1]=9;}
}
}
/*************************************************
***************确认按键 *****************************
*************************************************/
void key_queren_flag(void)
{
if(key_queren==0)
{ delay1(5);
key_first_flag=1;
key_queren=1;
queren_flag++;
if(queren_flag>1)
{queren_flag=0;}
}
}
/*******************************************************
*********************显示 *******************************
************************************************************/
void display()
{
/**********************
开机显示
***************************/
if(key_first_flag==-1)
{ P0=dis[2];
P2=0X7F;
delay1(5);
P2=0XFF;
P0=dis[3];
P2=0XBF;
delay1(5);
P2=0XFF;
P0=dis[4];
P2=0XDF;
delay1(5);
P2=0XFF;
P0=dis[5];
P2=0XEF;
delay1(5);
P2=0XFF;
}
/**************************************
模式1显示 符号显示 q
****************************************/
if(moshi_flag==1)
{
P0=shibie[0];
P2=0X7F;
delay1(5);
P2=0XFF;
P0=dis[moshi1[1]];
P2=0XEF;
delay1(5);
P2=0XFF;
}
/*********************************
模式2显示 符号显示 E
************************************/
if(moshi_flag==2)
{
P0=shibie[3];
P2=0X7F;
delay1(5);
P2=0XFF;
P0=dis[moshi2[1]];
P2=0XEF;
delay1(5);
P2=0XFF;
}
/**************************
正常状态显示 0123
********************************/
if(moshi_flag==0&&key_first_flag!=-1)
{
P0=dis[0];
P2=0X7F;
delay1(5);
P2=0XFF;
P0=dis[1];
P2=0XEF;
delay1(5);
P2=0XFF;
P0=dis[2];
P2=0XDF;
delay1(5);
P2=0XFF;
P0=dis[3];
P2=0XBF;
delay1(5);
P2=0XFF;
}
}
/*********************************
主程序
****************************************/
void main()
{
int mam=1;
P2 = 0XFF;
init_serialcomm(); //初始化串口
while(1)
{
read_key();
// SBUF=P2;
// if((P2&0X0F)!=0X0F)
// {SBUF=P2;}
moshi_set();
// SBUF=key_moshi;
/* switch(moshi_flag)
{
case 1:SBUF=1;break;
case 2:SBUF=2;break;
case 3:SBUF=3;break;
default :break;
} */
key_queren_flag();
key_up_moshi1();
key_down_moshi1();
key_up_moshi2();
key_down_moshi2();
display();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -