最新12864LCD菜单程序.docx

上传人:scccc 文档编号:13002387 上传时间:2021-12-10 格式:DOCX 页数:11 大小:21.29KB
返回 下载 相关 举报
最新12864LCD菜单程序.docx_第1页
第1页 / 共11页
最新12864LCD菜单程序.docx_第2页
第2页 / 共11页
最新12864LCD菜单程序.docx_第3页
第3页 / 共11页
最新12864LCD菜单程序.docx_第4页
第4页 / 共11页
最新12864LCD菜单程序.docx_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《最新12864LCD菜单程序.docx》由会员分享,可在线阅读,更多相关《最新12864LCD菜单程序.docx(11页珍藏版)》请在三一文库上搜索。

1、最新12864LCg 4*4键盘人机交互界面源程序0.95版2006-12-18 15:36:00 | By: ZZMHAS 有朋友问我要源程序,这个源程序是我最近修改过的最新版本的12864与4*4键盘的人机交互界面,我只给出关键交互界面菜单的源程序,至于 12864和4*4 键盘的驱动,相信大家都有了。最新版本的使用反白表示选择行,增加了详细的注释。给需要的朋友一个参考 希望朋友们能写出更好的菜单程序。/ 12864M四行多级菜单/ 文件名称 12864menu1 c/作者张子墨/版本0.95/ 最后更新2006/12/16/# i nclude <at89s53.h># i

2、nclude ”12864Driver.c”当前菜单表个数当前选项个数,包括一个特别功能选项菜单选项所届菜单表号选项进入索引号选项退出索引号菜单选项文字描述数组 菜单选项描述文字字节数#define MENULEVEL 7/#define OPTIONMETE 29/菜单结构定义/struct Option(unsigned char KeyLevel; / unsigned char EnterIndex; / unsigned char Cancellndex; / unsigned char KeyWord16; / unsigned char WordMete; / ;/具体菜单选项定

3、义,定义一个结构数组/存储在编码区,节省内存RAM/struct Option code sOptionOPTIONMETE = ( 0,9,0,"文本功能",8,/00,16,1,"时间功能",8,/10,19,2,"温度功能",8,/20,OPTIONMETE-1,3,"系统检测",8, /3 0,OPTIONMETE-1,4,"修改密码",8, /4 0,OPTIONMETE-1,5,"帮助说明",8, /5 0,OPTIONMETE-1,6,"作者介绍&qu

4、ot;,8, /6 0,OPTIONMETE-1,7,"系统版本",8, /7 0,OPTIONMETE-1,8,"退出系统",8, /8 1,OPTIONMETE-1,0,"输入显示向导",12, /9 1,OPTIONMETE-1,0,"新建显示文本",12, /10 1,OPTIONMETE-1,0,"文本发送显示",12, /11 1,OPTIONMETE-1,0,"删除已存文本",12, /12 1,14,0," 输入法设定",10,/132,O

5、PTIONMETE-1,13,"输入法选择",10, /14 2,OPTIONMETE-1,13,"输入法排序",10, /15 3,OPTIONMETE-1,1,"设定本机时间",12, /16 3,OPTIONMETE-1,1,"发送本机时间",12, /17 3,OPTIONMETE-1,1,"与计算机同步时间",16, /18 4,23,2," 显示当前温度",12,/194,OPTIONMETE-1,2,”存储当前温度",12, /20 4,OPTIONM

6、ETE-1,2,"显示已存温度",12, /21 4,OPTIONMETE-1,2,"删除已存温度",12, /22 5,25,18,"本机显示",8,/235,OPTIONMETE-1,19,"子机显示",8, /24 6,OPTIONMETE-1,23,"LED 显示",8, /25 6,OPTIONMETE-1,23,"数码管显示",10, /26 6,OPTIONMETE-1,23,"同时显示",8, /27 0,0,0,"",

7、0/28;/菜单表分类数组/ unsigned char code LevelMENULEVEL3 = 0,8,9,/每层表单对应开始结束索引号以及选项数目9,13,5,14,15,2,16,18,3,19,22,4,23,24,2, 25,27,3 ;unsigned char FirstLineDisIndex = 0; / unsigned char SelectLine = 1;/unsigned char SelectIndex = 0;/unsigned char LastIndex = 0;/能使用屏幕第一行显示的索引号当前选择的行当前选定行对应的索引号进入功能函数前的索引号,判

8、断具体功/刷新菜单功能函数/ 函数原形:void DIS12864M (void);/没有参数,没有返回值/ 调用方式:void DIS12864M (void);/ void DIS12864M (void)unsigned char i,LineMete =LevelsOptionSelectIndex.KeyLevel2; /循环量,显示行数SentAIns(0x30);/进入液晶普通指令模式SentAIns(0x01);/活屏SetALineReverse (SelectLine); /填充所需反白do/分别显示各行菜单项SentAIns(0x80);for(i=0;i<sOpt

9、ionFirstLineDisIndex.WordMete;i+)SentAData(sOptionFirstLineDisIndex.KeyWordi);if(-LineMete = 0) break;SentAIns(0x90);for(i=0;i<sOptionFirstLineDisIndex+1.WordMete;i+)SentAData(sOptionFirstLineDisIndex+1.KeyWordi);if(-LineMete = 0) break;SentAIns(0x88);for(i=0;i<sOptionFirstLineDisIndex+2.WordM

10、ete;i+)SentAData(sOptionFirstLineDisIndex+2.KeyWordi);if(-LineMete = 0) break;SentAIns(0x98);for(i=0;i<sOptionFirstLineDisIndex+3.WordMete;i+)SentAData(sOptionFirstLineDisIndex+3.KeyWordi);while(0);/判断当前索引是否是表单第一项功能函数/ 函数原形:bit MenuLevelStart (void);/没有参数,返回Bit标志,是第一项返回1,不是返回0/ 调用方式:bit MenuLevel

11、Start (void);/bit MenuLevelStart (void) /判断当前索引是否为当前层第一个选项(unsigned char i = MENULEVEL;do(i-;if(SelectIndex = Leveli0) return 1;while(i);return 0;/判断当前索引是否是表单最后一项功能函数/ 函数原形:bit MenuLevelEnd (void);/没有参数,返回Bit标志,是最后一项返回1,不是返回0/ 调用方式:bit MenuLevelEnd (void);/bit MenuLevelEnd (void)(unsigned char i = M

12、ENULEVEL;do(i-;if(SelectIndex = Leveli1) return 1;while(i);return 0;/菜单上移一项函数/ 函数原形:void MenuUpOneOption (void);/没有参数,没有返回值/ 调用方式:void MenuUpOneOption (void);/ void MenuUpOneOption (void)(if(MenuLevelStart ()/如果当前为表单第一项并且表单中选项数( if(LevelsOptionSelectIndex.KeyLevel2>=4) /目大于等于4个FirstLineDisIndex =

13、 LevelsOptionSelectIndex.KeyLevel1-3; /第一行显示索引号为倒数第四项SelectIndex = LevelsOptionSelectIndex.KeyLevel1; /选择索引为表单最后一项SelectLine = 4;/标记选择行为第四行DIS12864M ();/刷新屏幕显示else /如果选项数目并不大于四个(SelectIndex = LevelsOptionSelectIndex.KeyLevel1; /选择索引为当前表单最后一个SelectLine = LevelsOptionSelectIndex.KeyLevel2; /显示行表单数目(最后

14、一个)DIS12864M ();/刷新屏幕显示else /如果当前不是开始索引( if(SelectLine=1) /并且已经在屏幕最上边一行(FirstLineDisIndex-; /SelectIndex-; / SelectLine = 1; / DIS12864M (); /显示索引上移选择索引自减选择行还是第一行 刷新屏幕else /如果不是第一行(SelectLine-; / 选择行自减SelectIndex-; / 选择索引自减DIS12864M (); / 刷新屏幕显示 /菜单下移一项函数/ 函数原形:void MenuDownOneOption (void);/没有参数,没有

15、返回值/ 调用方式:void MenuDownOneOption (void);/ void MenuDownOneOption (void) (if(MenuLevelEnd ()/如果当前是表单最后一个索引第一选择索引(FirstLineDisIndex = LevelsOptionSelectIndex.KeyLevel0; /行显小索引为表单第一个选项SelectIndex = LevelsOptionSelectIndex.KeyLevel0; /为表单第一个选项索引SelectLine = 1;/选择行为第一行DIS12864M ();/刷新显示else / 如果不是最后的索引如果

16、当前不是屏幕最底行选择索引自加选择行下移( if(SelectLine!=4) /(SelectIndex+; /SelectLine+; /SetALineReverse (SelectLine); /刷新选择行DIS12864M ();/刷新显示else /如果是屏幕最低行(FirstLineDisIndex+;SelectIndex+; /DIS12864M();/ 第一行显示下移选择索引自加刷新显示/某一项功能函数实际应该改为实际功能函数/ void ShutDown (void)(unsigned char code font = ("系统关闭"unsigned

17、char i;SentAIns(0x01);SentAIns(0x92);for(i=0;i<8;i+) SentAData(fonti);void MenuCancelOption(void);void NoThisFunction (void)(unsigned char code Font = ("没有这个功能"unsigned int i,j;SentAIns(0x01);SentAIns(0x91);for(i=0;i<12;i+) SentAData(Fonti);i = 65535;j = 10;do(do(i-;while(i);j-;while

18、(j);MenuCancelOption();void TemperatureShow(void)(unsigned char code Font = ("测试温度:"unsigned int i,j;TempConvert ();SentAIns(0x01);SentAIns(0x90);for(i=0;i<10;i+) SentAData(Fonti);for(i=0;i<6;i+) SentAData(TempFonti);i = 65535;j = 10;do(do(i-;while(i);j-;while(j);MenuCancelOption();/

19、具体功能散转函数/ 函数原形:void FunctionAction/没有参数,没有返回值/ 调用方式: void FunctionAction (void);/void FunctionAction (void)(switch (LastIndex) /根据进入前的索引判断具体函数(case 8: ShutDown(); break;case 5: TemperatureShow(); break;default: NoThisFunction(); break; /如果没有具体操作,显示没有这个功能/进入某项功能函数/ 函数原形:void MenuEnterOption (void);/没

20、有参数,没有返回值/ 调用方式:void MenuEnterOption (void);/ void MenuEnterOption (void)(LastIndex = SelectIndex; /标记进入前的索引号(以便判断具体功能)SelectIndex = sOptionSelectIndex.EnterIndex; /更新选择索引为之前索引号对应进入索引if(SelectIndex != OPTIONMETE-1) /如果当前索引不是功能选择索引(FirstLineDisIndex = LevelsOptionSelectIndex.KeyLevel0; /行显小为进入表单第一项Se

21、lectLine = 1;/DIS12864M ();/ else FunctionAction (); 断函数 设定第一行为选择行 刷新菜单/如果是功能选择项,进入功能分支判/ 菜单退出功能函数/ 函数原形:void MenuCancelOption (void);/没有参数,没有返回值/ 调用方式:void MenuCancelOption (void);/void MenuCancelOption (void) ( if(SelectIndex != OPTIONMETE-1) /如果不是从功能返回SelectIndex = sOptionSelectIndex.CancelIndex;

22、 /选择索引为选项返回索引 else/如果是从功能返回SelectIndex = LastIndex; /索引等于进入前保存索引if(LevelsOptionSelectIndex.KeyLevel2>=4) /如果返回表单选项数目大于4个 ( if(SelectIndex > LevelsOptionSelectIndex.KeyLevel1-3) /根据返回选项确定显示首项(FirstLineDisIndex = LevelsOptionSelectIndex.KeyLevel1-3;SelectLine =4-(LevelsOptionSelectIndex.KeyLevel

23、1-SelectIndex);DIS12864M ();/刷新显示 else /一般显示方式( FirstLineDisIndex = SelectIndex; /第一行显示索引SelectLine = 1;/选择第一行DIS12864M ();/刷新菜单else/如果返回表单选项数目不足 4个(FirstLineDisIndex = LevelsOptionSelectIndex.KeyLevel0; /第一行显小索引为表单第一项SelectLine = SelectIndex -LevelsOptionSelectIndex.KeyLevel0+1; /选择行标志为当前选择索引对应行DIS

24、12864M ();/刷新菜单/菜单操作按键处理散转函数/ 函数原形:void KeyCodeAction (unsigned char KeyCode);/键码作为参数,没有返回值/ 调用方式: void KeyCodeAction (unsigned char KeyCode);/实际使用应根据自己的按键重新编写case项/void KeyCodeAction (unsigned char KeyCode)(switch (KeyCode)(case 'U': MenuUpOneOption(); break; /如果是向上按键,则菜单向上,以下类似case 'D&

25、#39;: MenuDownOneOption(); break;case 'E': MenuEnterOption(); break;case 'C': MenuCancelOption(); break;default: break;/ 菜单更新函数/ 函数原形:void MenuReflash (void);/没有参数,没有返回值/ 调用方式:void MenuReflash (void);/实际应配合自己的按键编码获取程序使用/void MenuReflash (void)(unsigned char Keytemp;/保存按键编码变量Keytemp = GetKeyCode();/保存按键编俏if(Keytemp)/如果按键编码有效(Keytemp = KeyCodeConvert (Keytemp); /根据按键编码获取按键说明字母KeyCodeAction (Keytemp); /根据按键说明字母散转 void main (void)(LcdInit ();Init18b20();DIS12864M ();while (1) MenuReflash ();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1