📄 keyboard_lcd.#1
字号:
#include "Keyboard_LCD.h"
//sbit led=P1^6;
#define ZERO 0
#define ONE 1
#define TWO 2
#define THREE 3
#define FOUR 4
#define FIVE 5
#define SIX 6
#define SEVEN 7
#define EIGHT 8
#define NIGHT 9
#define XXXX 0xF0F0
#define INIT_SCREEN 11
#define TRIG_WORD 12
#define TRIG_CH 13
#define TRIG_DELAY 14
#define THRESHOLD 15
#define RETURN_TURE 16
#define RETURN_FALSE 17
unsigned char xdata trig_word[8] = {0,1,1,0,0,1,0,0}; //触发字
unsigned char trig_ch = 0x00; //3级触发时的触发通道
unsigned char thresholdW; //门限电压
unsigned char trig_delay = 0;
struct getMessage
{
unsigned int prevValue;
unsigned int thisValue;
}trigWord,trigCh,trigDelay,threshold;
struct keyCheck
{
unsigned char prevKey;
unsigned char thisKey;
}key;
struct screenMode
{
unsigned char prevMode;
unsigned char thisMode;
unsigned char exitOrNo;
}screenMode,showMode;
void GetKeyValue() interrupt 1
{
unsigned int keyValue;
unsigned char tempMode;
TR0=0;
TF0=0;
keyValue=uart_keyboard();
switch(keyValue)
{
case 0x0008: //zero
case 0x0004: //one
case 0x0040: //two
case 0x0400: //three
case 0x0002: //four
case 0x0020: //five
case 0x0200: //six
case 0x0001: //seven
case 0x0010: //eight
case 0x0100: //night
switch(keyValue)
{
case 0x0008: if(key.thisKey!=ZERO)
key.thisKey=ZERO;
break; //zero
case 0x0004: if(key.thisKey!=ONE)
key.thisKey=ONE;
break; //one
case 0x0040: if(key.thisKey!=TWO)
key.thisKey=TWO;
break; //two
case 0x0400: if(key.thisKey!=THREE)
key.thisKey=THREE;
break; //three
case 0x0002: if(key.thisKey!=FOUR)
key.thisKey=FOUR;
break; //four
case 0x0020: if(key.thisKey!=FIVE)
key.thisKey=FIVE;
break; //five
case 0x0200: if(key.thisKey!=SIX)
key.thisKey=SIX;
break; //six
case 0x0001: if(key.thisKey!=SEVEN)
key.thisKey=SEVEN;
break; //seven
case 0x0010: if(key.thisKey!=EIGHT)
key.thisKey=EIGHT;
break; //eight
case 0x0100: if(key.thisKey!=NIGHT)
key.thisKey=NIGHT;
break; //night
default:
key.thisKey=XXXX;
}
if(key.thisKey!=key.prevKey && key.thisKey!=XXXX)
{
key.prevKey=key.thisKey;
if(screenMode.thisMode==INIT_SCREEN)
{//此时不在编辑状态,可在此加入更多功能
}
else if(screenMode.thisMode==TRIG_WORD)
{
if(key.thisKey==1 || key.thisKey==0)
trigWord.prevValue=(trigWord.prevValue<<1)|key.thisKey;
}
else if(screenMode.thisMode==TRIG_CH)
{
if(key.thisKey==1 || key.thisKey==0)
trigCh.prevValue=(trigCh.prevValue<<1)|key.thisKey;
}
else if(screenMode.thisMode==TRIG_DELAY)
{
trigDelay.prevValue=trigDelay.prevValue*10+key.thisKey;
}
else if(screenMode.thisMode==THRESHOLD)
{
threshold.prevValue=threshold.prevValue*10+key.thisKey;
}
delayX10ms(20);
}
break;
case 0x0080:
screenMode.exitOrNo=RETURN_TURE;
break;
case 0x0800: //取消返回,不修改任何数据
if(screenMode.thisMode!=INIT_SCREEN)
{
tempMode=screenMode.thisMode;
screenMode.thisMode=screenMode.prevMode;
screenMode.prevMode=tempMode;
}
break;
case 0x1000:if(key.thisKey!=TRIG_WORD)
{
key.thisKey=TRIG_WORD;
if(screenMode.thisMode==INIT_SCREEN)
{
screenMode.prevMode=screenMode.thisMode;
screenMode.thisMode=TRIG_WORD;
trigWord.prevValue=0;
}
else if(screenMode.thisMode==TRIG_WORD)
{
if(trigWord.prevValue!=0)
trigWord.thisValue=trigWord.prevValue;
screenMode.prevMode=screenMode.thisMode;
screenMode.thisMode=INIT_SCREEN;
}
}
break;
case 0x2000:if(key.thisKey!=TRIG_CH)
{
key.thisKey=TRIG_CH;
if(screenMode.thisMode==INIT_SCREEN)
{
screenMode.prevMode=screenMode.thisMode;
screenMode.thisMode=TRIG_CH;
trigCh.prevValue=0;
}
else if(screenMode.thisMode==TRIG_CH)
{
if(trigCh.prevValue!=0)
trigCh.thisValue=trigCh.prevValue;
screenMode.prevMode=screenMode.thisMode;
screenMode.thisMode=INIT_SCREEN;
}
}
break;
case 0x4000:if(key.thisKey!=TRIG_DELAY)
{
key.thisKey=TRIG_DELAY;
if(screenMode.thisMode==INIT_SCREEN)
{
screenMode.prevMode=screenMode.thisMode;
screenMode.thisMode=TRIG_DELAY;
trigDelay.prevValue=0;
}
else if(screenMode.thisMode==TRIG_DELAY)
{
if(trigDelay.prevValue!=0 && trigDelay.prevValue<20)
trigDelay.thisValue=trigDelay.prevValue;
screenMode.prevMode=screenMode.thisMode;
screenMode.thisMode=INIT_SCREEN;
}
}
break;
case 0x8000:if(key.thisKey!=THRESHOLD)
{
key.thisKey=THRESHOLD;
if(screenMode.thisMode==INIT_SCREEN)
{
screenMode.prevMode=screenMode.thisMode;
screenMode.thisMode=THRESHOLD;
threshold.prevValue=0;
}
else if(screenMode.thisMode==THRESHOLD)
{
if(threshold.prevValue!=0 && (threshold.prevValue-threshold.prevValue/1000*1000)<=400)
threshold.thisValue=threshold.prevValue-threshold.prevValue/1000*1000;
screenMode.prevMode=screenMode.thisMode;
screenMode.thisMode=INIT_SCREEN;
}
}
break;
default:
key.thisKey=XXXX;
key.prevKey=XXXX;
break;
}
Timer_Init();
}
void ScreenInit()
{
LcdInit();
//开机界面
ClearLcd(LCD_CLEAR);
DisplayImage(logo,LCD_CLEAR);
DisplayImage(logo,LCD_BLACK);
screenMode.thisMode=INIT_SCREEN;
showMode.thisMode=0;
screenMode.exitOrNo=RETURN_FALSE;
}
void showScreen()
{
unsigned char i;
// Init_Device();
ScreenInit();
while(screenMode.exitOrNo==RETURN_FALSE)
{
switch(screenMode.thisMode)
{
case INIT_SCREEN:
if(showMode.thisMode!=INIT_SCREEN)
{
ClearLcd(LCD_CLEAR);
DisplayString(0,0,3,trigWordArray,LCD_CLEAR);
DisplayString(0,1,4,trigChArray,LCD_CLEAR);
DisplayString(0,2,4,trigDelayArray,LCD_CLEAR);
DisplayString(0,3,2,thresholdArray,LCD_CLEAR);
for(i=0;i<8;i++)
{
DisplayInt(12-i,0,(trigWord.thisValue>>i)&0x01,LCD_CLEAR);
DisplayInt(12-i,1,(trigCh.thisValue>>i)&0x01,LCD_CLEAR);
}
DisplayInt(8,2,trigDelay.thisValue,LCD_CLEAR);
DisplayInt(8,3,threshold.thisValue/100,LCD_CLEAR);
DisplayChar(12,3,'.',LCD_CLEAR);
DisplayInt(10,3,threshold.thisValue/10-threshold.thisValue/100*10,LCD_CLEAR);
DisplayInt(11,3,threshold.thisValue-threshold.thisValue/10*10,LCD_CLEAR);
showMode.prevMode=showMode.thisMode;
showMode.thisMode=INIT_SCREEN;
}
break;
case TRIG_WORD:
if(showMode.thisMode!=TRIG_WORD)
{
DisplayString(0,0,3,trigWordArray,LCD_BLACK);
showMode.prevMode=showMode.thisMode;
showMode.thisMode=TRIG_WORD;
}
for(i=0;i<8;i++)
DisplayInt(12-i,0,(trigWord.prevValue>>i)&0x01,LCD_CLEAR);
break;
case TRIG_CH:
if(showMode.thisMode!=TRIG_CH)
{
DisplayString(0,1,4,trigChArray,LCD_BLACK);
showMode.prevMode=showMode.thisMode;
showMode.thisMode=TRIG_CH;
}
for(i=0;i<8;i++)
DisplayInt(12-i,1,(trigCh.prevValue>>i)&0x01,LCD_CLEAR);
break;
case TRIG_DELAY:
if(showMode.thisMode!=TRIG_DELAY)
{
DisplayString(0,2,4,trigDelayArray,LCD_BLACK);
showMode.prevMode=showMode.thisMode;
showMode.thisMode=TRIG_DELAY;
}
DisplayInt(8,2,trigDelay.prevValue,LCD_CLEAR);
break;
case THRESHOLD:
if(showMode.thisMode!=THRESHOLD)
{
DisplayString(0,3,2,thresholdArray,LCD_BLACK);
showMode.prevMode=showMode.thisMode;
showMode.thisMode=THRESHOLD;
}
DisplayInt(8,3,threshold.prevValue/100-threshold.prevValue/1000*10,LCD_CLEAR);
DisplayChar(12,3,'.',LCD_CLEAR);
DisplayInt(10,3,threshold.prevValue/10-threshold.prevValue/100*10,LCD_CLEAR);
DisplayInt(11,3,threshold.prevValue-threshold.prevValue/10*10,LCD_CLEAR);
break;
default:
break;
}
}
//传输给主函数
for(i=0;i<8;i++)
{
trig_word[i]=(trigWord.thisValue>>i)&0x01;
}
trig_ch =trigCh.thisValue; //3级触发时的触发通道
thresholdW=threshold.thisValue; //门限电压
trig_delay=trigDelay.thisValue;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -