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

📄 key.c

📁 set(key6) left(key5) right(key4) up(key3) down(key2) OK(key1) 功能一:时钟 时钟计时; 按下set(一次)键即可调时间
💻 C
字号:
#define SET     	0x20
#define LEFT    	0x10
#define RIGHT  	    0x08
#define UP      	0x04
#define DOWN        0x02
#define OK     	    0x01

#include <reg51.h>
extern unsigned char sec,min,hour;
extern unsigned char code table[16]; // 字形数据
extern unsigned char DispBuf[6];
unsigned char sec1,min1,hour1;       //闹钟值
unsigned char Alarmsec,Alarmmin,Alarmhour;
unsigned char Alarm;
bit p1,p2;                             //12.24时转换标志位

unsigned char EditSec,EditMin,EditHour;
extern unsigned char KeyVal;
unsigned char CurKey,LastKey;
unsigned char KeySts;
void DisplayEdit()                     
{
    DispBuf[0] = table[EditSec % 10];
    DispBuf[1] = table[EditSec / 10];
    DispBuf[2] = table[EditMin % 10];
    DispBuf[3] = table[EditMin / 10];
    DispBuf[4] = table[EditHour % 10];
    DispBuf[5] = table[EditHour / 10];
    DispBuf[6-KeySts] &= 0x7F;
}  // 编辑期间的显示
void DisplayEditAlarm()              //编辑闹钟期间的显示        
{
    DispBuf[0] = table[Alarmsec % 10];
    DispBuf[1] = table[Alarmsec/ 10];
    DispBuf[2] = table[Alarmmin % 10];
    DispBuf[3] = table[Alarmmin / 10];
    DispBuf[4] = table[Alarmhour % 10];
    DispBuf[5] = table[Alarmhour / 10];
	DispBuf[12-KeySts] &= 0x7F;
}
void Copy()
{
     sec =EditSec;
     min =EditMin;
     hour =EditHour;
}  // 编辑值刷新当前时间
void CopyAlarm()
{
      sec1=Alarmsec;
      min1=Alarmmin;
      hour1=Alarmhour;
}  // 编辑值刷新当前闹钟时间
void KeyPro(void)
{
unsigned char KeyPressed;

    LastKey = CurKey;
    CurKey = KeyVal;
    KeyPressed = CurKey^LastKey;

    if(KeyPressed==0) return; //检测键的变化
    if(CurKey==0) return;//  键释放忽略
    switch(KeySts)
    {
        case 0:     // Set Key pressed while running
            p1=p2=0;
            if(KeyPressed==SET) 
		    {
                  KeySts++;
				  
   			}
			      EditSec = sec;
                  EditMin = min; 
		          EditHour = hour;
            if(KeyPressed==UP)
			      {
                    p1=1;
                  }
			if(KeyPressed==DOWN)
			      {
                   p2=1;
                  }
				  break;        
case 1:     // hourHi edit status;
            switch(KeyPressed)
            {
			case SET:KeySts+=6; Alarmsec =sec1;Alarmmin=min1;Alarmhour=hour1;break;//进入闹钟设定状态
            case RIGHT: KeySts++;	break;
            case UP:  if(EditHour<13) EditHour += 10; 
                        else EditHour = 23;
                               break;
            case DOWN:  if(EditHour>10) EditHour -= 10;     
                              else EditHour = 0;
                              break;
            case OK:    Copy();    
                               KeySts=0;                
                              break;             
            }
            break;
        
case 2:     // hourLo edit status;
            switch(KeyPressed)
            {
            case RIGHT: KeySts++;
                        	break;
            case LEFT:  KeySts--;
                        	break;
            case UP:    if(EditHour<23) EditHour++;    
                        	break;
            case DOWN:  if(EditHour>0) EditHour--;
                                   break;
            case OK:       Copy();    
                        	  KeySts=0;                
                        	  break;             
            }
            break;
        
case 3:     // minHi edit status;
            switch(KeyPressed)
            {
            case RIGHT: KeySts++;
                        break;
            case LEFT:  KeySts--;
                        break;
            case UP:    if(EditMin<49) EditMin+=10;
                        else EditMin = 59; 
                        break;
            case DOWN:  if(EditMin>10) EditMin-=10;
                        else EditMin = 0;
                        break;
            case OK:    Copy();    
                        KeySts=0;                
                        break;             
            } break;
      case 4:     // minLo edit status;
            switch(KeyPressed)
            {
            case RIGHT: KeySts++;
                        break;
            case LEFT:  KeySts--;
                        break;
            case UP:    if(EditMin<59) EditMin++;
                        break;
            case DOWN:  if(EditMin>0) EditMin--;
                        break;
            case OK:    Copy();    
                        KeySts=0;                
                        break;             
            }
            break;
        
     

case 5:     // secHi edit status;
            switch(KeyPressed)
            {
            case RIGHT: KeySts++;
                        break;
            case LEFT:  KeySts--;
                        break;
            case UP:    if(EditSec<49) EditSec+=10;
                        else EditSec = 59; 
                        break;
            case DOWN:  if(EditSec>10) EditSec-=10;
                        else EditSec = 0;
                        break;
            case OK:    Copy();    
                        KeySts=0;                
                        break;             
            }
            break;
        
case 6:     // secLo edit status;
            switch(KeyPressed)
            {
            case LEFT:  KeySts--;
                        	break;
            case UP:    if(EditSec<59) EditSec++;
                        	break;
            case DOWN:  if(EditSec>0) EditSec--;
                        	break;
            case OK:    Copy();    
                        	KeySts=0;                
                        	break;             
            }
            break;
case 7:     // alarmhourHi edit status;
            switch(KeyPressed)
            {
            case RIGHT: KeySts++;	break;
            case UP:    if(Alarmhour<13) Alarmhour += 10; 
                               else Alarmhour = 23;
                               break;
            case DOWN:  if(Alarmhour>10) Alarmhour -= 10;     
                              else Alarmhour = 0;
                              break;
            case OK:   CopyAlarm(); 
                               KeySts=0;     Alarm=1;           
                              break;             
            }
            break;
        
case 8:     // alarmhourLo edit status;
            switch(KeyPressed)
            {
            case RIGHT: KeySts++;
                        	break;
            case LEFT:  KeySts--;
                        	break;
            case UP:    if(Alarmhour<23) Alarmhour++;    
                        	break;
            case DOWN:  if(Alarmhour>0) Alarmhour--;
                                   break;
            case OK:       CopyAlarm();   
                        	  KeySts=0;  Alarm=1;              
                        	  break;             
            }
            break;
        
case 9:     // alarmminHi edit status;
            switch(KeyPressed)
            {
            case RIGHT: KeySts++;
                        break;
            case LEFT:  KeySts--;
                        break;
            case UP:    if(Alarmmin<49) Alarmmin+=10;
                        else Alarmmin = 59; 
                        break;
            case DOWN:  if(Alarmmin>10) Alarmmin-=10;
                        else Alarmmin = 0;
                        break;
            case OK:   CopyAlarm(); 
                        KeySts=0;   Alarm=1;             
                        break;             
            } break;
case 10:     // minLo edit status;
            switch(KeyPressed)
            {
            case RIGHT: KeySts++;
                        break;
            case LEFT:  KeySts--;
                        break;
            case UP:    if(Alarmmin<59) Alarmmin++;
                        break;
            case DOWN:  if(Alarmmin>0) Alarmmin--;
                        break;
            case OK:    CopyAlarm(); 
                        KeySts=0; Alarm=1;               
                        break;             
            }
            break;
        
     

case 11:     // alarmsecHi edit status;
            switch(KeyPressed)
            {
            case RIGHT: KeySts++;
                        break;
            case LEFT:  KeySts--;
                        break;
            case UP:    if(Alarmsec<49) Alarmsec+=10;
                        else Alarmsec = 59; 
                        break;
            case DOWN:  if(Alarmsec>10) Alarmsec-=10;
                        else Alarmsec = 0;
                        break;
            case OK:    CopyAlarm(); 
                        KeySts=0;Alarm=1;                
                        break;             
            }
            break;
        
case 12:     // alarmsecLo edit status;
            switch(KeyPressed)
            {
            case LEFT:  KeySts--;
                        	break;
            case UP:    if(Alarmsec<59) Alarmsec++;
                        	break;
            case DOWN:  if(Alarmsec>0) Alarmsec--;
                        	break;
            case OK:   CopyAlarm();   
                        	KeySts=0;Alarm=1;
                        	break;             
            }
            break;
        default:
            KeySts = 0; break; 	// 默认的状态机出错处理
    }
    if(KeySts<7)
    DisplayEdit();              //调用时钟显示函数
	if(KeySts>=7)
	DisplayEditAlarm();          //调用闹钟显示函数     
}

⌨️ 快捷键说明

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