📄 key.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 + -