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

第77节:窗口里通过移动光标设置参数的液晶屏菜单程序

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

  1. de unsigned char Hz1616_hang[]=
  2. {
  3. /*--文字:行--*/
  4. /*--宋体12;此字体下对应的点阵为:宽x高=16x16 --*/
  5. 0x08,0x00,0x1C,0x00,0x31,0xFC,0x40,0x00,0x88,0x00,0x0C,0x00,0x1B,0xFE,0x30,0x20,
  6. 0x50,0x20,0x90,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0xA0,0x10,0x40,
  7. };
  8. unsigned char ucCanvasBuffer[]= //画布显示数组。注意,这里没有code关键字,是全局变量。初始化全部填充0x00
  9. {
  10. 0x00,0x00,0x00,0x00,//上半屏
  11. 0x00,0x00,0x00,0x00,
  12. 0x00,0x00,0x00,0x00,
  13. 0x00,0x00,0x00,0x00,
  14. 0x00,0x00,0x00,0x00,
  15. 0x00,0x00,0x00,0x00,
  16. 0x00,0x00,0x00,0x00,
  17. 0x00,0x00,0x00,0x00,
  18. //------------上半屏和下半屏的分割线-----------
  19. 0x00,0x00,0x00,0x00,//下半屏
  20. 0x00,0x00,0x00,0x00,
  21. 0x00,0x00,0x00,0x00,
  22. 0x00,0x00,0x00,0x00,
  23. 0x00,0x00,0x00,0x00,
  24. 0x00,0x00,0x00,0x00,
  25. 0x00,0x00,0x00,0x00,
  26. 0x00,0x00,0x00,0x00,
  27. };
  28. unsigned char ucKeySec=0; //被触发的按键编号
  29. unsigned intuiVoiceCnt=0;//蜂鸣器鸣叫的持续时间计数器
  30. unsigned char ucWd=1; //窗口变量
  31. unsigned char ucPart=0; //局部变量 0代表没有选中任何一行,其它数值1到4代表选中某一行
  32. unsigned char ucWd1Update=1; //窗口1的整屏更新显示变量 1代表更新显示,响应函数内部会清零
  33. unsigned char ucWd1Part1Update=0; //窗口1的第1行局部更新显示变量1代表更新显示,响应函数内部会清零
  34. unsigned char ucWd1Part2Update=0; //窗口1的第2行局部更新显示变量1代表更新显示,响应函数内部会清零
  35. unsigned char ucWd1Part3Update=0; //窗口1的第3行局部更新显示变量1代表更新显示,响应函数内部会清零
  36. unsigned char ucWd1Part4Update=0; //窗口1的第4行局部更新显示变量1代表更新显示,响应函数内部会清零
  37. unsigned char ucData_1_1=8;//第1个窗口第1行的被设置数据
  38. unsigned char ucData_1_2=9;//第1个窗口第2行的被设置数据
  39. unsigned char ucData_1_3=10;//第1个窗口第3行的被设置数据
  40. unsigned char ucData_1_4=11;//第1个窗口第4行的被设置数据
  41. void main()
  42. {
  43. initial_myself(); //第一区,上电后马上初始化
  44. delay_long(100); //一线,延时线。延时一段时间
  45. initial_peripheral();//第二区,上电后延时一段时间再初始化
  46. while(1) //第三区
  47. {
  48. key_service(); //按键服务的应用程序
  49. lcd_display_service(); //应用层面的液晶屏显示程序
  50. }
  51. }
  52. void initial_myself()//第一区 上电后马上初始化
  53. {
  54. /* 注释一:
  55. * 矩阵键盘也可以做独立按键,前提是把某一根公共输出线输出低电平,
  56. * 模拟独立按键的触发地,本程序中,把key_gnd_dr输出低电平。
  57. * 朱兆祺51学习板的S1和S5两个按键就是本程序中用到的两个独立按键。
  58. */
  59. key_gnd_dr=0; //模拟独立按键的地GND,因此必须一直输出低电平
  60. beep_dr=1; //用PNP三极管控制蜂鸣器,输出高电平时不叫。
  61. TMOD=0x01;//设置定时器0为工作方式1
  62. TH0=0xf8; //重装初始值(65535-2000)=63535=0xf82f
  63. TL0=0x2f;
  64. }
  65. void initial_peripheral() //第二区 上电后延时一段时间再初始化
  66. {
  67. LCDInit(); //初始化12864 内部包含液晶模块的复位
  68. EA=1; //开总中断
  69. ET0=1; //允许定时中断
  70. TR0=1; //启动定时中断
  71. }
  72. void T0_time() interrupt 1
  73. {
  74. TF0=0;//清除中断标志
  75. TR0=0; //关中断
  76. key_scan(); //按键扫描函数
  77. if(uiVoiceCnt!=0)
  78. {
  79. uiVoiceCnt--; //每次进入定时中断都自减1,直到等于零为止。才停止鸣叫
  80. beep_dr=0;//蜂鸣器是PNP三极管控制,低电平就开始鸣叫。
  81. }
  82. else
  83. {
  84. ; //此处多加一个空指令,想维持跟if括号语句的数量对称,都是两条指令。不加也可以。
  85. beep_dr=1;//蜂鸣器是PNP三极管控制,高电平就停止鸣叫。
  86. }
  87. TH0=0xf8; //重装初始值(65535-2000)=63535=0xf82f
  88. TL0=0x2f;
  89. TR0=1;//开中断
  90. }
  91. void key_scan(void)//按键扫描函数 放在定时中断里
  92. {
  93. static unsigned intuiKeyTimeCnt1=0; //按键去抖动延时计数器
  94. static unsigned char ucKeyLock1=0; //按键触发后自锁的变量标志
  95. static unsigned intuiKeyTimeCnt2=0; //按键去抖动延时计数器
  96. static unsigned char ucKeyLock2=0; //按键触发后自锁的变量标志
  97. static unsigned intuiKeyTimeCnt3=0; //按键去抖动延时计数器
  98. static unsigned char ucKeyLock3=0; //按键触发后自锁的变量标志
  99. static unsigned intuiKeyTimeCnt4=0; //按键去抖动延时计数器
  100. static unsigned char ucKeyLock4=0; //按键触发后自锁的变量标志
  101. if(key_sr1==1)//IO是高电平,说明按键没有被按下,这

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

网站地图

Top