C51 COMPILER V9.01 KEY 12/16/2025 16:53:48 PAGE 1 C51 COMPILER V9.01, COMPILATION OF MODULE KEY OBJECT MODULE PLACED IN .\Objects\key.obj COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE key.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\key.l -st) OBJECT(.\Objects\key.obj) line level source 1 #include "key.h" 2 #include "GPIO.h" 3 #include "timer.h" 4 #include "string.h" 5 #include "pwm_control.h" 6 KEY_t g_Key; 7 8 void Key_Init(void) 9 { 10 1 GPIO_InitTypeDef GPIO_InitStructure1; //结构定义 11 1 /***********************************1*******************************************/ 12 1 GPIO_InitStructure1.Pin = GPIO_Pin_4; //指定要初始化的IO 4 13 1 GPIO_InitStructure1.Mode = GPIO_PullUp; //指定IO的输入或输出方式,GPIO_PullUp 14 1 GPIO_Inilize(GPIO_P4,&GPIO_InitStructure1); //初始化 15 1 memset(&g_Key, 0, sizeof(g_Key)); 16 1 } 17 18 void Key_ScanTask(void) 19 { 20 1 u8 i; 21 1 static u32 update_10ms = 0; 22 1 23 1 if (systick_1ms - update_10ms > 10) 24 1 { 25 2 update_10ms = systick_1ms; 26 2 27 2 for (i = 0; i < KEY_CHN_MAX; i++) 28 2 { 29 3 switch (g_Key.KEY_STA[i]) 30 3 { 31 4 case KEY_STA_S0: 32 4 if ( P44 == KEY_PRESS ) 33 4 { 34 5 if (g_Key.delayCnt[i] < KEY_DELAY_COUNT) 35 5 { 36 6 g_Key.delayCnt[i]++; 37 6 } 38 5 else 39 5 { 40 6 g_Key.KEY_STA[i] = KEY_STA_S1; //消抖后 41 6 g_Key.key_time[i] = 0; 42 6 g_Key.delayCnt[i] = 0; 43 6 } 44 5 } 45 4 else 46 4 { 47 5 g_Key.delayCnt[i] = 0; 48 5 g_Key.KEY_STA[i] = KEY_STA_S0; 49 5 g_Key.key_val[i] = KEY_VAL_NOT; 50 5 } 51 4 break; 52 4 case KEY_STA_S1: 53 4 g_Key.key_time[i] ++; 54 4 if ( g_Key.key_time[i] < KEY_DELAY_COUNT_LONG ) C51 COMPILER V9.01 KEY 12/16/2025 16:53:48 PAGE 2 55 4 { 56 5 if ( P44 == KEY_LOOSEN ) //松开 57 5 { 58 6 g_Key.key_val[i] = KEY_VAL_SHORT_PRESS; //短按松开 59 6 g_Key.key_time[i] = 0; 60 6 g_Key.KEY_STA[i] = KEY_STA_S0; 61 6 } 62 5 } 63 4 else 64 4 { 65 5 g_Key.KEY_STA[i] = KEY_STA_S2; 66 5 g_Key.key_time[i] = 0; 67 5 g_Key.key_longPress[i] = KEY_VAL_SINGLE_LONG_PRESS; //长按单击按下 68 5 g_Key.key_val[i] = KEY_VAL_CONT_LONG_PRESS; //长按按下 69 5 } 70 4 break; 71 4 72 4 case KEY_STA_S2: 73 4 g_Key.key_longPress[i] = KEY_VAL_NOT; 74 4 if ( P44 == KEY_LOOSEN ) 75 4 { 76 5 g_Key.KEY_STA[i] = KEY_STA_S0; 77 5 g_Key.key_val[i] = KEY_VAL_LONG_PRESS_LOOSEN; //长按松开 78 5 } 79 4 break; 80 4 } 81 3 } 82 2 } 83 1 } 84 85 86 void KEY_TEST(void) 87 { 88 1 u8 flag; 89 1 if (g_Key.key_val[KEY_CH1] == KEY_VAL_SHORT_PRESS) 90 1 { 91 2 g_Key.key_val[KEY_CH1] = KEY_VAL_NOT; 92 2 s_pwm.key_value++; 93 2 switch (s_pwm.key_value) 94 2 { 95 3 case 1: 96 3 s_pwm.currpwm[0] = 2000ul; //90%亮度 97 3 s_pwm.currvalue[0]=0x5A; 98 3 break; 99 3 case 2: 100 3 s_pwm.currpwm[1] = 2000ul; 101 3 s_pwm.currvalue[1]=0x5A; 102 3 break; 103 3 case 3: 104 3 s_pwm.currpwm[2] = 2000ul; 105 3 s_pwm.currvalue[2]=0x5A; 106 3 break; 107 3 case 4: 108 3 s_pwm.currpwm[3] = 2000ul; 109 3 s_pwm.currvalue[3]=0x5A; 110 3 break; 111 3 case 5: 112 3 s_pwm.currpwm[4] = 2000ul; 113 3 s_pwm.currvalue[4]=0x5A; 114 3 break; 115 3 case 6: 116 3 s_pwm.currpwm[5] = 2000ul; C51 COMPILER V9.01 KEY 12/16/2025 16:53:48 PAGE 3 117 3 s_pwm.currvalue[5]=0x5A; 118 3 break; 119 3 case 7: 120 3 s_pwm.currpwm[6] = 2000ul; 121 3 s_pwm.currvalue[6]=0x5A; 122 3 break; 123 3 case 8: 124 3 s_pwm.currpwm[7] = 2000ul; 125 3 s_pwm.currvalue[7]=0x5A; 126 3 break; 127 3 case 9: 128 3 s_pwm.currpwm[8] = 2000ul; 129 3 s_pwm.currvalue[8]=0x5A; 130 3 break; 131 3 case 10: 132 3 s_pwm.currpwm[9] = 2000ul; 133 3 s_pwm.currvalue[9]=0x5A; 134 3 break; 135 3 case 11: 136 3 s_pwm.currpwm[10] = 2000ul; 137 3 s_pwm.currvalue[10]=0x5A; 138 3 break; 139 3 case 12: 140 3 s_pwm.currpwm[11] = 2000ul; 141 3 s_pwm.currvalue[11]=0x5A; 142 3 break; 143 3 case 13: 144 3 for(flag=0;flag<12;flag++) 145 3 { 146 4 s_pwm.currpwm[flag] = PWM_MAX_VALUE; 147 4 s_pwm.currvalue[flag]=0x00; 148 4 } 149 3 s_pwm.key_value = 0; 150 3 break; 151 3 default: 152 3 break; 153 3 } 154 2 } 155 1 } MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 553 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = 10 2 IDATA SIZE = ---- ---- BIT SIZE = ---- ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)