📄 input_method.lst
字号:
C51 COMPILER V8.02 INPUT_METHOD 05/22/2008 14:29:21 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE INPUT_METHOD
OBJECT MODULE PLACED IN input_method.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd\input_method.c LARGE BROWSE INCDIR(.\dataflash;.\lcd;.\task;.\uart;.\uc
-os;.\key) DEBUG OBJECTEXTEND PRINT(.\input_method.lst) OBJECT(input_method.obj)
line level source
1 /*
2 **************************************************************************************************
3 *Filename :input_method.c
4 *Creator :cui
5 *Time :
6 *Description:Prepared for short message. Input characters from keyboard and have them display on
7 the lcd, including Chinese character, punctuation, number and letter.
8 **************************************************************************************************
9 */
10
11 /*
12 **************************************************************************************************
13 ************************************Header File Include*******************************************
14 **************************************************************************************************
15 */
16
17 #include "includes.h"
18
19 /*
20 **************************************************************************************************
21 *******************************Global Variable Declaration****************************************
22 **************************************************************************************************
23 */
24
25 unsigned char space_flag;
26
27 /*
28 **************************************************************************************************
29 #Name :edit_receiver_id()
30 #Parameter :ID
31 #Return :SUC_EDIT_ID indicates a successful edit.
32 #Function :edit the receiver's ID
33 #Note :Only can delete a character(number) from the end of the ID.
34 **************************************************************************************************
35 */
36 static unsigned char edit_receiver_id(char * ID)
37 {
38 1 unsigned char length;
39 1 char receive;
40 1
41 1 length =strlen(ID);
42 1 if(length ==0) //若是刚刚进入但消息状态,不是从输入短消息状态返回至编辑ID状态
43 1 {
44 2 lcd_clr();
*** WARNING C206 IN LINE 44 OF LCD\INPUT_METHOD.C: 'lcd_clr': missing function-prototype
45 2 lcd_puts("To:_");
*** WARNING C206 IN LINE 45 OF LCD\INPUT_METHOD.C: 'lcd_puts': missing function-prototype
*** ERROR C267 IN LINE 45 OF LCD\INPUT_METHOD.C: 'lcd_puts': requires ANSI-style prototype
46 2 }
47 1 lcd_set_cur_pos(0, 3+length);
48 1 lcd_putc('_');
49 1 while(1)
50 1 {
51 2 receive =uart_get_char();
C51 COMPILER V8.02 INPUT_METHOD 05/22/2008 14:29:21 PAGE 2
52 2 if((receive == OK_ENTER) && (length > 0))
53 2 {
54 3 if(length < MAX_ID_LENGTH) //说明在ID尾部存在一个光标
55 3 {
56 4 lcd_set_cur_pos(0, 3+length);
57 4 lcd_putc(' ');
58 4 }
59 3 lcd_set_cur_pos(1, 0);
60 3 lcd_putc('_');
61 3 return SUC_EDIT_ID;
62 3 }
63 2 if((receive == EXIT_MENU) && (length > 0))
64 2 {
65 3 ID[length-1] ='\0';
66 3 lcd_set_cur_pos(0, 3+length-1);
67 3 lcd_puts("_ "); //下划线既清楚又光标
68 3 length--;
69 3 }
70 2 if(((receive >= '0') && (receive <= '9')) && (length < MAX_ID_LENGTH))
71 2 {
72 3 ID[length] =receive;
73 3 lcd_set_cur_pos(0, 3+length);
74 3 lcd_putc(receive);
75 3 length++;
76 3 if(length < MAX_ID_LENGTH)
77 3 lcd_putc('_');
78 3 }
79 2 }
80 1 }
81
82 /*
83 **************************************************************************************************
84 #Name :disp_mov_cur()
85 #Parameter :msg is the short message.
86 page is the current screen sequence number.
87 vircur points to the changed unit in msg.
88 left specifies the moving direction of cursor. Move left if left==1, else move right.
89 #Return :
90 #Function :Display. invoked after moving cursor.
91 #Note :
92 **************************************************************************************************
93 */
94 static void disp_mov_cur(const char * msg, unsigned char page, unsigned char vircur, bit left)
95 {
96 1
97 1 }
98
99 /*
100 **************************************************************************************************
101 #Name :disp_tail_app()
102 #Parameter :msg is the short message.
103 page is the current screen sequence number.
104 vircur points to the changed unit in msg.
105 Chinese specifies whether the changed unit is a Chinese charater. Yes when Chinese==1
106 #Return :
107 #Function :Display. invoked after appending a sign.
108 #Note :
109 **************************************************************************************************
110 */
111 static void disp_tail_app(const char * msg, unsigned char page, unsigned char vircur, bit Chinese)
112 {
113 1 unsigned char realcur;
C51 COMPILER V8.02 INPUT_METHOD 05/22/2008 14:29:21 PAGE 3
114 1 unsigned char i;
115 1
116 1 realcur =vircur; /*calculate the real cursor position*/
117 1 for(i=0; i< page; i++)
118 1 {
119 2 if((space_flag & (0x1 << i)) != 0)
120 2 {
121 3 realcur++;
122 3 }
123 2 }
124 1
125 1 if(Chinese == 0) /*append a non-Chinese character*/
126 1 {
127 2 if((realcur % 20) == 0) /*a new page to display*/
128 2 {
129 3 lcd_set_cur_pos(1, 0);
130 3 lcd_putc(msg[vircur]);
131 3 }
132 2 else
133 2 {
134 3 lcd_set_cur_pos(1, realcur % 20);
135 3 lcd_putc(msg[vircur]);
136 3 }
137 2 }
138 1 else
139 1 {
140 2
141 2 }
142 1 }
143
144 static void display_type(unsigned char type)
145 {
146 1 lcd_set_cur_pos(0, 15);
147 1 lcd_putc('[');
148 1 switch(type)
149 1 {
150 2 case 0:
151 2 lcd_puts("单");
152 2 break;
153 2 case 1:
154 2 lcd_puts("Ea");
155 2 break;
156 2 case 2:
157 2 lcd_puts("01");
158 2 break;
159 2 case 3:
160 2 lcd_puts(",.");
161 2 break;
162 2 default:
163 2 lcd_puts("单");
164 2 break;
165 2 }
166 1 lcd_putc(']');
167 1 }
168
169 unsigned char input_chinese(SHORT_MESSAGE * ms_info)
170 {
171 1
172 1 }
173
174 unsigned char input_letter(SHORT_MESSAGE * ms_info)
175 {
C51 COMPILER V8.02 INPUT_METHOD 05/22/2008 14:29:21 PAGE 4
176 1
177 1 }
178 unsigned char input_number(SHORT_MESSAGE * ms_info)
179 {
180 1
181 1 }
182 unsigned char input_punctuation(SHORT_MESSAGE * msg_info)
183 {
184 1 char punc[2][17] ={
185 1 {",.!\?:;()\"+-*/=\'%"},
186 1 {"$#_{}[]<>&@|\\^`~"}
187 1 };
188 1 char receive;
189 1 unsigned char key_left_right =0;
190 1 unsigned char realcur_flag =0; //显示本行是否最后有空格
191 1 char i;
192 1
193 1 lcd_set_cur_pos(3, 0);
194 1 lcd_putc('>');
195 1 lcd_set_cur_pos(3, 2);
196 1 lcd_putc_rev(punc[0][0]);
197 1 lcd_puts(*punc + 1);
198 1 lcd_set_cur_pos(3, 19);
199 1 lcd_putc('>');
200 1 while(1)
201 1 {
202 2 receive =uart_get_char();
203 2 if(receive == '#')
204 2 return SWITCH_INPUT_TYPE;
205 2 if(receive == MENU) //发送短消息
206 2 return EXIT_INPUT;
207 2 if((msg_info->length == MAX_MESSAGE_LENGTH) && (receive != EXIT_MENU))
208 2 return OUT_OF_RANGE;
209 2 if(receive == OK_ENTER)
210 2 {
211 3 disp_tail_app(msg_info->message, 0 , 0, 0);
212 3 }
213 2 }
214 1 }
215
216 unsigned char input_method_fun(SHORT_MESSAGE * ms_info)
217 {
218 1 unsigned char type_select =3; //用于控制输入什么类型的字符
219 1 unsigned char ret;
220 1
221 1 space_flag =0;
222 1
223 1 while(1)
224 1 {
225 2 type_select =type_select % 4;
226 2 switch(type_select)
227 2 {
228 3 case 0:
229 3 display_type(0);
230 3 ret =input_chinese(ms_info);
231 3 break;
232 3 case 1:
233 3 display_type(1);
234 3 ret =input_letter(ms_info);
235 3 break;
236 3 case 2:
237 3 display_type(2);
C51 COMPILER V8.02 INPUT_METHOD 05/22/2008 14:29:21 PAGE 5
238 3 ret =input_number(ms_info);
239 3 break;
240 3 case 3:
241 3 display_type(3);
242 3 ret =input_punctuation(ms_info);
243 3 break;
244 3 default:
245 3 display_type(0);
246 3 ret =input_chinese(ms_info);
247 3 break;
248 3 }
249 2 if(ret == SWITCH_INPUT_TYPE) //切换输入类型
250 2 type_select++;
251 2 if(ret == OUT_OF_RANGE) //循环等待退格键或退出输入键
252 2 ;
253 2 if(ret == EXIT_INPUT) //退出输入
254 2 break;
255 2 }
256 1 return WAIT_SEND;
257 1 }
258
C51 COMPILATION COMPLETE. 2 WARNING(S), 1 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -