📄 lcdkey.lst
字号:
C51 COMPILER V8.05a LCDKEY 05/14/2008 15:41:40 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE LCDKEY
OBJECT MODULE PLACED IN E:\PROJECTS\CYDLJK1\LCDKEY.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE E:\PROJECTS\CYDLJK1\LCDKEY.C DB SB OE OT(0)
line level source
1 /********************************************/
2 /* LJD-IV 液晶、键盘驱动
3 /* 作者:刘延军
4 /* 2007年10月2日
5 /********************************************/
6
7 #include <lcdkey.h>
8 #include <reg52.h>
9 /***********LCD******************************/
10
11 /*LCD显示初始化*/
12 void LcdInitialize(void)
13 {
14 1 LCD8255CONTROL=0x88;
15 1 LCD8255C=0x84;
16 1 LCD8255C=0x82;
17 1 LCD8255B=0;
18 1 }
19 /*查询ASK状态*/
20 bit QueryAsk()
21 {
22 1 if(LCD8255C&0x80)
23 1 return 1;
24 1 else
25 1 return 0;
26 1
27 1 }
28 /*延时*/
29 void LcdDelay()
30 {
31 1 unsigned char t1,t2;
32 1
33 1 for(t1=0;t1<0x0a;t1++)
34 1 for(t2=0;t2<0xff;t2++)
35 1 {
36 2 }
37 1 }
38 /*向LCD发送数据ch,握手协议ASK/ANSWER*/
39 void SendDataToLcd(unsigned char ch)
40 {
41 1 LCD8255A=ch; //命令ch送数据口
42 1 LcdDelay(); //延时
43 1 LCD8255B=0xff; //置ANSWER为高电平,锁存数据到LCD
44 1 LcdDelay(); //延时
45 1 while(QueryAsk==0)
46 1 {
47 2 //判断LCD模块是否忙于内部处理数据(ASK=1?)
48 2 }
49 1 LCD8255B=0; //ASK=1后,拉低ANSWER
50 1 while(QueryAsk==1)
51 1 {
52 2 //等待ASK=0,准备发送下一个数据
53 2 }
54 1 }
55
C51 COMPILER V8.05a LCDKEY 05/14/2008 15:41:40 PAGE 2
56 /*显示ASCII字符*/
57 void LcdDisplayAsc(unsigned char xx,unsigned char yy,unsigned char asc)
58 {
59 1 while(QueryAsk==1) ; //ASK为0后方可发送数据
60 1 SendDataToLcd(0xF1); //显示ASCII字符,操作码F1
61 1 SendDataToLcd(xx);
62 1 SendDataToLcd(yy);
63 1 SendDataToLcd(asc);
64 1 }
65
66 /*显示区位码汉字*/
67 void LcdDisplayWord(unsigned char xx,unsigned char yy,
68 unsigned char qq,unsigned char ww)
69 {
70 1 while(QueryAsk==1) ; //ASK为0后方可发送数据
71 1 SendDataToLcd(0xF0); //显示区位码汉字,操作码F0
72 1 SendDataToLcd(xx);
73 1 SendDataToLcd(yy);
74 1 SendDataToLcd(qq);
75 1 SendDataToLcd(ww);
76 1 }
77
78 /*显示浮点型数据*/
79 void LcdDisplayFloat(unsigned char xx,unsigned char yy,float fdata)
80 {
81 1 unsigned char ascArr[17],*p,x,y;
82 1
83 1 x=xx;y=yy;
84 1 p=ascArr;
85 1 sprintf(p,"%f",fdata);
86 1 for(;*p;p++)
87 1 {
88 2 LcdDisplayAsc(x++,y,*p);
89 2 }
90 1
91 1 }
92 /*显示位点阵*/
93 void LcdDisplayDotBit(unsigned char xx,unsigned char yy)
94 {
95 1 while(QueryAsk==1) ; //ASK为0后方可发送数据
96 1 SendDataToLcd(0xF2); //显示位点阵,操作码F2
97 1 SendDataToLcd(xx);
98 1 SendDataToLcd(yy);
99 1 }
100 /*显示字节点阵*/
101 void LcdDisplayDotByte(unsigned char xx,unsigned char yy,unsigned char bt)
102 {
103 1 while(QueryAsk==1) ; //ASK为0后方可发送数据
104 1 SendDataToLcd(0xF3); //显示字节点阵,操作码F3
105 1 SendDataToLcd(xx);
106 1 SendDataToLcd(yy);
107 1 SendDataToLcd(bt);
108 1 }
109 /*清屏*/
110 void LcdClear(void)
111 {
112 1 while(QueryAsk==1) ; //ASK为0后方可发送数据
113 1 SendDataToLcd(0xF4);
114 1 }
115 /*局部清屏*/
116 void LcdClearSection(unsigned char xx,unsigned char yy)
117 {
C51 COMPILER V8.05a LCDKEY 05/14/2008 15:41:40 PAGE 3
118 1 while(QueryAsk==1) ; //ASK为0后方可发送数据
119 1 SendDataToLcd(0xF0);
120 1 SendDataToLcd(xx);
121 1 SendDataToLcd(yy);
122 1 SendDataToLcd(55);
123 1 SendDataToLcd(90);
124 1
125 1 }
126 /*上移*/
127 void LcdShiftUp(void)
128 {
129 1 while(QueryAsk==1) ; //ASK为0后方可发送数据
130 1 SendDataToLcd(0xF5);
131 1 }
132
133 /*下移*/
134 void LcdShiftDown(void)
135 {
136 1 while(QueryAsk==1) ; //ASK为0后方可发送数据
137 1 SendDataToLcd(0xF6);
138 1 }
139
140 /*左移*/
141 void LcdShiftLeft(void)
142 {
143 1 while(QueryAsk==1) ; //ASK为0后方可发送数据
144 1 SendDataToLcd(0xF7);
145 1 }
146
147 /*右移*/
148 void LcdShiftRight(void)
149 {
150 1 while(QueryAsk==1) ; //ASK为0后方可发送数据
151 1 SendDataToLcd(0xF8);
152 1 }
153
154 /*************LCD END****************/
155
156
157 /*************KEY********************/
158 void KeyInitialize(void)
159 {
160 1
161 1 KEY8279COM=0xDF; //总清除命令
162 1 do
163 1 {
164 2 ACC=KEY8279COM; //读取8279状态
165 2 }while(ACC^7==1); //等待清除命令结束
166 1
167 1 KEY8279COM=0x01; //译码扫描键盘
168 1
169 1 KEY8279COM=0x32; //18分频,8279CLK接ALE(主频/6)
170 1
171 1 }
172
173 bit KeyPressed(void) /*判断FIFO有键按下*/
174 {
175 1 if( KEY8279COM&0x0f)
176 1 return 1;
177 1 else
178 1 return 0;
179 1
C51 COMPILER V8.05a LCDKEY 05/14/2008 15:41:40 PAGE 4
180 1 }
181
182 unsigned char ReadKey(void) //读取键盘码
183 {
184 1 unsigned char ScanCode,Key;
185 1
186 1 while(KeyPressed()==0) ; //无键按下等待
187 1 KEY8279COM=0x40; //读FIFO RAM的命令
188 1 ScanCode=KEY8279DATA; //取键盘数据
189 1 //ScanCode=ScanCode&0x3f; //取低六位为键盘值
190 1
191 1 switch(ScanCode)
192 1 {
193 2
194 2 case 0xd8:{Key=1;break;}
195 2 case 0xd9:{Key=2;break;}
196 2 case 0xda:{Key=3;break;}
197 2 case 0xdb:{Key=4;break;}
198 2 case 0xdc:{Key=5;break;}
199 2 case 0xd0:{Key=6;break;}
200 2 case 0xd1:{Key=7;break;}
201 2 case 0xd2:{Key=8;break;}
202 2 case 0xd3:{Key=9;break;}
203 2 case 0xd4:{Key=0;break;} //数字键
204 2
205 2 case 0xc8:{Key=0x0a;break;} //Next
206 2 case 0xc9:{Key=0x0b;break;} //Pre
207 2 case 0xca:{Key=0x0c;break;} //OK
208 2 case 0xcb:{Key=0x0d;break;} //Cancel
209 2 case 0xcc:{Key=0x0e;break;} //STOP
210 2 default : Key=0xff;
211 2 }
212 1 return Key;
213 1 }
214 /*************KEY END****************/
C51 COMPILER V8.05a LCDKEY 05/14/2008 15:41:40 PAGE 5
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
LcdClear . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
P3 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B0H 1
KeyPressed . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
LcdDelay . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
t1 . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
t2 . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0001H 1
_LcdDisplayAsc . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
xx . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
yy . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0001H 1
asc. . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0002H 1
_sprintf . . . . . . . . . . . . . . . EXTERN CODE PROC ----- -----
IE . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A8H 1
_LcdDisplayWord. . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
xx . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
yy . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0001H 1
qq . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0002H 1
ww . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0003H 1
size_t . . . . . . . . . . . . . . . . TYPEDEF ----- U_INT ----- 2
LcdShiftRight. . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
IP . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B8H 1
LcdShiftLeft . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
ReadKey. . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
ScanCode . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
Key. . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0001H 1
LcdInitialize. . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
_LcdDisplayDotByte . . . . . . . . . . PUBLIC CODE PROC 0000H -----
xx . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
yy . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0001H 1
bt . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0002H 1
LcdShiftDown . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
SCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0098H 1
TCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0088H 1
QueryAsk . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
_LcdDisplayDotBit. . . . . . . . . . . PUBLIC CODE PROC 0000H -----
xx . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
yy . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0001H 1
KeyInitialize. . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
ACC. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00E0H 1
_LcdClearSection . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
xx . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
yy . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0001H 1
LcdShiftUp . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
_SendDataToLcd . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
ch . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
T2CON. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00C8H 1
_LcdDisplayFloat . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
xx . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
yy . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0001H 1
fdata. . . . . . . . . . . . . . . . AUTO DATA FLOAT 0002H 4
ascArr . . . . . . . . . . . . . . . AUTO DATA ARRAY 0006H 17
p. . . . . . . . . . . . . . . . . . AUTO DATA PTR 0017H 3
x. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 001AH 1
y. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 001BH 1
PSW. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00D0H 1
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V8.05a LCDKEY 05/14/2008 15:41:40 PAGE 6
CODE SIZE = 763 ----
CONSTANT SIZE = 3 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 47 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -