⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyboard_lcd.c

📁 TS12864液晶驱动
💻 C
字号:
#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(40);
				}
				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 + -