📄 lcd.lst
字号:
C51 COMPILER V7.02b LCD 10/31/2005 16:30:55 PAGE 1
C51 COMPILER V7.02b, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN .\output\lcd.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd.c DEBUG OBJECTEXTEND OBJECT(.\output\lcd.obj)
stmt level source
1 /************************************************************************************
2 * Copyright (c) 2004,西安铭朗电子科技有限责任公司
3 * All rights reserved.
4 *
5 * 文件名称: lcd.C
6 * 文件标识: none
7 * 适用器件: c8051f020
8 *
9 * 摘 要: 本文件是LCD显示子程序;使用外部22.1184MHz晶振,将跳线器JP8短接,R44空闲
10 *
11 * 当前版本:1.0
12 * 作 者:卢 阳
13 * 完成日期:2004年11月14日
14 *
15 * 历史版本:0.9
16 * 原作者 : 李林利
17 * 完成日期:2004年1月1日
18 *************************************************************************************/
19
20 /************************************************************************************/
21 // 引用外部头文件
22
23 #include "c8051F020.h"
24 #include "Const.h"
25 #include "lcd.h"
26 #include <intrins.h>
27
28 /************************************************************************************/
29
30 /************************************************************************************/
31 // 全局变量
32 /************************************************************************************/
33
34 unsigned char col,row,cbyte; /*列x,行(页)y,输出数据*/
35 bit xy; /*画线方向标志:1水平*/
36 unsigned int xdata addr;
37 unsigned char xdata *tp;
38 unsigned char xdata et;
39
40 /***********************************************************************************
41 * 函数名称:lcd_init;
42 *
43 * 函数功能描述:lcd_init;
44 *
45 * 输入参数:none;
46 *
47 * 返回数据:none;
48 *
49 * 注意: none;
50 ************************************************************************************/
51
52 void lcd_init(void)
53 {
54 1
55 1 DISABLE_INTERRUPTS;//EA=0
C51 COMPILER V7.02b LCD 10/31/2005 16:30:55 PAGE 2
56 1
57 1 addr=0x980c;
58 1
59 1 lcd_wrct(0xc0);
60 1 lcd_wrct(0x40); // COLOUM ADDRESS
61 1 lcd_wrct(0xb8); // ROW ADDRESS
62 1 lcd_wrct(0x3f);
63 1
64 1 ENABLE_INTERRUPTS; //EA=1
65 1
66 1 }
67
68 /***********************************************************************************
69 * 函数名称:checkbusy;
70 *
71 * 函数功能描述: 判断LCD忙等待;
72 *
73 * 输入参数:none;
74 *
75 * 返回数据:none;
76 *
77 * 注意: none;
78 ************************************************************************************/
79
80 void checkbusy(void)
81 {
82 1 addr=0x980e;
83 1
84 1 _nop_();_nop_();
85 1 _nop_();_nop_();
86 1
87 1 do
88 1 {
89 2 tp=addr;
90 2 }while((*tp&0x80)==0x80);
91 1
92 1 addr=0x180f;
93 1 }
94
95 /***********************************************************************************
96 * 函数名称:lcd_wrct;
97 *
98 * 函数功能描述: 向LCD写命令;
99 *
100 * 输入参数:none;
101 *
102 * 返回数据:none;
103 *
104 * 注意: none;
105 ************************************************************************************/
106
107 void lcd_wrct(unsigned char dd)
108 {
109 1 DISABLE_INTERRUPTS;
110 1
111 1 addr=0x980c;
112 1 tp=addr;
113 1 *tp=dd;
114 1
115 1 addr=0x180c;
116 1
117 1 _nop_();_nop_();
C51 COMPILER V7.02b LCD 10/31/2005 16:30:55 PAGE 3
118 1 _nop_();_nop_();
119 1
120 1 addr=0x180d;
121 1
122 1 ENABLE_INTERRUPTS;
123 1 }
124
125 /***********************************************************************************
126 * 函数名称:set_xy;
127 *
128 * 函数功能描述: LCD读写位置变换;
129 *
130 * 输入参数:unsigned char类型坐标x,y;
131 *
132 * 返回数据:none;
133 *
134 * 注意: none;
135 ************************************************************************************/
136
137 void set_xy(unsigned char x,unsigned char y)
138 {
139 1 DISABLE_INTERRUPTS;
140 1
141 1 checkbusy();
142 1
143 1 y&=0x07;
144 1 y|=0xB8;
145 1 lcd_wrct(y);
146 1
147 1 x&=0x3F;
148 1 x|=0x40;
149 1 lcd_wrct(x);
150 1
151 1 ENABLE_INTERRUPTS;
152 1 }
153
154 /***********************************************************************************
155 * 函数名称:lcd_wrda;
156 *
157 * 函数功能描述:向LCD写数据;
158 *
159 * 输入参数:unsigned char类型坐标x,y, unsigned char类型写入数据dd;
160 *
161 * 返回数据:none;
162 *
163 * 注意: none;
164 ************************************************************************************/
165
166 void lcd_wrda(unsigned char x,unsigned char y,unsigned char dd)
167 {
168 1
169 1 DISABLE_INTERRUPTS;
170 1 set_xy(x,y);
171 1 checkbusy();
172 1 if(x<64)
173 1 {
174 2 addr=0x9805;
175 2 tp=0x9805;
176 2 }
177 1 else
178 1 {
179 2 addr=0x9809;
C51 COMPILER V7.02b LCD 10/31/2005 16:30:55 PAGE 4
180 2 tp=0x9809;
181 2 }
182 1
183 1 *tp=dd;
184 1
185 1 addr&=0x1fff;
186 1
187 1 _nop_();_nop_();
188 1 _nop_();_nop_();
189 1
190 1 addr|=0x8000;
191 1
192 1 ENABLE_INTERRUPTS;
193 1 }
194
195 /***********************************************************************************
196 * 函数名称:lcd_rdda;
197 *
198 * 函数功能描述:从LCD中读数据;
199 *
200 * 输入参数:unsigned char类型坐标x,y,
201 *
202 * 返回数据:unsigned char类型读出数据;
203 *
204 * 注意: none;
205 ************************************************************************************/
206
207 unsigned char lcd_rdda(unsigned char x,unsigned char y)
208 {
209 1 unsigned char xdata readdata;
210 1
211 1 set_xy(x,y);
212 1 checkbusy();
213 1 if(x<64)
214 1 {
215 2 addr=0x9807;
216 2 tp=addr;
217 2 addr=0x1805;
218 2 }
219 1 else
220 1 {
221 2 addr=0x980b;
222 2 tp=addr;
223 2 addr=0x1809;
224 2 }
225 1 readdata=*tp;
226 1 checkbusy();
227 1 if(x<64)
228 1 {
229 2 addr=0x9807;
230 2 tp=addr;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -