微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第79节:通过主菜单移动光标来进入子菜单窗口的液晶屏程序

第79节:通过主菜单移动光标来进入子菜单窗口的液晶屏程序

时间:11-22 来源:互联网 点击:

  1. 和下半屏的分割线-----------
  2. 0x00,0x00,0x00,0x00,//下半屏
  3. 0x00,0x00,0x00,0x00,
  4. 0x00,0x00,0x00,0x00,
  5. 0x00,0x00,0x00,0x00,
  6. 0x00,0x00,0x00,0x00,
  7. 0x00,0x00,0x00,0x00,
  8. 0x00,0x00,0x00,0x00,
  9. 0x00,0x00,0x00,0x00,
  10. };
  11. unsigned char ucKeySec=0; //被触发的按键编号
  12. unsigned intuiVoiceCnt=0;//蜂鸣器鸣叫的持续时间计数器
  13. unsigned char ucWd=1; //窗口变量
  14. unsigned char ucWd1Part=1;//窗口1的局部变量,代表选中某一行。
  15. unsigned char ucWd1Update=1; //窗口1的整屏更新显示变量 1代表更新显示,响应函数内部会清零
  16. unsigned char ucWd1Part1Update=0; //窗口1的第1个局部更新显示变量1代表更新显示,响应函数内部会清零
  17. unsigned char ucWd1Part2Update=0; //窗口1的第2个局部更新显示变量1代表更新显示,响应函数内部会清零
  18. unsigned char ucWd1Part3Update=0; //窗口1的第3个局部更新显示变量1代表更新显示,响应函数内部会清零
  19. unsigned char ucWd2Part=1;//窗口2的局部变量,代表选中某一行。
  20. unsigned char ucWd2Update=0; //窗口2的整屏更新显示变量 1代表更新显示,响应函数内部会清零
  21. unsigned char ucWd2Part1Update=0; //窗口2的第1个局部更新显示变量1代表更新显示,响应函数内部会清零
  22. unsigned char ucWd2Part2Update=0; //窗口2的第2个局部更新显示变量1代表更新显示,响应函数内部会清零
  23. unsigned char ucWd3Part=1;//窗口3的局部变量,代表选中某一行。
  24. unsigned char ucWd3Update=0; //窗口3的整屏更新显示变量 1代表更新显示,响应函数内部会清零
  25. unsigned char ucWd3Part1Update=0; //窗口3的第1个局部更新显示变量1代表更新显示,响应函数内部会清零
  26. unsigned char ucWd3Part2Update=0; //窗口3的第2个局部更新显示变量1代表更新显示,响应函数内部会清零
  27. unsigned char ucWd4Part=1;//窗口4的局部变量,代表选中某一行。
  28. unsigned char ucWd4Update=0; //窗口4的整屏更新显示变量 1代表更新显示,响应函数内部会清零
  29. unsigned char ucWd4Part1Update=0; //窗口4的第1个局部更新显示变量1代表更新显示,响应函数内部会清零
  30. unsigned char ucWd4Part2Update=0; //窗口4的第2个局部更新显示变量1代表更新显示,响应函数内部会清零
  31. unsigned char ucTimeH=2;//设置时间的上限数据
  32. unsigned char ucTimeL=1;//设置时间的下限数据
  33. unsigned char ucSpeedH=4;//设置速度的上限数据
  34. unsigned char ucSpeedL=3;//设置速度的下限数据
  35. unsigned char ucFreqH=6;//设置频率的上限数据
  36. unsigned char ucFreqL=5;//设置频率的下限数据
  37. void main()
  38. {
  39. initial_myself(); //第一区,上电后马上初始化
  40. delay_long(100); //一线,延时线。延时一段时间
  41. initial_peripheral();//第二区,上电后延时一段时间再初始化
  42. while(1) //第三区
  43. {
  44. key_service(); //按键服务的应用程序
  45. lcd_display_service(); //应用层面的液晶屏显示程序
  46. }
  47. }
  48. void initial_myself()//第一区 上电后马上初始化
  49. {
  50. /* 注释二:
  51. * 矩阵键盘也可以做独立按键,前提是把某一根公共输出线输出低电平,
  52. * 模拟独立按键的触发地,本程序中,把key_gnd_dr输出低电平。
  53. * 朱兆祺51学习板的S1和S5两个按键就是本程序中用到的两个独立按键。
  54. */
  55. key_gnd_dr=0; //模拟独立按键的地GND,因此必须一直输出低电平
  56. beep_dr=1; //用PNP三极管控制蜂鸣器,输出高电平时不叫。
  57. TMOD=0x01;//设置定时器0为工作方式1
  58. TH0=0xf8; //重装初始值(65535-2000)=63535=0xf82f
  59. TL0=0x2f;
  60. }
  61. void initial_peripheral() //第二区 上电后延时一段时间再初始化
  62. {
  63. LCDInit(); //初始化12864 内部包含液晶模块的复位
  64. EA=1; //开总中断
  65. ET0=1; //允许定时中断
  66. TR0=1; //启动定时中断
  67. }
  68. void T0_time() interrupt 1
  69. {
  70. TF0=0;//清除中断标志
  71. TR0=0; //关中断
  72. key_scan(); //按键扫描函数
  73. if(uiVoiceCnt!=0)
  74. {
  75. uiVoiceCnt--; //每次进入定时中断都自减1,直到等于零为止。才停止鸣叫
  76. beep_dr=0;//蜂鸣器是PNP三极管控制,低电平就开始鸣叫。
  77. }
  78. else
  79. {
  80. ; //此处多加一个空指令,想维持跟if括号语句的数量对称,都是两条指令。不加也可以。
  81. beep_dr=1;//蜂鸣器是PNP三极管控制,高电平就停止鸣叫。
  82. }
  83. TH0=0xf8; //重装初始值(65535-2000)=63535=0xf82f
  84. TL0=0x2f;
  85. TR0=1;//开中断
  86. }
  87. void key_scan(void)//按键扫描函数 放在定时中断里
  88. {
  89. static unsigned intuiKeyTimeCnt1=0; //按键去抖动延时计数器
  90. static unsigned char ucKeyLock1=0; //按键触发后自锁的变量标志
  91. sta

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top