时间触发嵌入式系统设计模式 第22章 笔记 控制LCD显示面板

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wowocpp/article/details/83024157

时间触发嵌入式系统设计模式 第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;
   }

(稍后补充)

猜你喜欢

转载自blog.csdn.net/wowocpp/article/details/83024157