[Linux项目实践] 物联网单板测试之任务三:OLED菜单控制LED

原创 2012年03月30日 19:05:11

完成单板代码

/*任务3:通过OLED菜单显示选项控制LED*/

步骤:

3.1、分析代码上下文可知,这是一个在OLED显示的菜单中通过LED选项来进行LED灯的控制

3.2、代码不会写,怎么办?参考上下文其他选项的写法,譬如speaker

3.3LED测试函数:void LED_Test(void){}

3.3.1、构造一个子菜单:Menu_TypeDef menu;    

typedef struct

{

  uint16_t max_numb;

  uint16_t numb;

  char  *title;

  char *item[32];

} Menu_TypeDef;

3.3.2、设置子菜单选项的相关属性:

  menu.max_numb = 2;            //the max menu items is 2

  menu.numb = 1;                //the first menu item is 1

  menu.title = "LED Test";          //the menu title

  menu.item[0] = "1.Turn on LED";   //the first menu item

  menu.item[1] = "2.Turn off LED";  //the second menu item

3.3.3、通过OLED显示子菜单的内容:Dis_Menu(menu); 

void Dis_Menu(Menu_TypeDef menu)

{

  uint16_t page, row, i;

  page = (menu.numb-1) / 6;    //each 6 items for a page

  i = (page+1) * 6;                     //the total item can be showed on the OLED

  if(i < menu.max_numb)          

    row = 5;

  else

    row = (menu.max_numb-1) % 6;

  //show the title:LED Test  pg 1, and yellow color

  OLED_ClearScreen();      

  OLED_DisStrLine(0, 0, (uint8_t *)menu.title);  //show the content

  OLED_DisChar(0, 6*17, 0, 'P');

  OLED_DisChar(0, 6*18, 0, 'g');

  OLED_DisChar(0, 6*19, 0, ' ');

  OLED_DisChar(0, 6*20, 0, 0x30+1+page);

  //show the menu items, and blue color

  for(i=0; i<=row; i++)

  {

    if(menu.numb == (page*6 + i + 1))

  OLED_DisStrLine(2+ i, 1, (uint8_t *)menu.item[page*6+i]);

else

  OLED_DisStrLine(2+ i, 0, (uint8_t *)menu.item[page*6+i]);

  }

}

  

3.3.4、操作菜单选项

定义按键的上下操作、选择操作以及ESC的退出操作

  while(menu.numb)

  {

    key = KEY_Read();

    switch(key)

{

  case KEY_UP:             //key up

    if(menu.numb > 1)

  menu.numb --;

else

  menu.numb = menu.max_numb;  //if the menu.numb=1,and you give a key up select, then you will arrive the max_numb

Dis_Menu(menu);

break;

  case KEY_DOWN:     

if(menu.numb < menu.max_numb)

  menu.numb ++;

else

  menu.numb = 1;

Dis_Menu(menu);

break;

  case KEY_SEL:

    switch(menu.numb)

{

  case 1:     

GPIOSetValue(PORT3, 0, 0); // Turn on the LED1,change by terry

GPIOSetValue(PORT3, 1, 0);      // Turn on the LED2

break;

  case 2:

         GPIOSetValue(PORT3, 0, 1); // Turn off the LED1     

GPIOSetValue(PORT3, 1, 1);          // Turn off the LED2

break;

  default:

     break;

}

    break;

  

  case KEY_ESC:          

         menu.numb = 0;

     break;

  default:

  break; 

}

if((key!=KEY_NONE) && (menu.numb!=0))

{

  delay_ms(250);

}

  }

3.4、完整代码如下:经编译烧录,可以实现菜单控制LED功能

void LED_Test(void)

{

  Menu_TypeDef menu;    //set a menu

  uint16_t key;         //init a key

  

  menu.max_numb = 2;        //the max menu items is 2

  menu.numb = 1;                //the first menu item is 1

  menu.title = "LED Test";    //the menu title

  menu.item[0] = "1.Turn on LED";   //the first menu item

  menu.item[1] = "2.Turn off LED";  //the second menu item

  Dis_Menu(menu);       //display the menu content

  delay_ms(250);   //give a delay time

  

  while(menu.numb)

  {

    key = KEY_Read();

    switch(key)

{

  case KEY_UP:             //key up

    if(menu.numb > 1)

  menu.numb --;

else

  menu.numb = menu.max_numb;  //if the menu.numb=1,and you give a key up select, then you will arrive the max_numb

Dis_Menu(menu);

break;

  case KEY_DOWN:     

if(menu.numb < menu.max_numb)

  menu.numb ++;

else

  menu.numb = 1;

Dis_Menu(menu);

break;

  case KEY_SEL:

    switch(menu.numb)

{

  case 1:     

GPIOSetValue(PORT3, 0, 0); // Turn on the LED1,change by terry

GPIOSetValue(PORT3, 1, 0);      // Turn on the LED2

break;

  case 2:

         GPIOSetValue(PORT3, 0, 1); // Turn off the LED1     

GPIOSetValue(PORT3, 1, 1);          // Turn off the LED2

break;

  default:

     break;

}

    break;

  

  case KEY_ESC:          

         menu.numb = 0;

     break;

  default:

     break; 

}

if((key!=KEY_NONE) && (menu.numb!=0))

{

  delay_ms(250);

}

  }

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

[Linux项目实践] 物联网单板测试:OLED Dis_Menu

Dis_Menu(menu);       //display the menu content /*************************************************...

[Linux项目实践] 物联网单板测试之任务六:Accelerometer重力加速计

完成单板代码(部分IIC基代码共用之前博文) /*任务6:Accelerometer重力加速计*/ Axis3_Test(); /******************************...

[Linux项目实践] 物联网单板测试之任务二:操作风扇

完成单板代码 /*任务2:关风扇*/ 步骤: 2.1、查找电路图(FS_11C14 V3.0.pdf)找到风扇接口 由上图可知,控制风扇的开关为:FAN_SW,那么继续查找FAN_SW是连...

[Linux项目实践] 物联网单板测试之任务五:ZigBee Module之Fuction

完成单板代码 /*任务5:ZigBee无线模块应用*/ ZigBee Module传递信息到主机2440: 1、头文件 #include  #include  #include  ...

[Linux项目实践] 物联网单板测试之任务四:光敏电阻

完成单板代码 /*任务4:通过光敏电阻读取光强数值*/ 步骤: 4.1、查找电路图(FS_11C14 V3.0.pdf)找到光敏电阻的接口 4.2、这个IC没有使用过,查找这个光敏电阻...

[Linux项目实践] 物联网单板测试之任务七:RFID之RFID_Test

完成单板代码 /*任务7:RFID应用*/ RFID_Test() /************************************************************...

[Linux项目实践] 物联网单板测试之任务五:ZigBee Module之ZigBee_Test

完成单板代码 /*任务5:ZigBee无线模块应用*/ 分析ZigBee_Test: /*****************************************************...

[Linux项目实践] 物联网单板测试之任务一:实现流水灯

完成单板代码 /*任务1:实现流水灯*/ 步骤: 1.1、找到单板电路图(FS_11C14 V3.0.pdf)上要实现的流水灯的LED灯,即LED1、LED2 1.2、找到LED1、L...

[Linux项目实践] 物联网单板测试之任务五:ZigBee Module之Transfer

完成单板代码 /*任务5:ZigBee无线模块应用*/ ZigBee Module传递信息过程: 1、从节点单板信息结构体: typedef struct {     uint8_t t...

[Linux项目实践] 物联网单板测试:LPC11C14 IIC_Init

I2CInit IIC初始化步骤: 1、复位外设:LPC_SYSCON->PRESETCTRL |= (0x1 2、时钟使能:LPC_SYSCON->SYSAHBCLKCTRL |= (1 3...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)