DIY一个简易工控板/学习板?

[复制链接]
16130|62
 楼主| 农民讲习所 发表于 2008-10-25 10:52 | 显示全部楼层

可以做个图形控制器

320X240TFT得用个带控制器的ARM7。
tage 发表于 2008-10-27 08:45 | 显示全部楼层

2层板就够了,

为什么要四层。
发表于 2008-10-27 11:54 | 显示全部楼层

所长还是做GUI吧,这个成本低,甚至不要硬件都可以.

&nbsp;古道热肠&nbsp;发表于&nbsp;2008-10-25&nbsp;10:05&nbsp;DIY小组讨论区&nbsp;←返回版面&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />18楼:&nbsp;建议所长最好搞320X240TFT屏的GUI应用&nbsp;<br /><br />现在的320X240TFT屏价格在80元以下,硬件已相当便宜,关键是软件驱动和界面比较难整,搞这个既好玩,又实用,而GUI软件貌似所长已玩得自由自在了.<br />&nbsp;<br />&nbsp;<br />
腾腾 发表于 2008-10-27 23:52 | 显示全部楼层

至少128细分的话,可以用个8位的DAC

还有余地,哈哈
腾腾 发表于 2008-10-28 00:01 | 显示全部楼层

关于数码管驱动

用74HC595、MAX7219还是别的?<br />MAX7219贵点,一片能驱动8个数码管。
发表于 2008-10-28 11:21 | 显示全部楼层

MAX7219贵点,一片能驱动8个数码管

可以用ZLG7289,ZLG7290,HD7289等替代.15元左右.
chunyang 发表于 2008-10-28 12:27 | 显示全部楼层

支持做成GUI

既然讲实用,还是一步到位好。
电子尘埃 发表于 2008-10-28 17:01 | 显示全部楼层

好,开始弄呀.具体怎么弄.

  
电子尘埃 发表于 2008-10-28 17:07 | 显示全部楼层

所长,什么时候开始弄呀?

  
古道热肠 发表于 2008-10-28 17:31 | 显示全部楼层

哈哈,如果是整GUI模块,其实所长可以在PC机上做

PC机上调试和跟踪都很方便,效率高.
发表于 2008-10-29 17:28 | 显示全部楼层

所长的菜单程序..部分啊....

<br />/*******************************************************************************<br />*<br />菜单控制<br />模块退出时必须向菜单管理发出菜单关闭消息<br />********************************************************************************/<br /><br />#include&nbsp;&ltiom128v.h&gt<br />#include&nbsp;&ltmacros.h&gt<br />#include&nbsp;&ltEeprom.h&gt<br /><br />#include&nbsp;&quot;Const.h&quot;<br />#include&nbsp;&quot;EepromEnum.h&quot;<br />#include&nbsp;&quot;News.h&quot;<br />#include&nbsp;&quot;NewsEnum.h&quot;<br />#include&nbsp;&quot;Window.h&quot;<br />#include&nbsp;&quot;Source.h&quot;<br /><br />#include&nbsp;&quot;LcdDrive.h&quot;<br />#include&nbsp;&quot;Timer.h&quot;<br />#include&nbsp;&quot;CpuEeprom.h&quot;<br />#include&nbsp;&quot;Serial.h&quot;<br />#include&nbsp;&quot;Math.h&quot;<br />#include&nbsp;&quot;Sound.h&quot;<br /><br />enum{<br />&nbsp;&nbsp;&nbsp;&nbsp;eLEFT,<br />&nbsp;&nbsp;&nbsp;&nbsp;eRIGHT<br />};<br /><br />#define&nbsp;TIME_MENULIMIT&nbsp;&nbsp;40&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//菜单显示时间<br /><br />static&nbsp;unsigned&nbsp;char&nbsp;mMenu_TimeLimit;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//控制菜单显示时间,以秒为单位<br /><br />static&nbsp;unsigned&nbsp;char&nbsp;mMenu_Id;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//在使用的菜单的层里面的索引<br />static&nbsp;unsigned&nbsp;char&nbsp;mMenu_ItemId;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//菜单层的项索引<br />static&nbsp;unsigned&nbsp;char&nbsp;fMenu_Select;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*=1菜单选中了,已经离开菜<br />单,执行功能去了,执行完返回控制给菜单,会清0*/<br /><br />static&nbsp;unsigned&nbsp;char&nbsp;fMenu_RequStore;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*菜单选择有效请求,模块响应<br />后,退出时发nMenu_ReturnControl,控制权交回菜单*/<br /><br />/******************************************************************<br />菜单结构定义<br />******************************************************************/<br />struct&nbsp;MenuUnit{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//菜单单元结构<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;mX;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;mY;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;Str[6];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示的字符串<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;mSubId;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*选中后执行的子菜单一层的ID,==0无,和mNewsId关联*/<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;mNewsId;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*选中后执行的消息ID,==0无,和mSubId关联*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;mReturnId;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*退出后执行的菜单层的ID号,==0相当关闭,由本身*/<br />};<br /><br />static&nbsp;const&nbsp;struct&nbsp;MenuUnit&nbsp;&nbsp;&nbsp;&nbsp;*psMenuCurrentUnit;<br /><br />/******************************************************************<br />菜单构造<br />&nbsp;&nbsp;&nbsp;&nbsp;x,y,&nbsp;&nbsp;&nbsp;&nbsp;字符串&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;要执行的ID,要执行的消息&nbsp;返回执行的ID<br />******************************************************************/<br />const&nbsp;struct&nbsp;MenuUnit&nbsp;sMenuUnit_Close[]={&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//每行是个SubId.关闭菜单,ID=0<br />&nbsp;&nbsp;&nbsp;&nbsp;0,9,&nbsp;&nbsp;&nbsp;&nbsp;&quot;x097&quot;,&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;nXxx0_On,&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//关闭菜单<br />};<br /><br />const&nbsp;struct&nbsp;MenuUnit&nbsp;sMenuUnit_Main[]={&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//每行是个SubId.主菜单,ID=1<br />&nbsp;&nbsp;&nbsp;&nbsp;0,9,&nbsp;&nbsp;&nbsp;&nbsp;&quot;x090&quot;,&nbsp;&nbsp;&nbsp;&nbsp;2,&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br />&nbsp;&nbsp;&nbsp;&nbsp;20,9,&nbsp;&nbsp;&nbsp;&quot;x091&quot;,&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;nXxx1_On,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br />&nbsp;&nbsp;&nbsp;&nbsp;40,9,&nbsp;&nbsp;&nbsp;&quot;x092&quot;,&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;nXxx2_SetupOn,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置<br />&nbsp;&nbsp;&nbsp;&nbsp;60,9,&nbsp;&nbsp;&nbsp;&quot;x098&quot;,&nbsp;&nbsp;&nbsp;&nbsp;3,&nbsp;&nbsp;nSetVolume_On,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//参数调节,执行ID=3的菜单<br />&nbsp;&nbsp;&nbsp;&nbsp;80,9,&nbsp;&nbsp;&nbsp;&quot;x099&quot;,&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;nPrinter_SetupOn,&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//打印设置<br />&nbsp;&nbsp;&nbsp;&nbsp;100,9,&nbsp;&nbsp;&quot;x096&quot;,&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//BACK,向上回去<br />};<br /><br />const&nbsp;struct&nbsp;MenuUnit&nbsp;sMenuUnit_Moudel[]={&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//每行是个SubId.模块菜单,ID=2<br />&nbsp;&nbsp;&nbsp;&nbsp;0,4,&nbsp;&nbsp;&nbsp;&nbsp;&quot;Xxx31&quot;,&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;nXxx30_SetupOn,&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Xxx30<br />&nbsp;&nbsp;&nbsp;&nbsp;36,4,&nbsp;&nbsp;&nbsp;&quot;Xxx32&quot;,&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;nXxx31_SetupOn,&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Xxx31<br />&nbsp;&nbsp;&nbsp;&nbsp;72,4,&nbsp;&nbsp;&nbsp;&quot;Xxx4&quot;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;nXxx4_SetupOn,&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Xxx4<br />&nbsp;&nbsp;&nbsp;&nbsp;0,14,&nbsp;&nbsp;&nbsp;&quot;Xxx5&quot;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;nXxx5_SetupOn,&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Xxx5<br />&nbsp;&nbsp;&nbsp;&nbsp;36,14,&nbsp;&nbsp;&quot;Xxx5&quot;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;nXxx5_SetupOn,&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Xxx5<br />&nbsp;&nbsp;&nbsp;&nbsp;72,14,&nbsp;&nbsp;&quot;Xxx5&quot;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;nXxx5_SetupOn,&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Xxx5<br />&nbsp;&nbsp;&nbsp;&nbsp;108,9,&nbsp;&nbsp;&quot;x096&quot;,&nbsp;&nbsp;&nbsp;&nbsp;1,&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//BACK,向上回去<br />};<br /><br />const&nbsp;struct&nbsp;MenuUnit&nbsp;sMenuUnit_AdjVolume[]={&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//每行是个SubId.参数调节菜单,ID=3<br />&nbsp;&nbsp;&nbsp;&nbsp;0,9,&nbsp;&nbsp;&nbsp;&nbsp;&quot;x094&quot;,&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;nSetAlarmVolume_On,&nbsp;4,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//声音,返回执行ID=4,继续报警音量调节<br />};<br /><br />const&nbsp;struct&nbsp;MenuUnit&nbsp;sMenuUnit_AdjAlarm[]={&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//每行是个SubId.参数调节菜单,ID=4<br />&nbsp;&nbsp;&nbsp;&nbsp;0,9,&nbsp;&nbsp;&nbsp;&nbsp;&quot;x094&quot;,&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;nSetLight_On,&nbsp;&nbsp;&nbsp;5,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//声音,返回执行ID=5,继续亮度<br />};<br /><br />const&nbsp;struct&nbsp;MenuUnit&nbsp;sMenuUnit_AdjLight[]={&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//每行是个SubId.参数调节菜单,ID=5<br />&nbsp;&nbsp;&nbsp;&nbsp;0,9,&nbsp;&nbsp;&nbsp;&nbsp;&quot;x094&quot;,&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//亮度,返回执行ID=0.<br />};<br /><br />//一层菜单,有很多菜单单元组成<br />const&nbsp;struct&nbsp;MenuUnit&nbsp;*&nbsp;const&nbsp;psMenuLayer[]={<br />&nbsp;&nbsp;&nbsp;&nbsp;sMenuUnit_Close,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ID=0,关闭菜单<br />&nbsp;&nbsp;&nbsp;&nbsp;sMenuUnit_Main,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ID=1,主菜单<br />&nbsp;&nbsp;&nbsp;&nbsp;sMenuUnit_Moudel,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ID=2,模块选择<br />&nbsp;&nbsp;&nbsp;&nbsp;sMenuUnit_AdjVolume,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ID=3,设置音量<br />&nbsp;&nbsp;&nbsp;&nbsp;sMenuUnit_AdjAlarm,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ID=4,设置报警音量<br />&nbsp;&nbsp;&nbsp;&nbsp;sMenuUnit_AdjLight,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ID=5,亮度调节<br />};<br /><br />const&nbsp;unsigned&nbsp;char&nbsp;mMenuLayerMax[]={<br />&nbsp;&nbsp;&nbsp;&nbsp;sizeof(sMenuUnit_Close)/sizeof(struct&nbsp;MenuUnit),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ID=0,关闭菜单<br />&nbsp;&nbsp;&nbsp;&nbsp;sizeof(sMenuUnit_Main)/sizeof(struct&nbsp;MenuUnit),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ID=1,主菜单<br />&nbsp;&nbsp;&nbsp;&nbsp;sizeof(sMenuUnit_Moudel)/sizeof(struct&nbsp;MenuUnit),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ID=2,模块选择<br />&nbsp;&nbsp;&nbsp;&nbsp;sizeof(sMenuUnit_AdjVolume)/sizeof(struct&nbsp;MenuUnit),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ID=3,设置音量<br />&nbsp;&nbsp;&nbsp;&nbsp;sizeof(sMenuUnit_AdjAlarm)/sizeof(struct&nbsp;MenuUnit),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ID=4,设置报警音量<br />&nbsp;&nbsp;&nbsp;&nbsp;sizeof(sMenuUnit_AdjLight)/sizeof(struct&nbsp;MenuUnit),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ID=5,亮度调节<br />};<br /><br />#define&nbsp;dSPEEDKEY_MenuId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//快捷键对应功能的菜单项<br />#define&nbsp;dSPEEDKEY_MenuItemId&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//快捷键对应功能的菜单项中的选项<br /><br />/******************************************************************<br />清除菜单区域<br />******************************************************************/<br />void&nbsp;InMenuWindowCls(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;Lcd_SetupId(Eeprom_Read(eP_DW_Menu));<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdData_ClrScreen(&nbsp;(em_BLACK&lt&lt4)+em_BLACK&nbsp;);<br />}<br /><br />/******************************************************************<br />显示当前菜单<br />必须窗口有效<br />只有一项时不反白显示.这样关闭菜单或单参数菜单不反白。<br />已经设置好全局的菜单指针<br />******************************************************************/<br />void&nbsp;InMeun_DispItem(unsigned&nbsp;char&nbsp;mId)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;Lcd_SetupId(Eeprom_Read(eP_DW_Menu));<br />&nbsp;&nbsp;&nbsp;&nbsp;if(LcdData_WindowVisible()==False)return;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;psMenuCurrentUnit=&(psMenuLayer[mMenu_Id])[mId];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//得到当前菜单项的结构指针<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LcdData_MoveTo(&nbsp;(*psMenuCurrentUnit).mX,(*psMenuCurrentUnit).mY&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;if((mId==mMenu_ItemId)&&(mMenuLayerMax[mMenu_Id]&gt1)){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//反白显示<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdData_SwapColor();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdData_CodeStrings(&nbsp;(*psMenuCurrentUnit).Str,em_CharOverlay&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;psMenuCurrentUnit=&(psMenuLayer[mMenu_Id])[mMenu_ItemId];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//得到当前菜单项的结构指针<br />}<br /><br />/******************************************************************<br />移动<br />mXxx1=eLEFT,左,否则右<br />******************************************************************/<br />void&nbsp;InMeun_MoveItem(unsigned&nbsp;char&nbsp;mXxx1)<br />{<br />unsigned&nbsp;char&nbsp;i;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if(mMenu_Id==0){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//展开<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mMenu_Id=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mMenu_ItemId=0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&ltmMenuLayerMax[1];i++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InMeun_DispItem(i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(mXxx1==eLEFT){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i=mMenu_ItemId;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(mMenu_ItemId==0){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mMenu_ItemId=mMenuLayerMax[mMenu_Id]-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;mMenu_ItemId--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i=mMenu_ItemId++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(mMenu_ItemId==mMenuLayerMax[mMenu_Id]){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mMenu_ItemId=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InMeun_DispItem(i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InMeun_DispItem(mMenu_ItemId);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />/******************************************************************<br />显示全部菜单项,并设置相应参数<br />******************************************************************/<br />void&nbsp;InMenu_DispNewMenuItem(unsigned&nbsp;char&nbsp;mItem)<br />{<br />unsigned&nbsp;char&nbsp;i,j;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;InMenuWindowCls();<br />&nbsp;&nbsp;&nbsp;&nbsp;mMenu_ItemId=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;mMenu_Id=mItem;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;j=mMenuLayerMax[mMenu_Id];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&ltj;i++)InMeun_DispItem(i);<br />}<br /><br /><br />/******************************************************************<br />菜单确认时执行动作<br />******************************************************************/<br />void&nbsp;InMenu_Valid(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;if((fMenu_RequStore)||(fMenu_Select))return;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;(*psMenuCurrentUnit).mNewsId&gt0){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//有消息,改变当前消息。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fMenu_RequStore=(*psMenuCurrentUnit).mNewsId;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//有选择,等待模块返回<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fMenu_Select=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//选择有效<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;News_Push(fMenu_RequStore);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((*psMenuCurrentUnit).mSubId&gt0){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//有子菜单命令,执行<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InMenu_DispNewMenuItem((*psMenuCurrentUnit).mSubId);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InMenu_DispNewMenuItem((*psMenuCurrentUnit).mSubId);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />/******************************************************************<br />主菜单选中时,执行的转换或相应处理<br />转发消息<br />******************************************************************/<br />void&nbsp;InMenu_ChangeNews(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;News_Replace((*psMenuCurrentUnit).mNewsId+1+gNews_Word-eNews_KeySpeed);<br />}<br /><br />/******************************************************************<br />菜单中的消息转换的消息处理:eNews_beign<br />******************************************************************/<br />void&nbsp;Menu_NewsPreProcess(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;if(gNews_Word&lteNews_KeySpeed){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(gNews_Word){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;eNews_KeyPush0:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Timer3_Switch();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;eNews_KeyPush1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Xxx5<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;News_Replace(nXxx5_Ctl_Key);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;eNews_KeyPush2:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;News_Replace(nSound_ClockSwitch);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;eNews_KeyPush3:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//保留<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;News_Pop();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;gNews_Word&gteNews_KeyPushReturn&nbsp;)return;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//只对快捷键,左,右,回车控制<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mMenu_TimeLimit=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//清计时器<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if(fMenu_Select==1){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InMenu_ChangeNews();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//已经在有效状态,转换消息<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//在菜单控制下<br />&nbsp;&nbsp;&nbsp;&nbsp;switch(gNews_Word){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;eNews_KeySpeed:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//快捷键<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;News_Pop();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(mMenu_Id){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//菜单已经展开,关闭菜单<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InMenu_DispNewMenuItem(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//直接进入快捷键对应的菜单选项<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mMenu_ItemId=dSPEEDKEY_MenuItemId;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mMenu_Id=dSPEEDKEY_MenuId;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InMenu_Valid();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//菜单有效<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;eNews_KeyPushLeft:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;News_Pop();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InMeun_MoveItem(eLEFT);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;eNews_KeyPushRight:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;News_Pop();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InMeun_MoveItem(eRIGHT);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;eNews_KeyPushReturn:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//对当前选中<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;News_Pop();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InMenu_Valid();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//菜单有效<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />/******************************************************************<br />菜单中的消息滞后处理,处理未被接收和处理的消息。<br />属于菜单发出的模块消息,未被接收,将是菜单退出,并清除该消息<br />******************************************************************/<br />void&nbsp;Menu_NewsLagProcess(void)<br />{<br />unsigned&nbsp;char&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(gNews_Word==fMenu_RequStore){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//向模块发出的消息未被接受,且菜单在Select状态,退出到上层<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fMenu_RequStore=fMenu_Select=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InMenu_DispNewMenuItem((*psMenuCurrentUnit).mReturnId);&nbsp;//返回时显示的菜单项<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;//销毁<br />&nbsp;&nbsp;&nbsp;&nbsp;i=News_Pop();<br />&nbsp;&nbsp;&nbsp;&nbsp;while(i){i--;News_Pop();}<br />}<br /><br />/******************************************************************<br />菜单中的消息处理:<br />模块退出返回的消息<br />执行当前菜单的返回ID<br />******************************************************************/<br />void&nbsp;Menu_NewsProcess(void)<br />{<br />unsigned&nbsp;char&nbsp;i;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;i=gNews_Word;<br />&nbsp;&nbsp;&nbsp;&nbsp;News_Pop();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//接受消息<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;switch(i){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;nMenu_ReturnControl:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fMenu_RequStore=fMenu_Select=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//选择无效状态<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InMenu_DispNewMenuItem((*psMenuCurrentUnit).mReturnId);&nbsp;//返回时显示的菜单项<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;nMenu_OverFlow:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//菜单时间到<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(fMenu_Select){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;News_PreInsert(eNews_KeySpeed);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//快捷<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fMenu_RequStore=fMenu_Select=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InMenu_DispNewMenuItem(0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//菜单回根<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />/******************************************************************<br />菜单循环控制,主要显示延时控制<br />1S进入<br />******************************************************************/<br />void&nbsp;Menu_Loop(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;(fMenu_Select)||(mMenu_Id)&nbsp;){<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(++mMenu_TimeLimit&gt=TIME_MENULIMIT){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//超时,关闭菜单动作<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mMenu_TimeLimit=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;News_Push(nMenu_OverFlow);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//菜单时间到<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />/******************************************************************<br />菜单初始化<br />******************************************************************/<br />void&nbsp;Menu_Init(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;mMenu_TimeLimit=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;fMenu_RequStore=fMenu_Select=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//选择无效状态<br />&nbsp;&nbsp;&nbsp;&nbsp;InMenu_DispNewMenuItem(0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//菜单回根<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//预处理消息注册<br />&nbsp;&nbsp;&nbsp;&nbsp;News_Register(Menu_NewsPreProcess,eNews_beign,eNews_beign);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//滞后处理消息注册<br />&nbsp;&nbsp;&nbsp;&nbsp;News_Register(Menu_NewsLagProcess,eNews_Lag,eNews_Lag);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//本模块使用的消息处理函数<br />&nbsp;&nbsp;&nbsp;&nbsp;News_Register(Menu_NewsProcess,nMenu_ReturnControl,nMenu_OverFlow);<br />}
Victorinox 发表于 2008-10-29 18:41 | 显示全部楼层

咋没见动静

顶起来<br />应该加上高速/捕获输入的?
电子尘埃 发表于 2008-10-30 07:59 | 显示全部楼层
里的所有程序给在下呀?
发表于 2008-10-30 08:44 | 显示全部楼层

34楼的兄弟,我也没有全部的程序.所长自己就贴出来这些啊.

希望所长来讲讲啊...<br />程序不全,理解上有困难...
yzqok 发表于 2008-10-30 11:31 | 显示全部楼层

发个图看一下。。。

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;要赚钱也得先看一下东西。
腾腾 发表于 2008-10-31 11:19 | 显示全部楼层

re:电子尘埃

所长的教材《建立通用MCU程序》找不到了。我为此伤心了好长一段时间。
wacke 发表于 2008-11-1 10:48 | 显示全部楼层

做好了我买一套。

期待快点做好
szsbeed 发表于 2008-11-1 13:26 | 显示全部楼层

re

驱动320x240的屏不用带控制器的芯片.并口就可以了.<br />可以用STM32F103Vx.
zlf667788 发表于 2008-11-1 15:06 | 显示全部楼层

啥时候能出来啊

我也正在规划类似的板,可能跟高手学习一下啊
jerrywzf 发表于 2008-11-1 19:45 | 显示全部楼层

我在精神上支持你!不过我觉得要搞就搞的大点,大成本大制作

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

本版积分规则

快速回复 在线客服 返回列表 返回顶部