📄 lcddisplay.lst
字号:
C51 COMPILER V8.05a LCDDISPLAY 09/21/2007 13:53:38 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE LCDDISPLAY
OBJECT MODULE PLACED IN LCDDisplay.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCDDisplay.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #include <stdio.h>
3 #include <intrins.h>
4 #include <absacc.h>
5 #define uchar unsigned char
6 #define uint unsigned int
7
8
9
10 uchar com; //命令字
11 uchar dat; //数据字
12
13
14 sbit CSA = P1^4; //*cs-1*/
15 sbit CSB = P1^3; //*cs-2*/
16 sbit RS = P1^2; //*rs*/
17 sbit RW = P1^1; //*r/w*/
18 sbit EN = P1^0; //*enable*/
19
20
21 void ReadStatus() //*判断"忙"状态*/
22 {
23 1 uchar busy;
24 1 uchar temp;
25 1 RS = 0; //*读时序控制1; RS=0表示进行的是指令操作*/
26 1 RW = 1; //*读时序控制2; RW=1表示进行的是读操作*/
27 1 do
28 1 {
29 2 P0 = 0xff; //*P0作输入*/
30 2 EN = 1; //*读时序控制3; 使能信号置高*/
31 2 busy = P0; //*P0代表端口1的内容*/
32 2 EN = 0; //*读时序控制4; 使能信号置低*/
33 2 temp=busy&0x80;
34 2 }while (temp!=0);
35 1 }
36
37
38 void WrLeftCom() //*左屏写命令*/
39 {
40 1 CSA = 0; //选中左屏,0有效;
41 1 CSB = 1; //右屏不被选中,1无效;
42 1 ReadStatus();
43 1 RS = 0;
44 1 RW = 0;
45 1 P0 = com; //*com表示命令的内容*/
46 1 EN = 1;
47 1 EN = 0;
48 1 }
49
50
51 void WrRightCom() //*写右屏命令*/
52 {
53 1 CSA = 1;
54 1 CSB = 0;
55 1 ReadStatus();
C51 COMPILER V8.05a LCDDISPLAY 09/21/2007 13:53:38 PAGE 2
56 1 RS = 0;
57 1 RW = 0;
58 1 P0 = com;
59 1 EN = 1;
60 1 EN = 0;
61 1 }
62
63
64 void WrLeftData() //*左屏写数据*/
65 {
66 1 CSA = 0;
67 1 CSB = 1;
68 1 ReadStatus();
69 1 RS = 1;
70 1 RW = 0;
71 1 P0 = dat;
72 1 EN = 1;
73 1 EN = 0;
74 1 }
75
76
77 uchar RdLeftData() //读数据
78 {
79 1 uchar dat;
80 1
81 1 CSA = 0;
82 1 CSB = 1;
83 1 ReadStatus();
84 1
85 1 RS = 1; //*读时序控制1; RS=1表示进行的是数据操作*/
86 1 RW = 1; //*读时序控制2; RW=1表示进行的是读操作*/
87 1
88 1 P0 = 0xff; //*P0作输入*/
89 1 EN = 1; //*读时序控制3; 使能信号置高*/
90 1 dat = P0;
91 1 EN = 0; //*读时序控制4; 使能信号置低*/
92 1
93 1 return(dat);
94 1 }
95
96
97 void WrRightData() //*右屏写数据*/
98 {
99 1 CSA = 1;
100 1 CSB = 0;
101 1 ReadStatus();
102 1 RS = 1;
103 1 RW = 0;
104 1 P0 = dat;
105 1 EN = 1;
106 1 EN = 0;
107 1 }
108
109
110 uchar RdRightData() //读数据
111 {
112 1 uchar dat;
113 1
114 1 CSA = 1;
115 1 CSB = 0;
116 1 ReadStatus();
117 1
C51 COMPILER V8.05a LCDDISPLAY 09/21/2007 13:53:38 PAGE 3
118 1 RS = 1; //*读时序控制1; RS=1表示进行的是数据操作*/
119 1 RW = 1; //*读时序控制2; RW=1表示进行的是读操作*/
120 1
121 1 P0 = 0xff; //*P0作输入*/
122 1 EN = 1; //*读时序控制3; 使能信号置高*/
123 1 dat = P0;
124 1 EN = 0; //*读时序控制4; 使能信号置低*/
125 1
126 1 return(dat);
127 1 }
128
129
130 void ClrFullScr() //清全屏
131 {
132 1 uchar page=0;
133 1 uchar column=0;
134 1
135 1 for(page=0;page<8;page++)
136 1 {
137 2 com =(0xb8 + page); //页地址设置
138 2 WrLeftCom();
139 2 WrRightCom();
140 2
141 2 com =0x40; //列地址设置
142 2 WrLeftCom();
143 2 WrRightCom();
144 2
145 2 for( column=0; column<64; column++) //RAM清"0"
146 2 {
147 3 dat =0x00; //由于列地址在操作完后会自动加1,
148 3 //因此只用设置初地址就行了
149 3 WrLeftData();
150 3 WrRightData(); //RAM清0就是在所在单元写上数据0
151 3 }
152 2 }
153 1 }
154
155
156 void LCDInit() //液晶初始化
157 {
158 1 com =0xc0; //显示从第0行开始
159 1 WrLeftCom();
160 1 WrRightCom();
161 1
162 1 com =0x3F ; //液晶显示开关打开
163 1 WrLeftCom();
164 1 WrRightCom();
165 1
166 1 ClrFullScr(); //清全屏
167 1 }
168
169
170 void Display88Dot(uchar Row, uchar Col, uchar* Lib, uint Addr) //Display a 8*8 dot array;
171 { //Row:0~7 Col:0~15
172 1 uchar OffsetCol = 0;
173 1
174 1 Addr <<= 3;
175 1
176 1 if((Row>7)||(Col>15)) //防止越界
177 1 return;
178 1 else if(Col>7)
179 1 {
C51 COMPILER V8.05a LCDDISPLAY 09/21/2007 13:53:38 PAGE 4
180 2 com = 0xb8 + Row;
181 2 WrRightCom();
182 2
183 2 Col -= 8;
184 2 Col <<= 3;
185 2 com = 0x40 + Col;
186 2 WrRightCom();
187 2
188 2 for(OffsetCol=0; OffsetCol<8; OffsetCol++)
189 2 {
190 3 dat = Lib[OffsetCol + Addr];
191 3 WrRightData();
192 3 }
193 2 }
194 1 else
195 1 {
196 2 com = 0xb8 + Row;
197 2 WrLeftCom();
198 2
199 2 Col <<= 3;
200 2 com = 0x40 + Col;
201 2 WrLeftCom();
202 2
203 2 for(OffsetCol=0; OffsetCol<8; OffsetCol++)
204 2 {
205 3 dat = Lib[OffsetCol + Addr];
206 3 WrLeftData();
207 3 }
208 2 }
209 1 }
210
211
212 main()
213 {
214 1 LCDInit();
215 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 337 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 7
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 + -