📄 串口+8个键盘程序.lst
字号:
C51 COMPILER V7.50 串口_8竉键盘程序 05/04/2007 10:30:05 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 串口_8竉键盘程序
OBJECT MODULE PLACED IN 串口+8个键盘程序.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 串口+8个键盘程序.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 #include<reg51.h>
3 #include<intrins.h>
4 #include<string.h>
5 #define comm 0
6 #define dat 1
7 #define uchar unsigned char
8 #define uint unsigned int
9 #define x1 0x80
10 #define x2 0x88
11 #define y 0x80
12 sbit Key_Hang0=P2^0;
13 sbit Key_Hang1=P2^1;
14 sbit Key_Lie0=P2^2;
15 sbit Key_Lie1=P2^3;
16 sbit Key_Lie2=P2^4;
17 sbit Key_Lie3=P2^5;
18 sbit Speaker=P2^7;
19 sbit cs = P1^0;
20 sbit std = P1^1;
21 sbit sclk = P1^2;
22 sbit psb = P1^3; //H=并口; L=串口;
23 sbit rst = P1^4; //Reset Signal 低电平有效
24 sbit led = P1^7; //Reset Signal 低电平有效
25
26
27 char send;
28 char tar[]={'D'};
29 #define MENULEVEL 7 //当前菜单表个数
30 #define OPTIONMETE 29 //当前选项个数,包括一个特别功能选项
31 //-------------------------------------
32 //
33 // 菜单结构定义
34 //
35 //-------------------------------------
36 struct Option{
37 unsigned char KeyLevel; //菜单选项所属菜单表号
38 unsigned char EnterIndex; //选项进入索引号
39 unsigned char CancelIndex; //选项退出索引号
40 unsigned char KeyWord[16]; //菜单选项文字描述数组
41 unsigned char WordMete; //菜单选项描述文字字节数
42 };
43 //-------------------------------------
44 //
45 // 具体菜单选项定义,定义一个结构数组
46 // 存储在编码区,节省内存RAM
47 //
48 //-------------------------------------
49 struct Option code sOption[OPTIONMETE] = {
50 // KeyLevel, EnterIndex, CancelIndex, KeyWord[16], WordMete//
51 //菜单选项所属菜单表号
52 //选项进入索引号
53 //选项退出索引号
54 //菜单选项文字描述数组
55 //菜单选项描述文字字节数
C51 COMPILER V7.50 串口_8竉键盘程序 05/04/2007 10:30:05 PAGE 2
56 {0,9,0,"文本功能",8}, //0---------------------------9往下数9组数据就是"文本功能"
57 {0,16,1,"时间功能",8}, //1
58 {0,19,2,"温度功能",8}, //2
59 {0,OPTIONMETE-1,3,"系统检测",8}, //3
60 {0,OPTIONMETE-1,4,"修改密码",8}, //4
61 {0,OPTIONMETE-1,5,"帮助说明",8}, //5
62 {0,OPTIONMETE-1,6,"作者介绍",8}, //6
63 {0,OPTIONMETE-1,7,"系统版本",8}, //7
64 {0,OPTIONMETE-1,8,"退出系统",8}, //8
65
66 {1,OPTIONMETE-1,0,"输入显示向导",12}, //9------------------------------------"文本功能"
67 {1,OPTIONMETE-1,0,"新建显示文本",12}, //10
68 {1,OPTIONMETE-1,0,"文本发送显示",12}, //11
69 {1,OPTIONMETE-1,0,"删除已存文本",12}, //12
70 {1,14,0,"输入法设定",10}, //13
71
72 {2,OPTIONMETE-1,13,"输入法选择",10}, //14
73 {2,OPTIONMETE-1,13,"输入法排序",10}, //15
74
75 {3,OPTIONMETE-1,1,"设定本机时间",12}, //16-----------------------------------"时间功能"
76 {3,OPTIONMETE-1,1,"发送本机时间",12}, //17
77 {3,OPTIONMETE-1,1,"与计算机同步时间",16}, //18
78
79 {4,23,2,"显示当前温度",12}, //19-----------------------------------------"温度功能"
80 {4,OPTIONMETE-1,2,"存储当前温度",12}, //20
81 {4,OPTIONMETE-1,2,"显示已存温度",12}, //21
82 {4,OPTIONMETE-1,2,"删除已存温度",12}, //22
83
84 {5,25,19,"本机显示",8}, //23
85 {5,OPTIONMETE-1,19,"子机显示",8}, //24
86
87 {6,OPTIONMETE-1,23,"LED 显示",8}, //25
88 {6,OPTIONMETE-1,23,"数码管显示",10}, //26
89 {6,OPTIONMETE-1,23,"同时显示",8}, //27
90
91 {0,0,0,"",0} //28
92 };
93 //--------------------------------------
94 //
95 // 菜单表分类数组
96 //
97 //--------------------------------------
98 unsigned char code Level[MENULEVEL][3] = {
99 //每层表单对应 开始 结束 索引号 以及 选项数目
100 {0,8,9},
101 {9,13,5},
102 {14,15,2},
103 {16,18,3},
104 {19,22,4},
105 {23,24,2},
106 {25,27,3}
107 //SelectIndex
108 };
109 uchar ii,jj;
110 unsigned char FirstLineDisIndex = 0; //屏幕第一行显示的索引号
111 unsigned char SelectLine = 1; //当前选择的行
112 unsigned char SelectIndex = 0; //当前选定行对应的索引号
113 unsigned char LastIndex = 0; //进入功能函数前的索引号,判断具体功能使用
114 void send_sub(unsigned char send_data); //发送函数
115 void key_delay(int delay_time);
116 void GetKeyCode (void);
117 void start_init();
C51 COMPILER V7.50 串口_8竉键盘程序 05/04/2007 10:30:05 PAGE 3
118 char KeyCodeConvert(char send);
119 void MenuReflash (void);
120 void MenuCancelOption (void);
121 void MenuEnterOption (void);
122 void FunctionAction (void);
123 void TemperatureShow(void);
124 void NoThisFunction (void);
125 void MenuCancelOption(void);
126 void ShutDown (void);
127 void MenuDownOneOption (void);
128 void MenuUpOneOption (void);
129 bit MenuLevelEnd (void);
130 bit MenuLevelStart (void); //判断当前索引是否为当前层第一个选项
131 void DIS12864M (void);
132 void wr_lcd (char dat_comm,char content);
133
134 void SentAIns(char LCD_Comand); //进入液晶普通指令模式
135 void SentAData(char LCD_Data);
136 void con_disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl);
137 void SetALineReverse (char SelectLine); //填充所需反白
138 void delay (uint us); //delay time
139 void init_lcd ();
140 void Disp_String(uint a,uint b,uchar *dd);
141 void lat_disp (uchar data1,uchar data2);
142
143 //--------------------------------------------------------------------------------------
144 main()
145 {
146 1 start_init();
147 1 init_lcd ();
148 1 DIS12864M();
149 1 //lat_disp (0x00,0x00);
150 1 //con_disp(0xff,0xff,0x80,0x80,4,16);///反白
151 1 //SetALineReverse (SelectLine); //填充所需反白
152 1 while(1)
153 1 { //key ();
154 2 MenuReflash (); //菜单更新函数
155 2 if(send)
156 2 {
157 3 send_sub( send);
158 3 send=0;
159 3 }
160 2
161 2 }
162 1 }
163
164
165 void send_sub(unsigned char send_data) //发送函数
166 {
167 1 TI=0;
168 1 EA=0;
169 1 ACC=send_data;
170 1 SBUF=ACC;
171 1 while(TI==0); //wait for sended
172 1 send_data=0x00; //clear send
173 1 TI=0;
174 1 EA=1;
175 1 }
176
177
178 void GetKeyCode()
179 {
C51 COMPILER V7.50 串口_8竉键盘程序 05/04/2007 10:30:05 PAGE 4
180 1 Key_Hang0=0;
181 1 _nop_();
182 1 if(!Key_Lie0)
183 1 {
184 2 key_delay(5);
185 2 while(!Key_Lie0)
186 2 {Speaker=1;
187 3 send=0x08;
188 3 }
189 2 Speaker=0;
190 2 }
191 1 if(!Key_Lie1)
192 1 {
193 2 key_delay(5);
194 2 while(!Key_Lie1)
195 2 { Speaker=1;
196 3 send=0x07;
197 3 }
198 2 Speaker=0;
199 2 }
200 1
201 1 //scan no2
202 1 if(!Key_Lie2)
203 1 {
204 2 key_delay(5);
205 2 while(!Key_Lie2)
206 2 {Speaker=1;
207 3 send=0x06;
208 3 }
209 2 Speaker=0;
210 2 }
211 1 if(!Key_Lie3)
212 1 {
213 2 key_delay(5);
214 2 while(!Key_Lie3)
215 2 {Speaker=1;
216 3 send=0x05;
217 3 }
218 2 Speaker=0;
219 2 }
220 1
221 1 Key_Hang0=1;
222 1 Key_Hang1=0;
223 1 _nop_();
224 1 if(!Key_Lie0)
225 1 {
226 2 key_delay(5);
227 2 while(!Key_Lie0)
228 2 {Speaker=1;
229 3 send=0x4;
230 3 }
231 2 Speaker=0;
232 2 }
233 1 if(!Key_Lie1)
234 1 {
235 2 key_delay(5);
236 2 while(!Key_Lie1)
237 2 {Speaker=1;
238 3 send=0x03;
239 3 }
240 2 Speaker=0;
241 2 }
C51 COMPILER V7.50 串口_8竉键盘程序 05/04/2007 10:30:05 PAGE 5
242 1
243 1 //scan no2
244 1 if(!Key_Lie2)
245 1 {
246 2 key_delay(5);
247 2 while(!Key_Lie2)
248 2 {Speaker=1;
249 3 send=0x02;
250 3 }
251 2 Speaker=0;
252 2 }
253 1 if(!Key_Lie3)
254 1 {
255 2 key_delay(5);
256 2 while(!Key_Lie3)
257 2 { Speaker=1;
258 3 send=0x01;
259 3 }
260 2 Speaker=0;
261 2 }
262 1 Key_Hang1=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -