1. 程式人生 > >簡簡單單---一個TMS320F28035的按鍵驅動程式

簡簡單單---一個TMS320F28035的按鍵驅動程式

/************************************
    標題:key.h
    軟體平臺:CCS v5.2
    硬體平臺:畢設控制板
    主頻:60M
    歡迎光臨
  http://greatech.taobao.com
    author:小船
    data:2013-02-23
*************************************/
#ifndef KEY_H_
#define KEY_H_

#include "PeripheralHeaderIncludes.h"
#include <stdio.h>

#define delay_cheak 15000

#define KEY1     1
#define KEY2     2
#define KEY3     3
#define KEY4     4
#define noKEY    0

#define KEY1_on        GpioDataRegs.GPADAT.bit.GPIO19 == 0
#define KEY2_on        GpioDataRegs.GPADAT.bit.GPIO6 == 0
#define KEY3_on 	   GpioDataRegs.GPADAT.bit.GPIO12 == 0
#define KEY4_on        GpioDataRegs.GPADAT.bit.GPIO16 == 0
#define KEYs_on		   (GpioDataRegs.GPADAT.all & 0x00091040) != 0x00091040

extern void (*key1_handle)();
extern void (*key2_handle)();
extern void (*key3_handle)();
extern void (*key4_handle)();

void KEY_init(void (*key1_dle)(), void (*key2_dle)(), void (*key3_handle)(), void (*key4_dle)());
char KEY_scanf_handle();

#endif /* KEY_H_ */

/************************************
    標題:key.c
    軟體平臺:CCS v5.2
    硬體平臺:畢設控制板
    主頻:60M
    歡迎光臨
  http://greatech.taobao.com
    author:小船
    data:2013-02-23
*************************************/
#include "key.h"

void (*key1_handle) () = NULL;
void (*key2_handle) () = NULL;
void (*key3_handle) () = NULL;
void (*key4_handle) () = NULL;

void KEY_init(void (*key1_dle)(), void (*key2_dle)(), void (*key3_dle)(), void (*key4_dle)())
{
	   EALLOW;

	   GpioCtrlRegs.GPAPUD.all &= (~0x00091040); //除能上拉電阻
	   GpioCtrlRegs.GPADIR.all &= (~0x00091040);   //輸入
	   GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0;  //GPIO19
	   GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 2; // 6 samples

	   GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0;  //GPIO6
	   GpioCtrlRegs.GPAQSEL1.bit.GPIO6 = 2; // 6 samples

	   GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 0;  //GPIO12
	   GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 2; // 6 samples

	   GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 0;  //GPIO16
	   GpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 2; // 6 samples

	   EDIS;

	   GpioDataRegs.GPASET.all |= 0x00091040;

	   key1_handle = key1_dle;
	   key2_handle = key2_dle;
	   key3_handle = key3_dle;
	   key4_handle = key4_dle;
}

char KEY_scanf_handle()
{
	char KEY_mun = 0;
	if(KEYs_on)
		{
			DELAY_US(delay_cheak);
			if(KEYs_on)
			{
				   if(KEY1_on)
				   {
					   (*key1_handle)();
					   KEY_mun = KEY1;
				   }
				   if(KEY2_on)
				   {
					   (*key2_handle)();
					   KEY_mun = KEY2;
				   }
				   if(KEY3_on)
				   {
					   (*key3_handle)();
					   KEY_mun = KEY3;
				   }
				   if(KEY4_on)
				   {
					   (*key4_handle)();
					   KEY_mun = KEY4;
				   }
			}
		}
	return KEY_mun;
}