花样流水灯系统设计百度ID:飞小天骄第一部分:绪论由于采用CCS5.5版本导入工程后编译存在很多错误(包括路径修改、软件安装缺少驱动等问题),捣鼓了半天也搞不好,于是果断放弃CCS5.5,安装CCS8.0集成开发环境,以正确快速进行实验。如图为CCS8.0界面,左边的工程分别为查询方式与中断方式在建立一个工程前,首先,从CCS8.0中的ResourceExplorer找到F28335例程。将其导入到CCS8.0里面,然后修改里面的MAIN函数。如图可以看出,工程名为“Example_2833xGpioToggle”的主函数包含在C文件“example_LEDKey”中。添加自己的源程序代码,即可编译成功。第二部分:正文一、系统设计方案设计目的花样流水灯输入键盘输出流水灯输入控制延时速度控制,流水模式输出模式速度*3,模式*4二、详细说明流水灯模式:顺序流水(编号1),倒序流水(编号2),由中到两端流水(编号3),由两端到中流水(编号4)。规定默认状态1,状态改变顺序0-1-2-3-0。流水灯延时:低速(编号a),中速(编号b),高速(编号c)。规定默认a,状态改变顺序a-b-c-a。按键SW1控制流水灯模式,按键SW4控制流水灯延时。每按下一次键,对应模式(延时)会逐次发生相应变化。三、详细设计1、硬件设计2、软件设计I、查询方式主函数:主循环:开始结束初始化(时钟、GPIO配置、关中断、关看门狗、GPIO数据初始化、模式初始化)主循环开始模式1模式2模式3模式4模式1:GPIO60-61-64-65-66-67-68模式2:GPIO68-67-66-65-64-61-60模式3:GPIO65-66/64-67/61-68/60模式4:GPIO68/60-67/61-66/64-65键扫描:采用线键盘(采用矩阵扫描的意义不大)SW1-SW2-SW3控制流水灯模式,SW4-SW5-SW6控制流水灯速度。四、源代码:(注:函数DELAY_US()为F28335官方库函数,表示延时**微秒)A、宏定义、全局变量及子函数声明/****************端口宏定义*****************/#defineS1GpioDataRegs.GPADAT.bit.GPIO12//按键SW1-SW3定义模式控制输入口,此处不采用矩阵键盘,采用线键盘。#defineS2GpioDataRegs.GPADAT.bit.GPIO13//按键SW4-SW6定义延时速度输入口,此处不采用矩阵键盘,采用线键盘/****************常量宏定义*****************//***************全局变量定义****************/Uint32model;//流水灯模式控制位返回模式*开始返回延时控制开始GPIO单口控制延时控制子函数高速键扫描7组中速低速Uint32delay_model;//流水灯延时模式控制位/****************函数声明*******************/voidGpio_select(void);//GPIO端口配置子程序voiddelay_loop(void);//延时模式选择子函数voidScan_Key(void);//键扫描voidModel_S1(void);//模式1子函数voidModel_S2(void);//模式2子函数voidModel_S3(void);//模式3子函数voidModel_S4(void);//模式4子函数B、主函数初始化//步骤1.初始化系统控制://设置PLL,WatchDog,使能外设时钟//下面这个函数可以从DSP2833x_SysCtrl.c文件中找到..InitSysCtrl();//步骤2.初始化通用输入输出多路复用器GPIO://这个函数在DSP2833x_Gpio.c源文件中被定义了//这个函数使GPIO控制类寄存器初始化到默认状态//InitGpio();//本例不用此子函数//本例使用下面的GPIO配置Gpio_select();//步骤3.清除所有中断初始化中断向量表://禁止CPU全局中断DINT;//初始化PIE控制寄存器到他们的默认状态.//这个默认状态就是禁止PIE中断及清除所有PIE中断标志//这个函数放在DSP2833x_PieCtrl.c源文件里InitPieCtrl();//禁止CPU中断和清除所有CPU中断标志IER=0x0000;IFR=0x0000;//初始化PIE中断向量表,并使其指向中断服务子程序(ISR)//这些中断服务子程序被放在了DSP280x_DefaultIsr.c源文件中//这个函数放在了DSP2833x_PieVect.c源文件里面.InitPieVectTable();C、GPIO配置voidGpio_select(void){EALLOW;GpioCtrlRegs.GPAMUX1.all=0x00000000;//AllGPIOGpioCtrlRegs.GPAMUX2.all=0x00000000;//AllGPIOGpioCtrlRegs.GPBMUX1.all=0x00000000;//AllGPIOGpioCtrlRegs.GPBMUX2.all=0x00000000;//AllGPIOGpioCtrlRegs.GPCMUX1.all=0x00000000;//AllGPIOGpioCtrlRegs.GPCMUX2.all=0x00000000;//AllGPIOGpioCtrlRegs.GPADIR.all=0x00000000;//AllinputsGpioCtrlRegs.GPBDIR.all=0xFFFFFFFF;//Alloutputs,gpio50GpioCtrlRegs.GPCDIR.all=0xFFFFFFFF;//AlloutputsEDIS;}D、GPIO数据初始化GpioDataRegs.GPBDAT.all=0x30000000;//GPIO60,61输出1GpioDataRegs.GPCDAT.all=0x0000001f;//GPIO64,65,66,67,68输出1model=1;//默认流水灯模式1delay_model=1;//默认延时模式1(高速)E、主循环for(;;){switch(model){case1://模式控制位为1,选择模式一,顺时针流转Model_S1();break;case2://模式控制位为2,选择模式二,逆时针流转Model_S2();break;case3://模式控制位为3,选择模式三,中间-两端Model_S3();break;case4://模式控制位为4,选择模式四,两端-中间Model_S4();default:break;}}F、模式1到模式4子函数/*模式1:GPIO60-61-64-65-66-67-68模式2:GPIO68-67-66-65-64-61-60模式3:GPIO65-66/64-67/61-68/60模式4:GPIO68/60-67/61-66/64-65采用诸位控制*/voidModel_S1(void){unsignedinti,model_1=0x00000001;GpioDataRegs.GPBCLEAR.all|=0x10000000;delay_loop();GpioDataRegs.GPBSET.all|=0x10000000;GpioDataRegs.GPBCLEAR.all|=0x20000000;delay_loop();GpioDataRegs.GPBSET.all|=0x20000000;for(i=1;i=5;i++){GpioDataRegs.GPCCLEAR.all|=model_1;delay_loop();GpioDataRegs.GPCSET.all|=model_1;model_1=model_11;}}voidModel_S2(void){unsignedinti,model_2=0x00000010;for(i=1;i=5;i++){GpioDataRegs.GPCCLEAR.all|=model_2;delay_loop();GpioDataRegs.GPCSET.all|=model_2;model_2=model_21;}GpioDataRegs.GPBCLEAR.all|=0x20000000;delay_loop();GpioDataRegs.GPBSET.all|=0x20000000;GpioDataRegs.GPBCLEAR.all|=0x10000000;delay_loop();GpioDataRegs.GPBSET.all|=0x10000000;}voidModel_S3(void){unsignedintmodel_3=0x00000002;GpioDataRegs.GPCCLEAR.all|=model_3;delay_loop();GpioDataRegs.GPCSET.all|=model_3;GpioDataRegs.GPCCLEAR.all|=0x5;delay_loop();GpioDataRegs.GPCSET.all|=0x5;GpioDataRegs.GPCCLEAR.all|=0x8;GpioDataRegs.GPBCLEAR.all|=0x20000000;delay_loop();GpioDataRegs.GPCSET.all|=0x8;GpioDataRegs.GPBSET.all|=0x20000000;GpioDataRegs.GPCCLEAR.all|=0x10;GpioDataRegs.GPBCLEAR.all|=0x10000000;delay_loop();GpioDataRegs.GPCSET.all|=0x10;GpioDataRegs.GPBSET.all|=0x10000000;}voidModel_S4(void){GpioDataRegs.GPCCLEAR.all|=0x10;GpioDataRegs.GPBCLEAR.all|=0x10000000;delay_loop();GpioDataRegs.GPCSET.all|=0x10;GpioDataRegs.GPBSET.all|=0x10000000;GpioDataRegs.GPCCLEAR.all|=0x8;GpioDataRegs.GPBCLEAR.all|=0x20000000;delay_loop();GpioDataRegs.GPCSET.all|=0x8;GpioDataRegs.GPBSET.all|=0x20000000;GpioDataRegs.GPCCLEAR.all|=0x5;delay_loop();GpioDataRegs.GPCSET.all|=0x5;GpioDataRegs.GPCCLEAR.all|=0x2;delay_loop();GpioDataRegs.GPCSET.all|=0x2;}G、流水灯速度选择控制子函数voiddelay_loop(){switch(delay_model){case1:DELAY_US(100000);//延时200ms(高速)break;case2:DELAY_US(300000);//延时300ms(中速)break;case3:DELAY_US(500000);//延时500ms(低速)break;}Scan_Key();}G、键盘扫描子函数voidScan_Key(void){Uint32i,j;if(S1==0)//扫描模式控制键是否按下{DELAY_US(10000);//10ms按键消抖if(S1==0)//模式控制键按下{model+=1;//模式控制位加1if(model=5)//判断模式控