DSP CCS12.00 芯片:TMS320F28335 结课设计 综合设计 TFTLCD + 按键 + 蜂鸣器 + 流水灯

(永辉电子DSP 板子)  

代码功能 :

1.外部中断 控制 流水灯的方向

2. key 1 开启 蜂鸣器 

3.key 2 关闭 蜂鸣器 

4.key 3 开启 LED灯  (可能按键不对  但是就是这几个)

5.key 4 关闭 LED 灯  

6.TFTLCD 屏幕显示


代码:

#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File
#include <bsp_includes.h>


#if	(TFTLCD_TEST == 1)
uchar class[]= {"班级 :"};
uchar Name[]= {"姓名: "};
uchar student_ID[]={"学号: "};
uchar Str1[] = {"题目: DSP综合设计 "};//方向的提示语句
uchar Str2[] = {"蜂鸣器模块: "};
uchar Str3[] = {"LED流水灯的方向: "};
uchar Str4[] = {"LED 小灯模块: "};
uchar Str5[] = {"正向"};
uchar Str6[] = {"反向"};
uchar Str7[] = {"开启"};
uchar Str8[] = {"关闭"};
#endif

int kkk1=0;//控制 流水灯的方向  0 正向  1 反向
int kkk2=0;//控制 LED 灯的模块的亮灭  0 不亮  1 亮
int kkk3=0;//控制 蜂鸣器模块响  0 不响  1 响


// 本例中用到的全局变量;
volatile Uint32 Xint1Count; //发生外部中断1的次数;
#define LED  *((Uint16 *)0x4600)//流水灯的映射
const Uint16 LedCode[9]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0XFF};//小灯亮的 编码
#define Key_Read *((Uint16 *)0x4700)//按键的映射
#define KeyValue ((Key_Read)&0x0f)
#define keyon1 GpioDataRegs.GPADAT.bit.GPIO29//外部中断
#define DELAY 35.700L
unsigned int decetion;//流水灯 闪烁的方向


// 中断服务子程序在主程序下面时,需要在主程序之前要先申明才能使用.
interrupt void xint1_isr(void);
void delay_loop_2(void);//延时函数
void Gpio_select(void);//小灯  与蜂鸣器的初始化函数
void delay_loop_1(void);//超短时间的延时
void  kongzhi_1();//控制 流水灯 的TFT 显示状态
void kongzhi_2();//控制 LED 灯的亮灭的显示状态
void kongzhi_3();//控制  蜂鸣器 的 的状态




//函数入口
void main(void)
{
    InitSysCtrl();
          DINT;
          InitPieCtrl();
          IER = 0x0000;
          IFR = 0x0000;
          InitPieVectTable();
          Gpio_select();//GPIO  led 端口初始化
          InitXintf();
          InitSpiaGpio();
          Gpio_select();

          EALLOW;  // 修改被保护的寄存器,修改前应添加EALLOW语句
          PieVectTable.XINT1 = &xint1_isr;
          GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 00;      // GPIO60为GPIO功能
          GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;      // GPIO60为输出功能

          EDIS;   // EDIS的意思是不允许修改被保护的寄存器



          // 在外设中断扩展模块中断使能寄存器中允许XINT1和XINT2: (组1中断4 & 5)
          // 使能CPU中断1(INT1):
             PieCtrlRegs.PIECTRL.bit.ENPIE = 1;          // 使能外设中断扩展PIE模块
             PieCtrlRegs.PIEIER1.bit.INTx4 = 1;          // 使能PIE组1的INT4
             IER |= M_INT1;                              // 使能CPU中断1(INT1)
             EINT;                                       // 开全局中断

             // GPIO29配置为输入引脚通用I/O口,接按键TZ1,TZ2
                EALLOW;
                GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 0;         // 选择为通用I/O口
                GpioCtrlRegs.GPADIR.bit.GPIO29 = 0;          // 方向定义为输入
                GpioCtrlRegs.GPAPUD.bit.GPIO29=0;
                GpioCtrlRegs.GPAQSEL2.bit.GPIO29 = 0;        // 外部中断1(XINT1)与系统时钟SYSCLKOUT同步
                GpioCtrlRegs.GPACTRL.bit.QUALPRD0 = 0x80;   // 每个采样窗口的周期
                EDIS;


        // 通过GPIO外部中断选择寄存器,选择GPIO12为外部中断1,选择GPIO13为外部中断2
           EALLOW;
           GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 0x1D;   // XINT1是GPIO29
           EDIS;


           // 配置外部中断1和2的中断控制寄存器
              XIntruptRegs.XINT1CR.bit.POLARITY = 0;      // 下降沿触发中断

           // 使能外部中断1和外部中断2
              XIntruptRegs.XINT1CR.bit.ENABLE = 1;        // 使能XINT1



          decetion=1;
          LED=0x00;//全亮
          delay_loop();
          int num=0;//这里不能是无符号的整形  因为 num 可能等于  -1


	//TFTLCD实验
#if	(TFTLCD_TEST == 1)
	ILI9325_Init();			//TFT初始化
	//显示字符
	LCD_PutString(37, 20,Str1,  BLUE,WHITE);//题目
	LCD_PutString(37, 45,class, WHITE,RED);//班级
	LCD_PutString(37, 70,Name,  WHITE,RED);//姓名
	LCD_PutString(37, 95,student_ID, RED,WHITE);//学号
	LCD_PutString(37, 120,Str3, WHITE,RED);//流水灯
	LCD_PutString(37, 145,Str2, WHITE,RED);//蜂鸣器
	LCD_PutString(37, 170,Str4, WHITE,RED);//小灯

#endif


	while(1)
	{
	    //按键中断
	               if(decetion%2==0)
	               {
	                   LED=LedCode[num];
	                   delay_loop();
	                   num++;
	                   if(num>7)
	                   {
	                       num=0;
	                   }
	                   kkk1=0;//正向
	               }
	               if(decetion%2==1)
	               {
	                     LED=LedCode[num];
	                     delay_loop();
	                     num--;
	                     if(num<0)
	                     {
	                         num=7;
	                     }
	                     kkk1=1;//反向
	               }
	               //按键k1---k4
	               //按键 谁为 0  谁就启动了!
	               delay_loop_1();//这里加一个延时是为了保证 key   按键按下去的时候能够识别的到
	               if(KeyValue==0x0e)//1110  e
	               {
	                   GpioDataRegs.GPASET.bit.GPIO6=1;//设置GPIO6输出高电平  //关闭LED灯
	                   GpioDataRegs.GPASET.bit.GPIO7=1;//设置GPIO7输出高电平
	                   kkk2=0;//关闭

	               }
	               delay_loop_1();//这里加一个延时是为了保证 key   按键按下去的时候能够识别的到
	               if(KeyValue==0x0d) //1101  13->d
	               {
	                   GpioDataRegs.GPACLEAR.bit.GPIO6 = 1; //设置GPIO输出为低电平  //打开led 灯
	                   GpioDataRegs.GPACLEAR.bit.GPIO7 = 1; //设置GPIO输出为低电平
	                   kkk2=1;//打开

	               }
	               delay_loop_1();//这里加一个延时是为了保证 key   按键按下去的时候能够识别的到
	               if(KeyValue==0x0b)//1011  11->b
	               {
	                   GpioDataRegs.GPBSET.bit.GPIO60=1;//设置GPIO60输出高电平  高电平响
	                   kkk3=1;//响

	               }
	               delay_loop_1();//这里加一个延时是为了保证 key   按键按下去的时候能够识别的到
	               if(KeyValue==0x07)//0111  7
	               {
	                   GpioDataRegs.GPBCLEAR.bit.GPIO60 = 1; //设置GPIO60输出为低电平    蜂鸣器不响
	                   kkk3=0;//关闭
	               }
	               kongzhi_1();
	               kongzhi_2();
	               kongzhi_3();
	}
}




void  kongzhi_1()//控制 流水灯 的TFT 显示状态
{
    if(kkk1==0) //正向
    {
        LCD_PutString(160, 120,Str5, WHITE,RED);//流水灯
    }
    else//方向
    {
        LCD_PutString(160, 120,Str6, WHITE,RED);//流水灯
    }
}
void kongzhi_2()//控制 LED 灯的亮灭的显示状态
{
    if(kkk2==0)//不亮
    {
        LCD_PutString(160, 170,Str8, WHITE,RED);//小灯 关闭
    }
    else//亮
    {
        LCD_PutString(160, 170,Str7, WHITE,RED);//小灯 开启
    }

}
void kongzhi_3()//控制  蜂鸣器 的 的状态
{
    if(kkk3==0)//不响
    {
        LCD_PutString(160, 145,Str8, WHITE,RED);//蜂鸣器关闭
    }
    else//响
    {
        LCD_PutString(160, 145,Str7, WHITE,RED);//蜂鸣器开启
    }
}

//步骤7.在这里插入中断服务子程序,如果需要使用中断服务子程序,必须在步骤5中重新定义中断
//向量表中对应地地址
interrupt void xint1_isr(void)
{
    Uint32 i;
    for(i=0;i<1000000;i++);    //键盘消抖动
    while(keyon1==0);
    decetion++;
    // 应答寄存器的位1清0,以响应同组内其他中断;
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}


void delay_loop_2()
{
    Uint32      i;
    Uint32      j;

    for(i=0;i<40;i++)
    {
        for (j = 0; j < 100000; j++);
    }

}

void Gpio_select(void)
{


    EALLOW;
    GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 00;      // GPIO6为GPIO功能
    GpioCtrlRegs.GPADIR.bit.GPIO6 = 1;      // GPIO6为输出功能

    GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 00;      // GPIO7为GPIO功能
    GpioCtrlRegs.GPADIR.bit.GPIO7 = 1;      // GPIO7为输出功能

    GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 00;      // GPIO60为GPIO功能   //BEEP
    GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;      // GPIO60为输出功能

    EDIS;

}

void delay_loop_1()//超短时间的延时
{
        Uint32      i;
        Uint32      j;

        for(i=0;i<20;i++)
        {
            for (j = 0; j < 10000; j++);
        }
}




  • 0
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值