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

📄 key.c

📁 51控制LM368 驱动芯片 c语言的STC单片机
💻 C
字号:
#include "reg51.h"
#include "typedef.h"
#include "key.h"
#include "lcd.h"
#include "ds1302.h"

uint wait_time;
bit  	key_enable;
bit 	flash_flag;
bit 	alarm_flag;
uchar flash_count;

uchar function_count;
uchar key;
uchar key_push;
uchar key_l;

void key_scan()
{

	P2=P2&0x07;
	if((P2&0x07)==0x07)
  {
  	if((key_l>2)&(key_l<120))
  		key=key_push;
  	key_l=0;
  }
	else
	{
	 	key_push=P2&0x07;
	 	key_l++;
	 	if(key_l>120)
	 	{
		 	key=key_push;
		 	key_l=key_l-30;
		}
	}
}

void process(uchar current_key)
{	
	switch (current_key)
	{
		case FUNCTION:
    	{
    		key_enable=true;
    		function_count=function_count+1;
    		if((alarm_flag==false)&(function_count==4))
    			function_count=function_count+2;
        if(function_count>=9)
          function_count=1;
      }
      break;
  	case UP:
  		{
  			if(function_count==1)
        {
    			sec++;
    			if(sec>=60)
    				sec=0;
    			write_byte(WRITE_SEC_ADD,hex2bcd[sec]);
    			write_byte(WRITE_MIN_ADD,hex2bcd[min]);	
      	}	
      	if(function_count==2)
        {
    			min++;
    			if(min>=60)
    				min=0;
    			write_byte(WRITE_MIN_ADD,hex2bcd[min]);
      	}		
    		else if(function_count==3)
    		{
    			hour++;	
    			if(hour>=24)
    				hour=0;
    			write_byte(WRITE_HOUR_ADD,hex2bcd[hour]);	
    		}	
    		else if(function_count==4)
    		{
    			clk_min++;	
    			if(clk_min>=60)
    				clk_min=0;
    		}
    		else if(function_count==5)
    		{
    			clk_hour++;	
    			if(clk_hour>=24)
    				clk_hour=0;
    		}	
    		else if(function_count==6)
    		{
    			date++;
    			if(date>=31)
    				date=0;
    			write_byte(WRITE_DATE_ADD,hex2bcd[date]);
    		}
    		else if(function_count==7)
    		{	
    			month++;
    			if(month>=13)
    				month=1;
    			write_byte(WRITE_MONTH_ADD,hex2bcd[month]);
    		}
    		else if(function_count==8)
    		{
    			year++;
    			if(year>99)
    				year=0;
    			write_byte(WRITE_YEAR_ADD,hex2bcd[year]);
    		}  
			}	
			break;
		case DOWN:
      {	
      	if(function_count==1)
    		{
    			if(sec==0)
    				sec=60;
    			--sec;
    			write_byte(WRITE_SEC_ADD,hex2bcd[sec]);
    		}
    		if(function_count==2)
    		{
    			if(min==0)
    				min=60;
    			--min;
    			write_byte(WRITE_MIN_ADD,hex2bcd[min]);
    		}		
    		else if(function_count==3)
    		{
    			if(hour==0)
    				hour=24;
    			--hour;
    			write_byte(WRITE_HOUR_ADD,hex2bcd[hour]);
    		}	
    		else if(function_count==4)
    		{
    			if(clk_min==0)
    				clk_min=60;
    			--clk_min;
    		}
    		else if(function_count==5)
    		{
    			if(clk_hour==0)
    				clk_hour=24;
    			--clk_hour;	
    		}	
    		else if(function_count==6)
    		{
    			if(date==0)
    				date=31;
    			--date;
    			write_byte(WRITE_DATE_ADD,hex2bcd[date]);
    		}
    		else if(function_count==7)
    		{	
    			if(month==1)
    				month=13;
    			--month;
    			write_byte(WRITE_MONTH_ADD,hex2bcd[month]);
    		}
    		else if(function_count==8)
    		{
    			if(year==0)
    				year=100;
    			--year;
    			write_byte(WRITE_YEAR_ADD,hex2bcd[year]);
    		}
    	}
    	break;
    case ALARM:
    	{
    		alarm_flag=(~alarm_flag);
    	}
    	break;
    default:
    	break;
	}
} 	

	
void key_task()
{
	key_scan();
	if(key==0)
	{
		wait_time=wait_time+1;
		if(wait_time==600)
		{
			wait_time=0;
			key_enable=false;
			function_count=0;
		}
	}
	else
		wait_time=0;
	if(function_count!=0)
	{
		flash_count++;
		if(flash_count<15)
			flash_flag=true;
		else if((flash_count>15)&&(flash_count<30))
			flash_flag=false;
		if(flash_count>=30)
			flash_count=0;
	}
	process(key);
	key=0;
}

⌨️ 快捷键说明

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