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

📄 keys.c

📁 8051单片机对八位LED显示芯片以及温度传感器芯片DS1620的驱动程序。
💻 C
字号:
/**********************************************
*   File: Keys.C
*   Description: Tri-Angle  
*   Created Date:  2007-10-01
*   Last Modified: 2007-10-01
*   Author: Jeffrey - Schicksal@126.com
*   Notes: None
**********************************************/
//#include "Atmel/AT89X51.h"
#include "SST/SST89x5x4.H"
#include "INTRINS.H"
#include "Keys.h"




/**********************************************
*   Function: void DelayMs(unsigned int i)
*   Input Variables: unsigned int i
*   Return Variables: void
*   Usage: Delay Function
**********************************************/
void DelayMs(unsigned int i)  // Delay Function 1
{ 
  unsigned char j;
  for (; i!=0; i--)
    for (j=2000; j!=0; j--) {;}
}

/**********************************************
*   Function: void SetBuzzer(unsigned char B)
*   Input Variables: unsigned char B
*   Return Variables: void
*   Usage: Buzzer Driver
**********************************************/
void SetBuzzer(unsigned char B)
{
	if(B>0x01)
		return;					// 输入值超限
	Buzzer = B;					// 改变Buzzer状态
}

/**********************************************
*   Function: unsigned char read_keys(void)
*   Input Variables: void
*   Return Variables: None
*   Usage: Read keys
**********************************************/
unsigned char read_keys()
{
	unsigned char keys;				// 返回键值变量
	P1 = 0xff;						// 置高P1,准备读取
	keys = P1;						// 读取键值
	return keys;					// 返回键值
}

extern volatile unsigned char time[4];
extern volatile unsigned char alarm[2];
volatile unsigned char flag=0;
volatile unsigned char alarm_flag=1;
volatile unsigned char change_timeflag=0;
volatile unsigned char change_adjustflag=0;

/**********************************************
*   Function:void KeyProcess()
*   Input Variables: void
*   Return Variables: None
*   Usage: key process
**********************************************/
void KeyProcess()
{

  unsigned char Key, keyMODE, keySET, keyUP, keyDOWN;
  Key = read_keys();
  if (Key != 0x0f)
  {
    DelayMs(180);
    Key = read_keys();
    if (Key != 0x0f)
    {
      keyMODE = Key & 0x01;
      keySET = 	Key & 0x08;
      keyUP = 	Key & 0x04;
      keyDOWN = Key & 0x02;
      
        SetBuzzer(Buzzer_OFF);        //闹表不响
        alarm_flag=0;                // 取消闹表标示
      
      if (keyMODE==0)                // MODE键被按下
      {
         if (change_adjustflag==0)   // 当前是时钟模式
           change_adjustflag=1;      // 改变为闹表模式
        else
          change_adjustflag=0;       // 改变为时钟模式
        change_timeflag=0;
      }
    
      if (keySET==0)                 // SET键被按下
      {
        if (change_adjustflag==0)    // 时钟模式
        {
          change_timeflag++;
          if (change_timeflag>=3)
            change_timeflag=0;
        }
        else                         // 闹表模式
        {
          if (alarm_flag==0)
          {
            alarm_flag=1;
            change_timeflag=0;
            flag=1;
          }
          else
          {
            if (change_timeflag==0)
            {
              if (flag==1)  // 进入修改闹钟程序
              {
                change_timeflag++;
                flag=0;
              }
              else    // 退出闹钟修改程序
              {
                change_timeflag=0;
                alarm_flag=0;
              }
            }  
            else
            {
              change_timeflag++;
              if (change_timeflag>=3)
                change_timeflag=0;
            }
          }
        }
      }
    
      if (keyUP==0)            // UP键被按下
      {
        if (change_adjustflag == 0)
        {
          // 调整时钟
          time[change_timeflag-1]++;
          if (time[1]==0xff)
		  {
		    time[1]=59;
		  }

		  if (time[0]==0xff)
		  {
		    time[0]=23;
		  }

		  if (time[3]>1)
		  {
		    time[3]=0;
		    time[2]++;
		  }

		  if (time[2]>=60)
		  { 
		    time[2]-=60;
		  }
		  if (time[1]>=60)
		  { 
		    time[1]-=60;
		  }
		  if (time[0]>=24)
		    time[0]-=24;  

        }
        else
        {
          // 调整闹表
          alarm[change_timeflag-1]++;
          if (time[1]==0xff)
		  {
		    time[1]=59;
		  }

		  if (time[0]==0xff)
		  {
		    time[0]=23;
		  }

		  if (time[3]>1)
		  {
		    time[3]=0;
		    time[2]++;
		  }

		  if (time[2]>=60)
		  { 
		    time[2]-=60;
		  }
		  if (time[1]>=60)
		  { 
		    time[1]-=60;
		  }
		  if (time[0]>=24)
		    time[0]-=24; 
        }
      }  
    
      if (keyDOWN==0)          // DOWN键被按下
      {
         if (change_adjustflag == 0)
		{
          // 调整时钟
          time[change_timeflag-1]--;
                    if (time[1]==0xff)
		  {
		    time[1]=59;
		  }

		  if (time[0]==0xff)
		  {
		    time[0]=23;
		  }

		  if (time[3]>1)
		  {
		    time[3]=0;
		    time[2]++;
		  }

		  if (time[2]>=60)
		  { 
		    time[2]-=60;
		  }
		  if (time[1]>=60)
		  { 
		    time[1]-=60;
		  }
		  if (time[0]>=24)
		    time[0]-=24; 
        }
        else
        {
          // 调整闹表
          alarm[change_timeflag-1]--;
            if (alarm[1]==0xff)
			    alarm[1]=59;
			if (alarm[0]==0xff)
			    alarm[0]=23;

			if (alarm[1]>=60)
			{
			    alarm[1]-=60;
			}
			if (alarm[0]>=24)
			    alarm[0]-=24;

        }
      }
    }
  }
}

⌨️ 快捷键说明

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