📄 t9_v1.lst
字号:
C51 COMPILER V7.50 T9_V1 01/22/2006 18:12:40 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE T9_V1
OBJECT MODULE PLACED IN T9_V1.OBJ
COMPILER INVOKED BY: e:\Keil\C51\BIN\C51.EXE T9_V1.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <REG52.H>
2 #include <stdio.h>
3 #include<ziku.h>
4 #include<string.h>
5
6
7
8
9 #define uint unsigned int
10 #define uchar unsigned char
11 #define DISP_ON 0x3f
12 #define DISP_OFF 0x3e
13 #define COL 0x40 //列地址
14 #define PAGE 0xb8 //行地址
15 #define START_LINE 0xc0
16 #define LCD_BUS P2
17 #define LCD_CON P3
18 #define key_bus P1
19
20
21 //==========================================口定义=================================================
22
23 sbit CS1=LCD_CON^0; // CS1
24 sbit CS2=LCD_CON^1; // CS2
25 sbit E =LCD_CON^2; //液晶使能
26 sbit RW=LCD_CON^3; //液晶读写
27 sbit DI=LCD_CON^4; //液晶数据指
28 sbit sw0=P3^6; //OK
29 sbit sw1=P3^7; //Cancel
30 sbit SCL=P0^0;
31 sbit SDA=P0^1;
32
33 //===========================================END===================================================
34
35
36
37
38
39
40 //=============================================函数声明============================================
41
42 void display_h(uchar page,uchar col,uchar code *str,uchar n);
43 void display_e(uchar page,uchar col,uchar code *str,uchar n);
44 void display_num(uchar page,uchar col,uchar code *str,uchar n);
45 void line_v(uchar x,uchar y,uchar l);
46 void line_h(uchar x,uchar y,uchar l);
47 void init();
48 void cls();
49 void delay(uint); //延时程序
50 void write_cmd(uchar); //写命令操作字
51 void write_data(uchar); //写数据
52 uchar read_data(); //读数据
53 uchar key_ii();
54 unsigned char code *py_v1(unsigned char input_py_val[]);
55 void point(uchar x,uchar y);
C51 COMPILER V7.50 T9_V1 01/22/2006 18:12:40 PAGE 2
56 unsigned char *T9PY(char *strInput_t9PY_str,uchar length);
57 //==============================================END================================================
58
59
60 #include<iic.h>
61
62
63 //========================================全局变量声明=============================================
64 uchar *p_py;
65 unsigned char PY_num;
66 struct t9PY_index code * T9PY_mb[4];
67 uchar state=0;//用state变量来指示程序的执行状态
68 uchar file_num=0;//用于记录短信的数目,初值为0
69 uchar length_h=0;//用于记录当前编辑的短信的长度
70 uchar row=0;
71 /**************************************************************************************************
72 *
73 *T9 输入法查找函数
74 *函数声明:unsigned char *T9PY(char *strInput_t9PY_str,uchar length);
75 *参数说明:strInput_t9PY_str为字符串的地址,length为字符串的长度
76 *函数功能:把找到的汉字点阵表的首地址放在数组T9PY_mb中
77 *
78 **************************************************************************************************/
79
80 unsigned char *T9PY(char *strInput_t9PY_str,uchar length)
81 {
82 1 struct t9PY_index *cpHZ,*cpHZedge;
83 1 unsigned char i;
84 1 PY_num=0;
85 1 if(*strInput_t9PY_str=='\0')return(0); //如果输入空字符返回0
86 1
87 1 cpHZ=&(t9PY_index2[0]); //查首字母索引
88 1 cpHZedge=t9PY_index2+sizeof(t9PY_index2)/sizeof(t9PY_index2[0]);
89 1 while(cpHZ < cpHZedge) //待查询记录条数
90 1 {
91 2 for(i=0;i<length;i++)
92 2 {
93 3 if(*(strInput_t9PY_str+i)!=*((*cpHZ).t9PY_T9+i)) //检查字符串匹配
94 3 {
95 4
96 4 break; //发现字母串不配,退出/
97 4 }
98 3
99 3
100 3 }
101 2 if(i==length&&PY_num<=3)
102 2 {
103 3
104 3 T9PY_mb[PY_num]=cpHZ;
105 3 PY_num++;
106 3 //break;
107 3 }
108 2
109 2 cpHZ++;
110 2 }
111 1 if (PY_num>0)
112 1 {
113 2 p_py=T9PY_mb[0]->PY;
114 2 return(T9PY_mb[0]->PY_mb);
115 2 }
116 1 else
117 1 {
C51 COMPILER V7.50 T9_V1 01/22/2006 18:12:40 PAGE 3
118 2 return(PY_mb_a);
119 2 }
120 1 }
121
122
123 /**************************************************************************************************
124 * P17>---0----1----2----3
125 * | | | |
126 * P16>---4----5----6----7
127 * | | | |
128 * P15>---8----9----A----B
129 * | | | |
130 * P14>---C----D----E----F
131 * | | | |
132 * P13 P12 P11 P10
133 *4*4键盘输入函数
134 *函数声明:uchar key_ii();
135 *函数参数:无
136 *
137 *
138 *
139 **************************************************************************************************/
140 uchar key_ii()
141 {
142 1 uchar keycode=0xff,temp,i;
143 1 key_bus=0x0f;
144 1 temp=key_bus&0x0f;
145 1 if(temp!=0x0f) //有键按下
146 1 {
147 2 key_bus=0x7f;
148 2 for(i=0;i<4;i++)
149 2 {
150 3 temp=key_bus&0x0f;
151 3 if(temp==0x07)
152 3 {
153 4 keycode=i*4;
154 4 break;
155 4 }
156 3 else if(temp==0x0b)
157 3 {
158 4 keycode=i*4+1;
159 4 break;
160 4 }
161 3 else if(temp==0x0d)
162 3 {
163 4 keycode=i*4+2;
164 4 break;
165 4 }
166 3 else if(temp==0x0e)
167 3 {
168 4 keycode=i*4+3;
169 4 break;
170 4 }
171 3 key_bus=(key_bus>>1)|0x80;
172 3 }
173 2
174 2 while((key_bus&0x0f)!=0x0f) //等待释放
175 2 {
176 3 key_bus=0x0f;
177 3 }
178 2
179 2 }
C51 COMPILER V7.50 T9_V1 01/22/2006 18:12:40 PAGE 4
180 1 return keycode;
181 1 }
182
183 /**************************************************************************************************
184 *
185 *
186 *
187 *
188 *
189 *
190 **************************************************************************************************/
191 uchar key()
192 {
193 1 uchar keycode=0,temp;
194 1 //键盘口,先置1
195 1 sw0=1; sw1=1;
196 1 temp=P3&0xD0;
197 1 if(temp!=0xD0)
198 1 {
199 2 sw0=1; sw1=1;
200 2 temp=P3&0x40;
201 2 if(temp==0)keycode=6;
202 2 temp=P3&0x80;
203 2 if(temp==0)keycode=7;
204 2 while(temp!=0xD0)
205 2 {
206 3 temp=P3&0xD0;
207 3 }
208 2 }
209 1 return keycode;
210 1
211 1
212 1 }
213
214
215 /**************************************************************************************************
216 *
217 *延时函数
218 *函数声明:void delay(uint t);
219 *函数参数:t
220 *
221 *
222 **************************************************************************************************/
223
224 void delay(uint t)
225 {
226 1 uint i,j;
227 1 for(i=0;i<t;i++)
228 1 for(j=0;j<10;j++);
229 1 }
230
231
232 /**************************************************************************************************
233 *
234 *向LCD写命令函数
235 *函数声明:void write_cmd(uchar cmd);
236 *函数参数:cmd(具体命令查看数据手册)
237 *
238 *
239 **************************************************************************************************/
240
241 void write_cmd(uchar cmd)
C51 COMPILER V7.50 T9_V1 01/22/2006 18:12:40 PAGE 5
242 {
243 1
244 1 DI=0; RW=0;
245 1 LCD_BUS=cmd;
246 1 E=1;
247 1 E=0;
248 1 }
249
250 /**************************************************************************************************
251 *
252 *向LCD写数据函数
253 *函数声明:void write_data(uchar dout);
254 *函数参数:dout为要向LCD写的数据
255 *
256 *
257 **************************************************************************************************/
258 void write_data(uchar dout)
259 {
260 1
261 1 DI=1; RW=0;
262 1 LCD_BUS=dout;
263 1 E=1;
264 1 E=0;
265 1 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -