main.c

来自「F2812实现电机控制源程序.rar」· C语言 代码 · 共 115 行

C
115
字号
/*********************************************************************
**	Module Name:		Key     				    				**
**	Author:				Cbq  			    						**
**	Version:			1.0			    							**
**	CreateDate:			2009-03-15		    						**
**	Description:		            			    				**
**	Remark:				Huozq		    							**
**	Revision History:	2008-11-10			    					**
**********************************************************************/

/*********************************************************************
**	实验目的:通过学习本实验来掌握按键的处理                         **
**	实验说明:通过读取按键端口的数值,来判断哪个按键按下,K1~K8按下  **
**	         分别对应数据1,2,4,8,16,32,64,128                       **
**	实验结果:将按下的键码通过数码管显示出来                         **
**********************************************************************/


#include "DSP28_Device.h"

void WriteLED(unsigned char data);
void delay(unsigned long t);
Uint16 GetKey(void);

unsigned int * SPI_CS  = (unsigned int *) 0x4500;
unsigned int * KeyReg     = (unsigned int *) 0x4800;

unsigned long int a;
Uint16	SpiCode[]={0xFFFF,0x7E7E,0x2929,0x2c2c,0x6666,0xa4a4,0xa0a0,0x3e3e,0x2020};

void main(void)
{   unsigned int i,k;

	/*初始化系统*/
	InitSysCtrl();
	/* 关中断 */
	DINT;
	IER = 0x0000;
	IFR = 0x0000;
	/* 初始化PIE控制寄存器 */
	InitPieCtrl();
	/* 初始化PIE参数表 */
	InitPieVectTable();	
	/* 初始化外设寄存器 */
	InitPeripherals();
	
	///初始化IO口
	InitGpio();
	
	///初始化SPI
   	InitSpi();
   	
    
	/*设置CPU*/
	
	EINT;   // Enable Global interrupt INTM
	ERTM;	// Enable Global realtime interrupt DBGM

    *SPI_CS=0x00;	

	for(;;)
	 {
	   k=GetKey();				//读取键值
	   i=0;
	   while(k!=0)
	   {
	   		k=k>>1;
	   		i++;
	   }						//转换为键码,1~8分别对应1,2,4,8,16,32,64,128
	   
	   WriteLED(SpiCode[i]);	//将所获得的键码显示在数码管上
	   delay(1000);   
	 }
} 	

	


void WriteLED(unsigned char data)
{
   
  if(Spi_TxReady() == 1)
     SpiaRegs.SPITXBUF = data;
  while( Spi_TxReady()!=1);
  delay(1000);
  *SPI_CS=0x01;	
  *SPI_CS=0x00;	
}

void delay(unsigned long t)
{
 while(t>0)
    t--;
}

unsigned int GetKey(void)
{
    unsigned int	temp,temp1;

	temp = *KeyReg;
	temp = temp & 0xff;
	delay(100);
	temp1 = *KeyReg;			
	temp1 = temp1 & 0xff;		//去抖动

    if(temp1==temp)
      return(~temp & 0xff);		//这里取反是为了观察方便
    else
      return 0xff;		    
}

//===========================================================================
// No more.
//===========================================================================

⌨️ 快捷键说明

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