[X]关闭

Mis603开发板MB SOC开发教程:第四章 按钮输入实验

文档创建者:Milinker_XU
浏览次数:4239
最后更新:2016-01-12
本帖最后由 Milinker_XU 于 2016-1-12 21:49 编辑

    有了上一章对GPIO的学习,这一章将会更加轻松。本章我们来使用Buttom控制不同的功能,每个按钮作用不一样。
◎在LED工程基础上,添加AXI GPIO。将GPIO命名为Buttom,数据宽度保持和mis603一致,5bit。


◎在Ports中在Buttom的下拉列表中选择GPIO_IO_I为外部输出,GPIO_IO不连接到输出。因为Buttom仅仅是输入。此时在mhs中已经可以看到对应的硬件信息了。
◎在UCF文件中添加Buttom的约束文件。添加完成后,产生网表。


◎同样,在ISE中产生top文件后,进行编译并产生bit文件。
◎从XPS中进入SDK开发环境,确保system.xml有新添加的ip版本号,新建个空的工程。工程命名为Buttom


◎同样新建个源文件,命名为buttom.c文件。



◎现在硬件系统中既有输入IO,又有输出IO,那么就可以使用LED灯和Buttom来互相测试。在buttom.c文件中输入测试代码,代码如下所示。

  
/*
  
*  buttom.c
  
*
  
*   Created on: 2016-1-10
  
*       Author: Milinker XU
  
*/
  
  
  
#include "xparameters.h"
  
#include "xgpio.h"
  
#include "stdio.h"
  
#include "xil_types.h"
  
#include "platform.h"
  
  
void putnum(unsigned int num);
  
void print(char *ptr);
  
  
void delay_ms(u16 tnms)//不精确的延迟
  
{
  
       u16  n1,n2;
  
       for(n1=0;  n1<2500; n1++)
  
              for(n2=0;n2<tnms;n2++);
  
}
  
  
int main()
  
{
  
       u8  btn;
  
       int  i;
  
       u32  led;
  
       led=0xFFFFFFFF;
  
       init_platform();
  
  
       while(1)
  
       {
  
  
                     btn=XGpio_In32(XPAR_BUTTOM_BASEADDR);
  
                     if(btn==15)
  
                     {
  
                            printf("You  enter the left buttom!\n\r");
  
                            led=~0x01;
  
                            XGpio_Out32(XPAR_LED_BASEADDR,led);
  
                     }
  
                     else  if(btn==23)
  
                     {
  
                            printf("You  enter the bottom buttom!\n\r");
  
                            led=~0x02;
  
                            XGpio_Out32(XPAR_LED_BASEADDR,led);
  
                     }
  
                     else  if(btn==27)
  
                     {
  
                            printf("You  enter the center buttom!\n\r");
  
                            led=~0x04;
  
                            XGpio_Out32(XPAR_LED_BASEADDR,led);
  
                     }
  
                     else  if(btn==29)
  
                     {
  
                            printf("You  enter the UP buttom!\n\r");
  
                            led=~0x08;
  
                            XGpio_Out32(XPAR_LED_BASEADDR,led);
  
                     }
  
                     else  if(btn==30)
  
                     {
  
                            printf("You  enter the center right!\n\r");
  
                            printf("Let's  have water light flow!");
  
                            i=0;
  
                            led=0xFE;
  
                            while(i<8)
  
                            {
  
                                   XGpio_Out32(XPAR_LED_BASEADDR,led);
  
                                   led<<=1;
  
                                   i++;
  
                                   delay_ms(100);
  
                            }
  
                     }
  
                     else
  
                            XGpio_Out32(XPAR_LED_BASEADDR,0xFFFFFFFF);
  
       }
  
  
       return  0;
  
}
  
◎编译完成后,下载bit文件,并运行软件。
◎分析上面代码可知:当按下Left按钮时,显示第一个灯亮,按下bottom按钮时,显示第二个灯,按下center按钮时,显示第三个灯,按下up按钮时,显示第四个灯,按下right按钮时,8个led灯依次点亮。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

发表评论已发布 3

shiwuge

发表于 2016-1-11 21:21:44 来自手机 | 显示全部楼层

嗯,写的不错,欢迎多发步新手上路基础教程

uisrc

发表于 2016-1-11 21:35:47 | 显示全部楼层

我很会鼓掌
越努力越幸运!加油!

贾文洋

发表于 2016-1-12 08:53:43 | 显示全部楼层

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则