📄 hw_disp.lst
字号:
C51 COMPILER V7.50 HW_DISP 11/10/2008 14:21:37 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE HW_DISP
OBJECT MODULE PLACED IN HW_Disp.OBJ
COMPILER INVOKED BY: E:\II\Software\Keil\C51\BIN\C51.EXE HW_Disp.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 ****************************************************
3
4
5 ****************************************************
6 */
7
8 #include <reg52.H>
9
10 #include "Typedef.H"
11 #include "UserDef.H"
12
13 #include "font.h"
14
15
16 /* 端口定义 */
17 #define DISPDATAPORT P0 //数据端口
18 sbit Pin_CS1 = P2^1; //片选
19 sbit Pin_CS2 = P2^0; //片选
20 sbit Pin_RS = P2^2; //指令、数据选择(0=指令;1=数据)
21 sbit Pin_RW = P2^3; //读写选择(0=写,1=读)
22 sbit Pin_E = P2^4; //锁存(下降沿有效)
23 sbit Pin_RST = P2^5; //锁存(下降沿有效)
24
25
26 /* 私有全局变量 */
27 static INT8U CurRow = 0;
28 static INT8U CurCol = 0;
29 static INT8U CurFont = 0;
30
31
32
33 /***************************************
34
35 LCD忙等待
36
37 ****************************************/
38 static void Busy(void)
39 {
40 1 INT8U bf;
41 1
42 1 Pin_E = 0;
43 1 DISPDATAPORT = 0xFF; //使端口为输入状态
44 1 Pin_RW = 1; //读
45 1 Pin_RS = 0; //指令
46 1
47 1 while (1)
48 1 {
49 2 Pin_E = 1;
50 2 bf = DISPDATAPORT;
51 2 Pin_E = 0;
52 2 if ((bf & 0x80) == 0)
53 2 break;
54 2 }
55 1 }
C51 COMPILER V7.50 HW_DISP 11/10/2008 14:21:37 PAGE 2
56
57 /***************************************
58
59 LCD数据写
60
61 ****************************************/
62 static void LCD_Data(INT8U Data)
63 {
64 1 Busy();
65 1
66 1 Pin_E = 0;
67 1 Pin_RW = 0; //写
68 1 Pin_RS = 1; //数据
69 1
70 1 Pin_E = 1;
71 1
72 1 DISPDATAPORT = Data;
73 1
74 1 Pin_E = 0;
75 1 }
76
77 /***************************************
78
79 LCD命令写
80
81 ****************************************/
82 static void LCD_Cmd(INT8U cmd)
83 {
84 1 Busy();
85 1
86 1 Pin_E = 0;
87 1 Pin_RW = 0; //写
88 1 Pin_RS = 0; //指令
89 1
90 1 Pin_E = 1;
91 1
92 1 DISPDATAPORT = cmd;
93 1
94 1 Pin_E = 0;
95 1 }
96
97 /***************************************
98
99
100
101 ****************************************/
102 static void LCD_Disp_Pattern(INT8U img,INT8U len)
103 {
104 1 INT8U col;
105 1
106 1 col = CurCol;
107 1 if (col<64)
108 1 Pin_CS1 = 1;
109 1 else
110 1 {
111 2 col -= 64;
112 2 Pin_CS2 = 1;
113 2 }
114 1
115 1 LCD_Cmd(0xB8|CurRow);
116 1 LCD_Cmd(0x40|col);
117 1
C51 COMPILER V7.50 HW_DISP 11/10/2008 14:21:37 PAGE 3
118 1 while (len != 0)
119 1 {
120 2 LCD_Data(img);
121 2 len --;
122 2 col ++;
123 2 CurCol ++;
124 2 if (col>=64)
125 2 {
126 3 Pin_CS1 = 0;
127 3 Pin_CS2 = 1;
128 3 LCD_Cmd(0xB8|CurRow);
129 3 LCD_Cmd(0x40|0);
130 3 col -= 64;
131 3 }
132 2 }
133 1 Pin_CS1 = 0;
134 1 Pin_CS2 = 0;
135 1 }
136
137 void DispXYSet(INT8U row,INT8U col)
138 {
139 1 CurRow = row;
140 1 CurCol = col;
141 1 }
142
143 void DispFont(INT8U font)
144 {
145 1 CurFont = font;
146 1 }
147
148
149 /***************************************
150
151
152
153 ****************************************/
154 void LCD_Disp_Pic(INT8U * img,INT8U len)
155 {
156 1 INT8U col;
157 1
158 1 col =CurCol;
159 1
160 1 if (col<64)
161 1 Pin_CS1 = 1;
162 1 else
163 1 {
164 2 col -= 64;
165 2 Pin_CS2 = 1;
166 2 }
167 1 LCD_Cmd(0xB8|CurRow);
168 1 LCD_Cmd(0x40|col);
169 1
170 1 do
171 1 {
172 2 LCD_Data(*img);
173 2 len --;
174 2 col ++;
175 2 CurCol ++;
176 2 img ++;
177 2 if (col>=64)
178 2 {
179 3 Pin_CS1 = 0;
C51 COMPILER V7.50 HW_DISP 11/10/2008 14:21:37 PAGE 4
180 3 Pin_CS2 = 1;
181 3 LCD_Cmd(0xB8|CurRow);
182 3 LCD_Cmd(0x40|0);
183 3 col -= 64;
184 3 }
185 2 } while (len != 0);
186 1 Pin_CS1 = 0;
187 1 Pin_CS2 = 0;
188 1 }
189
190
191 /***************************************
192
193 获取整数的长度
194
195 ****************************************/
196 static INT8U GetIntLen(INT32U val)
197 {
198 1 INT8U len;
199 1
200 1 len = 0;
201 1 while (val != 0)
202 1 {
203 2 val /= 10;
204 2 len ++;
205 2 }
206 1
207 1 if (len == 0)
208 1 len = 1;
209 1
210 1 return len;
211 1 }
212
213
214
215
216 /***************************************
217
218 显示一个字符
219 入口参数:字符,显示位置,是否闪烁
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -