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

📄 key.c

📁 proteus与keil仿真89c55控制18b20 ds1302 字符液晶
💻 C
字号:
#include "data.h"

/*---外部数据引用区---*/
extern	uchar	str[25];		//存储需要在显示屏显示的字符
extern	uchar	PageFlage;		//显示的当前页号
extern	uchar	up;				//上键按下次数
extern	uchar	down;			//下键按下次数
extern	uchar	left;			//左键按下次数
extern	uchar	right;			//右键按下次数

extern	uchar xdata sec1;
extern	uchar xdata min1;
extern	uchar xdata hour1;
extern	uchar xdata day1;
extern	uchar xdata month1;
extern	uchar xdata year1;
extern	uchar xdata week1;

extern	uchar xdata sec2;
extern	uchar xdata min2;
extern	uchar xdata hour2;
extern	uchar xdata day2;
extern	uchar xdata month2;
extern	uchar xdata year2;
extern	uchar xdata week2;

extern	uchar xdata cal[8][7];	//日历表存储
/*---外部数据引用区---*/

/*---外部函数引用区---*/
extern	void	cls();				//显示屏清屏函数
extern	int		GetTemperature();	//读取温度函数
//显示器显示函数
extern	uchar	dprintf(uchar x,uchar y,char *string,uchar mod);
extern	void	MainPage();			//主页显示函数
/*---外部函数引用区---*/

/*---内部函数定义区---*/
uchar	KeyScan();					//键盘扫描函数
uchar	KeyProcess(uchar KeyNum);	//按键处理函数
void	LeftProcess();				//左键处理函数
void	RightProcess();				//左键处理函数
void	EnterProcess();				//确定按键处理函数
void	Calendar();					//日历处理函数
/*---内部函数定义区---*/

uchar KeyScan()
{
	uchar key;

	key=0;	

	P1_0=0;
	P1_1=1;
	P1_2=1;
	P1_3=1;
	P1_4=1;
	P1_5=1;
	P1_6=1;
	P1_7=1;
	_nop_();_nop_();
	if(!P1_4)key=1;
 	if(!P1_5)key=2;
 	if(!P1_6)key=3;
	if(!P1_7)key=4;

 	P1_0=1;
 	P1_1=0;
 	P1_2=1;
 	P1_3=1;
	_nop_();_nop_();
	if(!P1_4)key=5;
 	if(!P1_5)key=6;
 	if(!P1_6)key=7;
	if(!P1_7)key=8;

 	P1_0=1;
 	P1_1=1;
 	P1_2=0;
 	P1_3=1;
	_nop_();_nop_();
	if(!P1_4)key=9;
 	if(!P1_5)key=10;
 	if(!P1_6)key=11;
	if(!P1_7)key=12;

 	P1_0=1;
 	P1_1=1;
 	P1_2=1;
 	P1_3=0;
	_nop_();_nop_();
	if(!P1_4)key=13;
 	if(!P1_5)key=14;
 	if(!P1_6)key=15;
	if(!P1_7)key=16;
	_nop_();_nop_();
	return key;
}

uchar KeyProcess(uchar KeyNum)
{
	switch(KeyNum)
	{
		case 1:
			cls();
			dprintf(0,0,"测试1",1);
			PageFlage = 0;
			break;
		case 2:
			cls();
			dprintf(0,0,"测试2",1);
			PageFlage = 0;
			break;
		case 3:
			LeftProcess();
			break;
		case 4:
			RightProcess();
			break;
		case 5:
			cls();
			dprintf(0,0,"测试5",1);
			PageFlage = 0;
			break;
		case 6:
			cls();
			dprintf(0,0,"测试6",1);
			PageFlage = 0;
			break;
		case 7:
			cls();
			dprintf(0,0,"测试7",1);
			PageFlage = 0;
			break;
		case 8:
			cls();
			dprintf(0,0,"测试8",1);
			PageFlage = 0;
			break;
		case 9:
			cls();
			dprintf(0,0,"测试9",1);
			PageFlage = 0;
			break;
		case 10:
			cls();
			dprintf(0,0,"测试10",1);
			PageFlage = 0;
			break;
		case 11:
			cls();
			dprintf(0,0,"测试11",1);
			PageFlage = 0;
			break;
		case 12:
			cls();
			dprintf(0,0,"测试12",1);
			PageFlage = 0;
			break;
		case 13:
			cls();
			dprintf(0,0,"测试13",1);
			PageFlage = 0;
			break;
		case 14:
			EnterProcess();
			break;
		case 15:
			cls();
			dprintf(0,0,"测试15",1);
			PageFlage = 0;
			break;
		case 16:
			cls();
			MainPage();
			PageFlage = 1;
			break;
	}
	return PageFlage;
}

void LeftProcess()
{
	left++;
	right--;
	if(PageFlage == 1)
	{
		if(left == 4)
		{
			left = 1;
			right = 3;
		}
		if(left == 1)
		{
			dprintf(0,48,"遥控",1);
			dprintf(40,48,"日历",1);
			dprintf(80,48,"计算器",0);
		}
		else if(left == 2)
		{
			dprintf(0,48,"遥控",1);
			dprintf(40,48,"日历",0);
			dprintf(80,48,"计算器",1);
		}
		else
		{
			dprintf(0,48,"遥控",0);
			dprintf(40,48,"日历",1);
			dprintf(80,48,"计算器",1);
		}
	}
}

void RightProcess()
{
	left--;
	right++;
	if(PageFlage == 1)
	{
		if(right == 4)
		{
			left = 3;
			right = 1;
		}
		if(right == 1)
		{
			dprintf(0,48,"遥控",0);
			dprintf(40,48,"日历",1);
			dprintf(80,48,"计算器",1);
		}
		else if(right == 2)
		{
			dprintf(0,48,"遥控",1);
			dprintf(40,48,"日历",0);
			dprintf(80,48,"计算器",1);
		}
		else
		{
			dprintf(0,48,"遥控",1);
			dprintf(40,48,"日历",1);
			dprintf(80,48,"计算器",0);
		}
	}
}

void EnterProcess()
{
	if(PageFlage == 1)
	{
		if(right == 1)
		{
			cls();
			dprintf(0,0,"测试遥控",1);
			PageFlage = 2;
		}
		else if(right == 2)
			Calendar();
		else
		{
			cls();
			dprintf(0,0,"计算器测试",1);
			PageFlage = 4;
		}
	}
}

void Calendar()
{
	uchar x,y,i,str1[5],t,t1,m,j;

	cls();
	PageFlage = 3;
	up = 1;
	down = 8;
	left = 2;
	right = 1;
	
	dprintf(8,0,"-",0);
	for(i=0;i<5;i++)
		str1[i] = '\0';
	for(i=0;i<25;i++)
		str[i] = '\0';
	strcat(str,"20");
	str1[0] = (year1 >> 4) | 0x30;
	str1[1] = (year1 & 0x0f) | 0x30;
	strcat(str,str1);
	dprintf(24,0,str,1);
	dprintf(64,0,"+",1);

	for(i=0;i<5;i++)
		str1[i] = '\0';
	for(i=0;i<25;i++)
		str[i] = '\0';

	str1[0] = (month1 >> 4) | 0x30;
	str1[1] = (month1 & 0x0f) | 0x30;
	strcat(str,str1);

	dprintf(96,0,"-",1);
	dprintf(112,0,str,1);
	dprintf(136,0,"+",1);

	dprintf(0,16,"星期 一二三四五六日",0);

//	day1 = (day1 >> 4) * 10 + (day1 & 0x0f);
//	month1 = (month1 >> 4) * 10 + (month1 & 0x0f);
//	year1 = (year1 >> 4) * 10 + (year1 & 0x0f);
//	i = fmod((double)day1,7);
//	i = (int)week1 + 7 - (int)i;
//
//	if(month1<8)
//	{
//		if((month1 & 0x01) == 0x01)
//			t = 31;
//		else
//			t = 30;
//	}
//	else
//	{
//		if((month1 & 0x01) == 0x01)
//			t = 30;
//		else
//			t = 31;
//	}
//	m = fmod((double)year1,4);
//	if(month1 == 2)
//	{
//		if(m == 0)
//			t = 29;
//		else
//			t = 28;
//	}
//	for(t1=1;t1<=t;t1++)
//	{
//		y = fmod((double)t1,7);
//		y = (y + i)%7 - 1;
//		x = t1/7;
//		if(y == 0xff)
//		{
//			y = y + 7;
//			x = x - 1;
//		}
//		cal[x][y] = t1;
//	}
//
//	for(i=0;i<5;i++)
//		str1[i] = '\0';
//	for(i=0;i<25;i++)
//		str[i] = '\0';
//	x = 40;
//	y = 32;
//	for(t1=0;t1<5;t1++)
//	{
//		for(i=0;i<7;i++)
//		{
//			m = cal[t1][i];
//			if(m != 0x00)
//			{
//				str1[0] = (m/10) | 0x30;
//				str1[1] = (m - (m/10)*10) | 0x30;
//				strcat(str,str1);
//				if(m == day1)
//					dprintf(x,y,str,0);
//				else
//					dprintf(x,y,str,1);
//				x = x + 16;
//			}
//
//			for(j=0;j<5;j++)
//				str1[j] = '\0';
//			for(j=0;j<25;j++)
//				str[j] = '\0';
//		}
//		x = 40;
//		y = y+16;
//	}
//	dprintf(0,112,"确定",1);
//	dprintf(127,112,"返回",1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -