⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key.c

📁 F2812实验程序
💻 C
字号:
#include "DSP281x_Device.h"     // DSP281x Headerfile Include File
#include "DSP281x_Examples.h"   // DSP281x Examples Include File
#include "f2812a.h"
#include "LCD.h"

//#define CTRLED (*(unsigned int *)0x108004) // port8004
#define MCTRKEY (*(unsigned int *)0x108005)  // port8005
#define CTRCLKEY (*(unsigned int *)0x108006) // port8006
#define CTRSTATUS (*(unsigned int *)0x108000) //port8000
#define CTRGR (*(unsigned int *)0x108000)

unsigned int str1[80]=
{//字符跳动的音符
0x2000,0x3FBE,0x2022,0x1FE2,0x913E,0x5308,0x2110,0x18A0,
0x07FF,0x0000,0x7FFF,0x4120,0x4210,0x7418,0x2010,0x0000,
0x0820,0x1C24,0x0B24,0x08E4,0x0C24,0x0524,0x4E24,0x2420,
0x1010,0x0C10,0x03FF,0x2010,0x4010,0x3FF0,0x0000,0x0000,
0x0000,0x7FF8,0x108C,0x108B,0x1088,0x3FF8,0x0040,0x0030,
0x008F,0x0308,0x2608,0x4008,0x2008,0x1FF8,0x0000,0x0000,
0x0040,0x0040,0x0044,0xFF44,0x494C,0x4974,0x4944,0x4945,
0x4946,0x4964,0x495C,0xFF44,0x0044,0x0044,0x0040,0x0000,
0x0410,0x020C,0x0103,0xFFC2,0x0036,0x004A,0x0142,0x0652,
0x0C48,0x4047,0x8042,0x7FF6,0x004A,0x0042,0x0042,0x0000
};  

unsigned int led_str[8][16]=
{
	{0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x2010,0x2010,0x3FF8,0x2000,0x2000,0x0000,0x0000},	//1
	{0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x3070,0x2808,0x2408,0x2208,0x2188,0x3070,0x0000},	//2
	{0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x1830,0x2008,0x2088,0x2088,0x1148,0x0E30,0x0000},	//3
	{0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0700,0x04C0,0x2420,0x2410,0x3FF8,0x2400,0x0000},	//4
	{0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x19F8,0x2108,0x2088,0x2088,0x1108,0x0E08,0x0000},	//5
	{0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0FE0,0x1110,0x2088,0x2088,0x1118,0x0E00,0x0000},	//6
	{0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0038,0x0008,0x3F08,0x00C8,0x0038,0x0008,0x0000},	//7
	{0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x2080,0x2098,0x3F98,0x2000,0x2000,0x0000,0x0000}	//i
};

unsigned int nScreenBuffer[30*128];
int w,ww,www;
unsigned int uWork1,uWork2,nwork=0;

unsigned int jishu=0;

Uint16 var1 = 0;
Uint16 var2 = 0;
Uint16 var3 = 0;
Uint16 test_count = 0;
Uint16 Test_flag = 0;
Uint16 Test_var  = 0;
Uint16 Test_status[32];

Uint16 PASS_flag = 0;
void mydelay(unsigned int nDelay);

void Gpio_select(void);
void Gpio_PortA(void);
interrupt void cpu_timer0_isr(void);
void main(void)
{
   unsigned int uWork,* pWork;
      
   InitSysCtrl();  
	
    LCDTurnOff();	//关闭显示器
    LCDSetScreenBuffer(nScreenBuffer);		/* 设置屏幕缓冲区指针,缓冲区为1024字(16bit/字) */
	for ( uWork=0,pWork=nScreenBuffer;uWork<30*128;uWork++,pWork++ )	(*pWork)=0;
	LCDSetDelay(1);				/* 设置液晶读写反应时间,参数:DSP主频8MHz时取0,160MHz时取1 */
	LCDTurnOn();				/* 打开显示器 */
	LCDCLS();				/* 清屏幕 */
	LCDPutCString(str1,80,128,5,3);		/* 屏幕写中文字符串跳动的音符,需要给出中文字数  */

 
   InitSysCtrl();
    DINT;
   InitPieCtrl();
   IER = 0x0000;
   IFR = 0x0000;
   
   InitPieVectTable();
   EALLOW;  // This is needed to write to EALLOW protected registers
   PieVectTable.TINT0 = &cpu_timer0_isr;
   EDIS;    // This is needed to disable write to EALLOW protected registers
   
   	CpuTimer0Regs.TPR.all=0;
	CpuTimer0Regs.TIM.all=0;
	CpuTimer0Regs.TPRH.all=0;
	// Make sure timer is stopped:
	CpuTimer0Regs.TCR.bit.TSS=1;
	CpuTimer0Regs.TCR.bit.SOFT=1;
	CpuTimer0Regs.TCR.bit.FREE=1;
	// Reload all counter register with period value:
	CpuTimer0Regs.TCR.bit.TRB=1;
	CpuTimer0Regs.TCR.bit.TIE=1;
	CpuTimer0Regs.PRD.all=0xffffffff;
	
	IER|=M_INT1;

// Enable TINT0 in the PIE: Group 1 interrupt 7
   PieCtrlRegs.PIEIER1.bit.INTx7 = 1;

// Enable global Interrupts and higher priority real-time debug events:
   EINT;   // Enable Global interrupt INTM
   ERTM;   // Enable Global realtime interrupt DBGM
   
   uWork1=0;
   uWork2=0;
   
  CTRSTATUS=0x88;
   CTRSTATUS=8;
   CTRSTATUS=0x88;
   CTRSTATUS=8;
   CTRGR=8;	
   
   Gpio_PortA();
   CpuTimer0Regs.PRD.all=0x168f0;
   CpuTimer0Regs.TCR.bit.TRB = 1;
   StartCpuTimer0();
   mydelay(100);
   StopCpuTimer0();
   
   
	   
	    for(;;)
	    {
		    uWork1=MCTRKEY;
		    CTRCLKEY=0;
		    asm(" nop ");
		    uWork2=MCTRKEY;
		    CTRCLKEY=0;
		    
		    if(uWork1==uWork2&&uWork1!=0)
		    {	
		    	nwork=(uWork1&0x00ff);
		       	
		       if(nwork==0x0001)
		       {	
		       		
		    	   	CpuTimer0Regs.PRD.all=0x168f0;
		    		CpuTimer0Regs.TCR.bit.TRB = 1;
		    		StartCpuTimer0();
		    		LCDPutCString(led_str[7],92,64,1,3);
		    		_Delay(50);
		       		mydelay(100);
		       		StopCpuTimer0();
				
				
				
		       }
		       
		       if(nwork==0x0002)
		       {
		       		
		    		CpuTimer0Regs.PRD.all=0x1960e;
		    		CpuTimer0Regs.TCR.bit.TRB = 1;
		    		StartCpuTimer0();
		    		LCDPutCString(led_str[6],92,64,1,3);
					_Delay(50);
		       		mydelay(100);
		       		StopCpuTimer0();

			
		       }
		       
		       if(nwork==0x0004)
		       {
		       		
		    		CpuTimer0Regs.PRD.all=0x1c32c;
		    		CpuTimer0Regs.TCR.bit.TRB = 1;
		    		StartCpuTimer0();
		    		LCDPutCString(led_str[5],92,64,1,3);
		    		_Delay(50);
		       		mydelay(100);
		       		StopCpuTimer0();

		       }
		       
		       if(nwork==0x0008)
		       {
		       		
		    		CpuTimer0Regs.PRD.all=0x1e140;
		    		CpuTimer0Regs.TCR.bit.TRB = 1;
		    		StartCpuTimer0();
		    		LCDPutCString(led_str[4],92,64,1,3);
		    		_Delay(50);
		       		mydelay(100);
		       		StopCpuTimer0();

				

		       }
		       
		       if(nwork==0x0010)
		       {
		       		
		    		CpuTimer0Regs.PRD.all=0x21d68;
		    		CpuTimer0Regs.TCR.bit.TRB = 1;
		    		StartCpuTimer0();
		    		LCDPutCString(led_str[3],92,64,1,3);
		    		_Delay(50);
		       		mydelay(100);
		       		StopCpuTimer0();

			
		       }
		       
		       if(nwork==0x0020)
		       {
		       		
		    		CpuTimer0Regs.PRD.all=0x25990;
		    		CpuTimer0Regs.TCR.bit.TRB = 1;
		    		StartCpuTimer0();
		    		LCDPutCString(led_str[2],92,64,1,3);
		    		_Delay(50);
		       		mydelay(100);
		       		StopCpuTimer0();

			
		       }
		       
		       if(nwork==0x0040)
		       {
		       		
		    		CpuTimer0Regs.PRD.all=0x2a4c2;
		    		CpuTimer0Regs.TCR.bit.TRB = 1;
		    		StartCpuTimer0();
		    		LCDPutCString(led_str[1],92,64,1,3);
		    		_Delay(50);
		       		mydelay(100);
		       		StopCpuTimer0();

				
		       }
		       
		       if(nwork==0x0080)
		       {
		    		CpuTimer0Regs.PRD.all=0x2d1e0;
		    		CpuTimer0Regs.TCR.bit.TRB = 1;
		    		StartCpuTimer0();
		    		LCDPutCString(led_str[0],92,64,1,3);
		    		_Delay(50);
		       		mydelay(100);
		       		StopCpuTimer0();

			
		       }
		       
		    }
		    
		    
		}

} 	


