📄 main.lst
字号:
C51 COMPILER V7.08 MAIN 10/31/2007 10:13:27 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <stdio.h> /* standard I/O .h-file */
2 #include <reg51f.h>
3 #include <absacc.h>
4 #include <main.h>
5 #include <time.h>
6 #include "lcd.h"
7 #include "x5045.h"
8
9 unsigned char xdata LEDState, //LED灯、液晶背光状态变量
10 ArrayLine, //显示屏变量
11 ScrLine, //反白显示行变量
12 JD_ticker, //接地计时变量(10毫秒)
13 Ticker, //按键等用的计时变量;
14 ESCTicker, //无键按下,关闭背光计数器
15 F_back; //需不需要返回上一级的标志,
16 //0xAA----需要返回
17 //0x55----不需要返回
18
19 unsigned char code P_first[][16]= //一级菜单
20 {
21 " 1、一级菜单1 ",
22 " 2、一级菜单2 ",
23 " 3、一级菜单3 ",
24 " 4、一级菜单4 ",
25 " 5、一级菜单5 ",
26 " 6、一级菜单6 "
27 };
28 unsigned char code second_menu_1[][16]= //二级子菜单
29 {
30 "1.1二级菜单1 ",
31 "1.Ⅱ二级菜单2 ",
32 "1.Ⅰ二级菜单3 ",
33 " 1、二级菜单4 ",
34 "1.5二级菜单5 ",
35 " 1.6二级菜单6 ",
36 " 1.7二级菜单7 ",
37 " 1.8二级菜单8 "
38 };
39 unsigned char code second_menu_2[][16]= //二级子菜单
40 {
41 "2.1 二级菜单1 ",
42 "2.2 二级菜单2 ",
43 "2.3 二级菜单3 ",
44 "2.4 二级菜单4 ",
45 "2.5 二级菜单5 ",
46 "2.6二级菜单6 ",
47 "2.7二级菜单7 ",
48 "2.8二级菜单8 "
49 };
50 unsigned char code second_menu_3[][16]= //二级子菜单
51 {
52 "3.1二级子菜单1",
53 "3.2二级子菜单2",
54 "3.3二级子菜单3",
55 "3.4二级子菜单4",
C51 COMPILER V7.08 MAIN 10/31/2007 10:13:27 PAGE 2
56 "3.5二级子菜单5",
57 "3.6二级子菜单6",
58 "3.7二级子菜单7",
59 "3.8二级子菜单8"
60 };
61 unsigned char code second_menu_4[][16]= //二级子菜单
62 {
63 "4.1二级子菜单1",
64 "4.2二级子菜单2",
65 "4.3二级子菜单3",
66 "4.4二级子菜单4",
67 "4.5二级子菜单5",
68 "4.6二级子菜单6",
69 "4.7二级子菜单7",
70 "4.8二级子菜单8"
71 };
72 unsigned char code second_menu_5[][16]= //二级子菜单
73 {
74 "5.1二级子菜单1",
75 "5.2二级子菜单2",
76 "5.3二级子菜单3",
77 "5.4二级子菜单4",
78 "5.5二级子菜单5"
79 };
80 unsigned char code second_menu_6[][16]= //二级子菜单
81 {
82 " ",
83 " 实验程序 ",
84 " 菜单程序调试 ",
85 " "
86 };
87 //*********************************************************
88 //时子程序
89 //********************************************************
90 void Delay1(time)
91 unsigned int time;
92 {
93 1 while(time--);
94 1 }
95 //***********************************************
96 //键盘识别子程序
97 //***********************************************
98 unsigned char GetKey(time)
99 unsigned char time;
100 {
101 1 unsigned char xdata sec1,sec2,keyvalue;
102 1 sec2=SECOND;
103 1 if(sec1!=sec2)
104 1 {
105 2 sec1=sec2;
106 2 ESCTicker++;
107 2 if(ESCTicker>10) //无按键操作60秒后,关闭背光
108 2 {
109 3 ESCTicker = 0;
110 3 LEDState = LEDState&0x7f;
111 3 }
112 2 }
113 1
114 1 LED=LEDState;
115 1
116 1 if((F_back == 0xaa)&&(LEDState<0x80))
117 1 { //F_back需不需要返回主屏的标志
C51 COMPILER V7.08 MAIN 10/31/2007 10:13:27 PAGE 3
118 2 return(ESC); //60秒内无按键,且不在主屏幕,则返回主屏.
119 2 }
120 1 watchdog();
121 1
122 1 keyvalue = KEY_ADDR; //判键 #define KEY_ADDR XBYTE[0X4000] 读取按键值
123 1 if(keyvalue!=0xff)
124 1 {
125 2 if(Ticker > time) //time按键以后的延时时间
126 2 {
127 3 LEDState=LEDState|0x80; //有按键点亮背光
128 3 Ticker = 0; //按键延时计数器清零
129 3 ESCTicker=0; //背光关闭计时器清零,返回上一级菜单
130 3 return(keyvalue);
131 3 }
132 2 else
133 2 {
134 3 keyvalue = 0xff;
135 3 return(keyvalue);
136 3 }
137 2 }
138 1 else
139 1 {
140 2 Ticker = 0;
141 2 return(0xff);
142 2 }
143 1 }
144 //*********************************************************
145 //一级菜单显示
146 //*********************************************************
147 void d_first(void) //一级菜单显示
148 { unsigned char key_value;
149 1 ArrayLine=0;
150 1 ScrLine=0;
151 1 while(1)
152 1 {
153 2 ReverseLine(ScrLine);
154 2 PrintStr(0,0,P_first[ArrayLine]);
155 2 PrintStr(1,0,P_first[ArrayLine+1]);
156 2 PrintStr(2,0,P_first[ArrayLine+2]);
157 2 PrintStr(3,0,P_first[ArrayLine+3]);
158 2 while(1)
159 2 {
160 3 key_value=GetKey(12);
161 3 if(key_value!=0xff) //判断按键是否有键按下
162 3 break;
163 3 }
164 2 watchdog();
165 2 switch(key_value)
166 2 {
167 3 /* 当按向上键和加号键时向上移动*/
168 3 case UP:
169 3 case PLUS:
170 3 if (ArrayLine==0) //当数组指针在第一行时,只有此时才考虑到最后一行
171 3 {//ArrayLine 显示屏变量
172 4 if (ScrLine<=0) //如果屏幕指针在第一行则到最后一行
173 4 {
174 5 ScrLine = 3; //ScrLine 反白显示行变量
175 5 ArrayLine = ARRAYLINE; //#define ARRAYLINE 2 一级菜单长度减4
176 5 }
177 4 else //如果屏幕指针没有在最后一行则向上移动
178 4 ScrLine--;
179 4 }
C51 COMPILER V7.08 MAIN 10/31/2007 10:13:27 PAGE 4
180 3 else //如果数组指针不在第一行
181 3 {
182 4 if (ScrLine<=0) //如果屏幕指针在第一行,则要向上滚屏
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -