📄 lcd.lst
字号:
C51 COMPILER V8.02 LCD 01/30/2008 15:09:49 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN LCD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD.c LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 //*************************************************************************
2 //**模 块 名:LCD.c
3 //**说 明:液晶功能函数
4 //*************************************************************************
5 #include <AT89x55.H>
6 #include <INTRINS.H>
7 #include "main.h"
8 //*************************************************************************
9 //**函 数 名:Write_Com1
10 //**输 入:
11 //** cmdcode:命令
12 //**输 出:无
13 //**功能描述:向液晶左屏写命令
14 //*************************************************************************
15 void Write_Com1(uchar cmdcode)
16 {
17 1 //向液晶送命令
18 1 WR_CMD1=cmdcode;
19 1 //判断液晶是否忙
20 1 while(RD_CMD1>0x7f);
21 1 }
22 //*************************************************************************
23 //**函 数 名:Write_Com2
24 //**输 入:
25 //** cmdcode:命令
26 //**输 出:无
27 //**功能描述:
28 //** 1.向液晶右屏写命令
29 //*************************************************************************
30 void Write_Com2(uchar cmdcode)
31 {
32 1 //向液晶送命令
33 1 WR_CMD2=cmdcode;
34 1 //判断液晶是否忙
35 1 while(RD_CMD2>0x7f);
36 1 }
37 //*************************************************************************
38 //**函 数 名:Write_Data1
39 //**输 入:
40 //** Dsipdata:数据
41 //**输 出:无
42 //**功能描述:
43 //** 1.向液晶左屏写数据
44 //*************************************************************************
45 void Write_Data1(uchar Dispdata)
46 {
47 1 //向液晶送数据
48 1 WR_DAT1=Dispdata;
49 1 //判断液晶是否忙
50 1 while(RD_CMD1>0x7f);
51 1 }
52 //*************************************************************************
53 //**函 数 名:Write_Data2
54 //**输 入:
55 //** Dsipdata:数据
C51 COMPILER V8.02 LCD 01/30/2008 15:09:49 PAGE 2
56 //**输 出:无
57 //**功能描述:
58 //** 1.向液晶右屏写数据
59 //*************************************************************************
60 void Write_Data2(uchar Dispdata)
61 {
62 1 //向液晶送数据
63 1 WR_DAT2=Dispdata;
64 1 //判断液晶是否忙
65 1 while(RD_CMD2>0x7f);
66 1 }
67 //*************************************************************************
68 //**函 数 名:Init_LCD
69 //**输 入:无
70 //**输 出:无
71 //**功能描述:
72 //** 1.液晶初始化
73 //*************************************************************************
74 void Init_LCD()
75 {
76 1 //关左屏
77 1 Write_Com1(Disp_Off);
78 1 //关右屏
79 1 Write_Com2(Disp_Off);
80 1 //左屏页地址清0
81 1 Write_Com1(Page_Add+0);
82 1 //右屏页地址清0
83 1 Write_Com2(Page_Add+0);
84 1 //左屏起始行清0
85 1 Write_Com1(Start_Line+0);
86 1 //右屏起始行清0
87 1 Write_Com2(Start_Line+0);
88 1 //左屏列地址清0
89 1 Write_Com1(Col_Add+0);
90 1 //右屏列地址清0
91 1 Write_Com2(Col_Add+0);
92 1 //开左屏
93 1 Write_Com1(Disp_On);
94 1 //开右屏
95 1 Write_Com2(Disp_On);
96 1 }
97 //*************************************************************************
98 //**函 数 名:Clr_Scr
99 //**输 入:
100 //** DispStyle:清屏的类型
101 //** DispStyle=1 向液晶送0x00
102 //** DispStyle=2 向液晶送0xFF
103 //**输 出:无
104 //**功能描述:
105 //** 1.液晶清屏
106 //*************************************************************************
107 void Clr_Scr(uchar DispStyle)
108 {
109 1 //循环变量
110 1 uchar xdata j,k;
111 1 //初始化液晶
112 1 Init_LCD();
113 1 Write_Com1(Page_Add + 0);
114 1 Write_Com1(Col_Add + 0);
115 1 //循环向液晶送数
116 1 for(k = 0;k < 8;k++)
117 1 {
C51 COMPILER V8.02 LCD 01/30/2008 15:09:49 PAGE 3
118 2 Write_Com1(Page_Add + k);
119 2 for(j = 0;j < 64;j++ )
120 2 {
121 3 Write_Data1(DispStyle);
122 3 }
123 2 }
124 1 Write_Com2(Page_Add + 0);
125 1 Write_Com2(Col_Add + 0);
126 1 //循环向液晶送数
127 1 for(k = 0;k < 8;k++)
128 1 {
129 2 Write_Com2(Page_Add + k);
130 2 for(j = 0;j < 64;j++ )
131 2 {
132 3 Write_Data2(DispStyle);
133 3 }
134 2 }
135 1 }
136 //*************************************************************************
137 //**函 数 名:HzDisp1216
138 //**输 入:
139 //** pag :汉字显示的行地址
140 //** col :汉字显示的列地址
141 //** *hzk :汉字数组的首地址
142 //** fan :是否反白显示
143 //**输 出:无
144 //**功能描述:
145 //** 1.在指定位置显示12*16点阵的汉字
146 //*************************************************************************
147 void HzDisp1216(uchar pag,uchar col, uchar code *hzk,bit fan)
148 {
149 1 //循环变量
150 1 uchar xdata j,i;
151 1 //临时变量
152 1 uchar xdata temp;
153 1 //是否跨区
154 1 bit flag;
155 1 temp = col;
156 1 for(j = 0;j < 2;j++)
157 1 {
158 2 col = temp;
159 2 Write_Com1(Page_Add + pag + j);
160 2 Write_Com2(Page_Add + pag + j);
161 2 if(col<64)
162 2 {
163 3 flag=0;
164 3 Write_Com1(Col_Add + col);
165 3 }
166 2 else
167 2 {
168 3 flag=1;
169 3 Write_Com2(Col_Add + col - 64);
170 3 }
171 2 for(i = 0;i < 12;i++)
172 2 {
173 3 if(flag == 1)
174 3 {
175 4 if(fan) Write_Data2(~hzk[12 * j + i]);
176 4 else
177 4 Write_Data2(hzk[12 * j + i]);
178 4 }
179 3 if(flag == 0)
C51 COMPILER V8.02 LCD 01/30/2008 15:09:49 PAGE 4
180 3 {
181 4 if(fan) Write_Data1(~hzk[12 * j + i]);
182 4 else
183 4 Write_Data1(hzk[12 * j + i]);
184 4 }
185 3 col++;
186 3 if((col >= 64) && (flag == 0))
187 3 {
188 4 flag = 1;
189 4 Write_Com2(Col_Add + col - 64);
190 4 }
191 3 }
192 2 }
193 1 }
194 //*************************************************************************
195 //**函 数 名:AscDisp68
196 //**输 入:
197 //** pag :汉字显示的行地址
198 //** col :汉字显示的列地址
199 //** *hzk :汉字数组的首地址
200 //** fan :是否反白显示
201 //**输 出:无
202 //**功能描述:
203 //** 1.显示8*16的符号
204 //*************************************************************************
205 void Asc_Disp68(uchar pag,uchar col, uchar code *hzk, bit fan)
206 {
207 1 //循环变量
208 1 uchar xdata i;
209 1 //临时变量
210 1 uchar xdata temp;
211 1 //是否跨区
212 1 bit flag;
213 1 temp = col;
214 1 col = temp;
215 1 //设置字符显示的行地址(左屏)
216 1 Write_Com1(Page_Add + pag);
217 1 //设置字符显示的行地址(右屏)
218 1 Write_Com2(Page_Add + pag);
219 1 if(col < 64)
220 1 {
221 2 //flag=0,表示此字符在左屏显示
222 2 flag = 0;
223 2 //列地址小于64设置左屏的列地址
224 2 Write_Com1(Col_Add + col);
225 2 }
226 1 else
227 1 {
228 2 flag = 1;
229 2 //列地址小于64设置左屏的列地址
230 2 Write_Com2(Col_Add + col - 64);
231 2 }
232 1 //循环6次向液晶送
233 1 for(i = 0;i < 6;i++)
234 1 {
235 2 if(flag == 1)
236 2 {
237 3 if(fan)
238 3 //fan为1表示反白显示
239 3 Write_Data2(~hzk[i]);
240 3 else
241 3 //fan为0表示正常显示
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -