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

📄 key.c

📁 基于AVR单片机的热电偶测量系统源码
💻 C
字号:
/************************************************************
  FileName: KEY.c
  Description: 键盘模块,实现时间的调整和参数的设置                    
  Function List:  
1.inchour()  //小时加1的子程序,在调整小时的状态下按下加1键调用到此程序
2.incmin()  //分钟加1的子程序,在调整分钟的状态下按下加1按键调用到此程序
3.dechour()  //小时减1的子程序,在调整小时的状态下按下减1按键调用到此程序
4.decmin()	  //分钟减1的子程序,在调整小时的状态下按下减1按键调用到此程序
5.canbi0()  //参比的正负设置
6.incanbizhengshu()  //参比的整数加1
7.incanbixiaoshu()	 //参比的小数加1
8.decanbizhengshu()  //参比的整数减1
9.decanbixiaoshu()	 //参比的小数减1
10.getkey()  //获取按键值
11.getkeylock()  //锁定按键并获取按键值
12.checkkey()  //键盘处理函数
***************************************************************/
#include <iom16v.h>
#include <macros.h>
#include "key.h"
#include "lcd.h"
#include "1302.h"
#include "6675.h"
#include "main.h"

extern unsigned char entercount,leftcount,rightcount;
extern unsigned char position1302,hh,mm,positioncanbi,canbianjian;
extern unsigned int  time_array[6],canbi_array[5];

void inchour(void)	 //小时加1的子程序,在调整小时的状态下按下加1键调用到此程序
{
 	time_array[1]++;
 	if((time_array[0]==0x02)&&(time_array[1]==0x04))
	{
		 time_array[1]=0x00;
		 time_array[0]=0x00;
	}
	if((time_array[0]!=0x02)&&(time_array[1]==0x0A))
	{
		  time_array[0]++;
		  time_array[1]=0x00;
	}
    Draw_NtoArab(0x00,0x28,time_array[0]);
	Draw_NtoArab(0x00,0x30,time_array[1]);
}


void incmin(void)	 //分钟加1的子程序,在调整分钟的状态下按下加1按键调用到此程序
{
 	time_array[3]++;
 	if(time_array[3]==0x0A)
 	{
	 	time_array[3]=0x00;
	 	time_array[2]++;
	 	if(time_array[2]==0x06)
		 	time_array[2]=0x00;
	}
    Draw_NtoArab(0x00,0x40,time_array[2]);
	Draw_NtoArab(0x00,0x48,time_array[3]); 
}

void dechour(void)   //小时减1的子程序,在调整小时的状态下按下减1按键调用到此程序
{
	time_array[1]--;
 	if((time_array[0]==0x00)&&(time_array[1]==-1))
	{
	  time_array[1]=0x03;
	  time_array[0]=0x02;
	}
	if((time_array[0]!=0x00)&&(time_array[1]==-1))
	{
	   	time_array[1]=0x09;
		time_array[0]--;
	}
    Draw_NtoArab(0x00,0x28,time_array[0]);
	Draw_NtoArab(0x00,0x30,time_array[1]);
}

void decmin(void)	 //分钟减1的子程序,在调整小时的状态下按下减1按键调用到此程序
{

 	time_array[3]--;
 	if(time_array[3]==-1)
 	{
	 	time_array[3]=0x09;
	 	time_array[2]--;
	 	if(time_array[2]==-1)
	 		time_array[2]=0x05;
	}
         
	Draw_NtoArab(0x00,0x40,time_array[2]);
	Draw_NtoArab(0x00,0x48,time_array[3]); 
}	


void canbi0(void)       //参比的正负设置
{  
	if(leftcount%2==0)
        Bmp8x16(0x04,0x38,zhenghao);
   	else 
        Bmp8x16(0x04,0x38,fuhao);
}

void incanbizhengshu(void)	 //参比的整数加1
{
 	canbi_array[2]++;
 	if((canbi_array[1]==0x09)&&(canbi_array[2]==0x09))
	{
		 canbi_array[1]=0x00;
		 canbi_array[2]=0x00;
	}
	if((canbi_array[1]!=0x09)&&(canbi_array[2]==0x0A))
	{
		  canbi_array[1]++;
		  canbi_array[2]=0x00;
	}
         
    Draw_NtoArab(0x04,0x40,canbi_array[1]);
	Draw_NtoArab(0x04,0x48,canbi_array[2]);
         
}

void incanbixiaoshu(void)	 //参比的小数加1
{
 	canbi_array[4]++;
 	if((canbi_array[3]==0x09)&&(canbi_array[4]==0x09))
	{
		 canbi_array[3]=0x00;
		 canbi_array[4]=0x00;
	}
	if((canbi_array[3]!=0x09)&&(canbi_array[4]==0x0A))
	{
		  canbi_array[3]++;
		  canbi_array[4]=0x00;
	}
         
    Draw_NtoArab(0x04,0x58,canbi_array[3]);
	Draw_NtoArab(0x04,0x60,canbi_array[4]);
}

void decanbizhengshu(void)	 //参比的整数减1
{
 	canbi_array[2]--;
 	if((canbi_array[1]==0x00)&&(canbi_array[2]==-1))
	{
	  canbi_array[1]=0x09;
	  canbi_array[2]=0x09;
	}
	if((canbi_array[1]!=0x00)&&(canbi_array[2]==-1))
	{
	   	canbi_array[2]=0x09;
		canbi_array[1]--;
	}
    Draw_NtoArab(0x04,0x40,canbi_array[1]);
	Draw_NtoArab(0x04,0x48,canbi_array[2]);
}