interrupt void cpu_timer0_isr(void)
{  
  

   // Acknowledge this interrupt to receive more interrupts from group 1
   PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
   CpuTimer0Regs.TCR.bit.TIF = 1;
   CpuTimer0Regs.TCR.bit.TRB = 1;
   GpioDataRegs.GPASET.bit.GPIOA0=1;
   if(jishu==0)
    {GpioDataRegs.GPADAT.bit.GPIOA0=0;
     jishu=1;
     }
   else
    {GpioDataRegs.GPADAT.bit.GPIOA0=1;
    jishu=0;
     }
}

void Gpio_PortA(void)
{    

// GPIO Test #2: 
// Configure Upper 8 bits of Port as inputs and lower 8 bits as outputs    
// Loop back bits [7:0] to bits [15:8]
// Don't set any input qualifier
 
    var1= 0x0000;       // sets GPIO Muxs as I/Os
    var2= 0x00FF;       // sets GPIO 15-8 DIR as inputs, 7-0 DIR as outputs
    var3= 0x0000;       // Don't set any input qualifier
    
    Gpio_select();    
    
    test_count = 0;
    Test_status[Test_var] = 0x0002;
    Test_var++;
    
    Test_status[Test_var] = 0xD0BE;      // Set the default value of status 
                                         // to "PASSED"
    GpioDataRegs.GPACLEAR.all = 0x00FF;  // Test Clear
    asm(" RPT #5 ||NOP");                             
    GpioDataRegs.GPASET.bit.GPIOA0=1;
 
}

void Gpio_select(void)
{
     EALLOW;
     
    GpioMuxRegs.GPAMUX.all=var1;   // Configure MUXs as digital I/Os or
    GpioMuxRegs.GPBMUX.all=var1;   // peripheral I/Os
    GpioMuxRegs.GPDMUX.all=var1;
    GpioMuxRegs.GPFMUX.all=var1;         
    GpioMuxRegs.GPEMUX.all=var1; 
    GpioMuxRegs.GPGMUX.all=var1;
                                        
    GpioMuxRegs.GPADIR.all=var2;   // GPIO PORTs  as output
    GpioMuxRegs.GPBDIR.all=var2;   // GPIO DIR select GPIOs as output 
    GpioMuxRegs.GPDDIR.all=var2;
    GpioMuxRegs.GPEDIR.all=var2;        
    GpioMuxRegs.GPFDIR.all=var2; 
    GpioMuxRegs.GPGDIR.all=var2;

    GpioMuxRegs.GPAQUAL.all=var3;  // Set GPIO input qualifier values
    GpioMuxRegs.GPBQUAL.all=var3;   
    GpioMuxRegs.GPDQUAL.all=var3;
    GpioMuxRegs.GPEQUAL.all=var3;
 
    EDIS;
     
}     



void mydelay(unsigned int nDelay)
{
	int ii,jj,kk=0;
	for ( ii=0;ii<nDelay;ii++ )
	{
		for ( jj=0;jj<1024;jj++ )
		{
			kk++;
		}
	}
}

⌨️ 快捷键说明

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