首页 新闻资讯 技术资料 论坛 网站地图
汽车电子 接口电路 开发工具 SOPC 传感控制 AD/DA IC设计
电子元器件搜索:
IC库存(8958万) PDF资料(329万) IC价格 IC求购 资讯 技术资料
维库电子市场网是知名的电子元器件交易网站, 为电子生产企业提供IC库存和技术资料查询服务。
位置: 首页 > 详细信息
  [转帖]C语言嵌入式系统编程屏幕操作(下)
出处:嵌入式技术网 时间: 2007-09-19
embedu 发布于 2007-9-15 10:27:24
当我定义菜单时,只需要这样:
static SysMenu menu[MENU_NUM] =
{
  {
    "menu1", 0, 48, menu1OnOk, menu1OnCancel
  }
  ,
  {
    " menu2", 7, 48, menu2OnOk, menu2OnCancel
  }
  ,
  {
    " menu3", 7, 48, menu3OnOk, menu3OnCancel
  }
  ,
  {
    " menu4", 7, 48, menu4OnOk, menu4OnCancel
  }
  …
};
OK键和CANCEL键的处理变成:
/* 按下OK */
void onOkKey()
{
menu[currentFocusMenu].onOkFun();  
}
/* 按下Cancel */
void onCancelKey()
{
menu[currentFocusMenu].onCancelFun();  
}
程序被大大简化了,也开始具有很好的可扩展性!我们仅仅利用了面向对象中的封装思想,就让程序结构清晰,其结果是几乎可以在无需修改程序的情况下在系统中添加更多的菜单,而系统的按键处理函数保持不变。
面向对象,真神了!
5.模拟MessageBox函数
MessageBox函数,这个Windows编程中的超级猛料,不知道是多少入门者第一次用到的函数。还记得我们第一次在Windows中利用MessageBox输出Hello,World!”对话框时新奇的感觉吗?无法统计,这个世界上究竟有多少程序员学习Windows编程是从MessageBox(“Hello,World!”,…)开始的。在我本科的学校,广泛流传着一个词汇,叫做“‘Hello,World’级程序员”,意指入门级程序员,但似乎“‘Hello,World’级”这个说法更搞笑而形象。

            

  

2 经典的Hello,World!

2给出了两种永恒经典的Hello,World对话框,一种只具有“确定”,一种则包含“确定”、“取消”。是的,MessageBox的确有,而且也应该有两类!这完全是由特定的应用需求决定的。
嵌入式系统中没有给我们提供MessageBox,但是鉴于其功能强大,我们需要模拟之,一个模拟的MessageBox函数为:
/******************************************
/*   函数名称:    MessageBox
/*   功能说明:    弹出式对话框,显示提醒用户的信息
/*   参数说明:    lpStr --- 提醒用户的字符串输出信息
/*                        TYPE  --- 输出格式(ID_OK = 0, ID_OKCANCEL = 1)
/*   返回值:        返回对话框接收的键值,只有两种 KEY_OK, KEY_CANCEL
/******************************************
typedef  enum TYPE   { ID_OK,ID_OKCANCEL      }MSG_TYPE;
extern    BYTE MessageBox(LPBYTE lpStr, BYTE TYPE)
{
      BYTE keyValue = -1;


ClearScreen();     /* 清除屏幕 */
      DisplayString(xPos,yPos,lpStr,TRUE); /* 显示字符串 */
   /* 根据对话框类型决定是否显示确定、取消 */
      switch (TYPE)
      {
      case       ID_OK:
             DisplayString(13,yPos+High+1, " 确定 ", 0);
             break;
      case       ID_OKCANCEL:
             DisplayString(8, yPos+High+1, " 确定 ", 0);
             DisplayString(17,yPos+High+1, " 取消 ", 0);
             break;
      default:
             break;
      }
      DrawRect(0, 0, 239, yPos+High+16+4);  /* 绘制外框 */
   /*  MessageBox是模式对话框,阻塞运行,等待按键 */
   while( (keyValue != KEY_OK) || (keyValue != KEY_CANCEL) )
   {
keyValue = getSysKey();
}
/* 返回按键类型 */
if(keyValue== KEY_OK)
{
return ID_OK;
}
else
{
return ID_CANCEL;
}
}
上述函数与我们平素在VC++等中使用的MessageBox是何等的神似啊?实现这个函数,你会看到它在嵌入式系统中的妙用是无穷的。
总结
本篇是本系列文章中技巧性最深的一篇,它提供了嵌入式系统屏幕显示方面一些很巧妙的处理方法,灵活使用它们,我们将不再被LCD上凌乱不堪的显示内容所困扰。

超值提供ARM开发板、开发套件!
可全国邮购,快递免费送货上门,可提供发票,价格优惠!
送FTP资料下载,还有QQ群、MSN群在线交流。
联系人:赵剑勇
手机:13581501210
QQ: 313638714 
MSN: jin--yong@hotmail.com
淘宝:http://shop34302523.taobao.com
xinshou 发布于 2007-9-19 9:07:35
p4p
关闭】 【打印
相关专题  
电源系列
医疗电子
嵌入式硬件
SOPC
工业控制
传感控制
AD/DA
消费电子
安防产品
综合电子技术
嵌入式软件
IC设计
测试测量
通信产品
开发工具
汽车电子
软件开发
存储器
CPLD/FPGA
接口电路
计算机外设
数控系统
应用产品
嵌入式开发新闻
嵌入式系统

© 2007 百斯嵌入式开发网 网站地图