void decanbixiaoshu(void)	 //参比的小数减1
{
 
 	canbi_array[4]--;
 	if((canbi_array[3]==0x00)&&(canbi_array[4]==-1))
	{
	  canbi_array[3]=0x09;
	  canbi_array[4]=0x09;
	}
	if((canbi_array[3]!=0x00)&&(canbi_array[4]==-1))
	{
	   	canbi_array[4]=0x09;
		canbi_array[3]--;
	}
    Draw_NtoArab(0x04,0x58,canbi_array[3]);
	Draw_NtoArab(0x04,0x60,canbi_array[4]);   	 
}


unsigned char getkey(void)
{
	 unsigned char keycode;
	 if((PINB&0xbc)!=0xbc)
	 {
	   	Delay10ms(35);
	  	if((PINB&0Xbc)!=0Xbc)
	   	{
	     	keycode=PINB&0xbc;
			while((PINB&0xbc)!=0Xbc);
		}
	}
	return keycode; 
}

unsigned char getkeylock(void)
{
	unsigned char keycode;
	while((PINB&0xbc)==0xbc);
	Delay10ms(35);
	if((PINB&0xbc)!=0xbc)
	{
	    keycode=PINB&0xbc;
	    while((PINB&0Xbc)!=0Xbc);
	}
	return keycode;
}

void checkkey(void)
{
 	//unsigned char i,hour,min,sec;
	unsigned char key;

	key=getkey();
	if(key==enter)
	{
		if(entercount==0)
		{
			Draw_NtoArab_rev(0x00,0x28,time_array[0]);
			Draw_NtoArab_rev(0x00,0x30,time_array[1]);
			while(1)
			{
			    key=getkeylock();
			    if(key==enter)
				{
					hh=(time_array[0]<<4)|time_array[1];
					mm=(time_array[2]<<4)|time_array[3];
		            pDS1302_Write(mDS1302_CONTROL_Reg,0x00);
		            wait;
                    pDS1302_Write(mDS1302_HOUR_Reg,hh);
		            pDS1302_Write(mDS1302_MIN_Reg,mm);
		            pDS1302_Write(mDS1302_CONTROL_Reg,0x80);
		            wait;
					entercount++;
				    break;
				}
				else if(key==up)
				{
				 	if(position1302==zuo)
				 		inchour();
				 	else
				 		incmin();
				}
				else if(key==down)
				{
					if(position1302==zuo)
						dechour();
					else
						decmin();
				}
				else if(key==left)
				{
					position1302=zuo;
					Draw_NtoArab_rev(0x00,0x28,time_array[0]);
					Draw_NtoArab_rev(0x00,0x30,time_array[1]);					        		
					Draw_NtoArab(0x00,0x40,time_array[2]);
					Draw_NtoArab(0x00,0x48,time_array[3]);			        		      		
				}
				else
				{
					position1302=zhong;
					Draw_NtoArab_rev(0x00,0x40,time_array[2]);
					Draw_NtoArab_rev(0x00,0x48,time_array[3]);				        		
					Draw_NtoArab(0x00,0x28,time_array[0]);
					Draw_NtoArab(0x00,0x30,time_array[1]);
				}						
			}				       
		}
		else 		//进入参比设置
		{
		    Draw_NtoArab_rev(0x04,0x40,canbi_array[1]);
		    Draw_NtoArab_rev(0x04,0x48,canbi_array[2]);		 
		    while(1)
			{
				key=getkeylock();
				if(key==enter)
				{
					Draw_NtoArab(0x04,0x40,canbi_array[1]);
			        Draw_NtoArab(0x04,0x48,canbi_array[2]);
					Draw_NtoArab(0x04,0x58,canbi_array[3]);
			        Draw_NtoArab(0x04,0x60,canbi_array[4]);
					canbianjian=canbi_array[1]*1000+canbi_array[2]*100+canbi_array[3]*10+canbi_array[4];
				    break;
				}
				else if(key==up)
				{
					if(positioncanbi==can1)
						incanbizhengshu();
					else
				        incanbixiaoshu();
				}
				else if(key==down)
				{
					if(positioncanbi==can1)
						decanbizhengshu();
					else
						decanbixiaoshu();				        		
				}
				else if(key==left)
				{
					positioncanbi=can1;
					Draw_NtoArab_rev(0x04,0x40,canbi_array[1]);
					Draw_NtoArab_rev(0x04,0x48,canbi_array[2]);				        		
				    Draw_NtoArab(0x04,0x58,canbi_array[3]);
				    Draw_NtoArab(0x04,0x60,canbi_array[4]);				        		      		
				}
				else
				{
					positioncanbi=can2;
					Draw_NtoArab_rev(0x04,0x58,canbi_array[3]);
				    Draw_NtoArab_rev(0x04,0x60,canbi_array[4]);				        		
				    Draw_NtoArab(0x04,0x40,canbi_array[1]);
				    Draw_NtoArab(0x04,0x48,canbi_array[2]);			        		
				}			    	
			}
			entercount=0;
		}
	}
}

⌨️ 快捷键说明

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