1. 程式人生 > >時間觸發嵌入式系統設計模式 第22章 筆記 控制LCD顯示面板

時間觸發嵌入式系統設計模式 第22章 筆記 控制LCD顯示面板

時間觸發嵌入式系統設計模式 第22章 筆記 控制LCD顯示面板

在這裡插入圖片描述

E:\Nu_LB_Nuc140\Nu_LB_NUC140_BSP\SampleCode\Nu-LB-NUC140\Sched_22_LCD_Time

E:\Nu_LB_Nuc140\Nu_LB_NUC140_BSP\SampleCode\Nu-LB-NUC140\Sched_22_LCD_KEY

按鍵掃描:

/*------------------------------------------------------------------*-

  KEYPAD_Scan()

  這個函式由被排程的鍵盤函式呼叫,必須根據需要修改以匹配按鍵標籤,
  包含兩個“功能鍵”可以與其他列的任何按鍵同時使用
 
-*------------------------------------------------------------------*/
unsigned char KEYPAD_Scan(char* const pKey, char* const pFuncKey)
   {
   static char Old_Key;

   char Key = KEYPAD_NO_NEW_DATA;
   char Fn_key = (char) 0x00;

	GPIO_SetMode(PA, BIT2, GPIO_MODE_QUASI);
	GPIO_SetMode(PA, BIT1, GPIO_MODE_QUASI);
	GPIO_SetMode(PA, BIT0, GPIO_MODE_QUASI);
	
	PA2 = 1;
  PA1 = 1;
	PA0 = 1;
		 
	GPIO_SetMode(PA, BIT3, GPIO_MODE_QUASI);
	GPIO_SetMode(PA, BIT4, GPIO_MODE_QUASI);
	GPIO_SetMode(PA, BIT5, GPIO_MODE_QUASI);		
		 
	PA5 = 1;
  PA4 = 1;
	PA3 = 1;		 

	#define C1 PA2
  #define C2 PA1 
	#define C3 PA0
	
	#define R1 PA3
	#define R2 PA4
	#define R3 PA5		 
		 
//////////////

   C1 = 0; // 掃描列1
	  
      if (R1 == 0) Key = '1';
      if (R2 == 0) Key = '4';      
      if (R3 == 0) Fn_key = '*';
   C1 = 1;

   C2 = 0; // 掃描列 2
      if (R1 == 0) Key = '2';
      if (R2 == 0) Key = '5';
      if (R3 == 0) Key = '0';
   C2 = 1;

   C3 = 0; // 掃描列 3
      if (R1 == 0) Key = '3';
      if (R2 == 0) Key = '6';
      if (R3 == 0) Fn_key = '#';
   C3 = 1;

   if (Key == KEYPAD_NO_NEW_DATA)
      {
      // 沒有按鍵被按下(或只是功能鍵)
      Old_Key = KEYPAD_NO_NEW_DATA;
      Last_valid_key_G = KEYPAD_NO_NEW_DATA;

      return 0;  // 沒有新的資料
      }
   
   // 一個按鍵被按下,通過檢查兩次來消抖
   if (Key == Old_Key)
      {
      //檢測到一個有效的(經過消抖)鍵按下
      
      //必須是一個新的按鍵才有效,不允許“自動重複”
      if (Key != Last_valid_key_G)
         { 
         // 新的按鍵
         *pKey = Key;
					printf("%c",Key);
         Last_valid_key_G = Key;

         // 功能鍵是否也被按下
         if (Fn_key)
            {
            // 功能鍵與另一個按鍵被同時按下
            *pFuncKey = Fn_key;
            }
         else
            {
            *pFuncKey = (char) 0x00;
            }

         return 1;
         }
      }

   // 沒有新的資料
   Old_Key = Key;
   return 0;
   }

(稍後補充)