📄 lcddev.lst
字号:
C51 COMPILER V8.02 LCDDEV 04/21/2009 22:23:54 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCDDEV
OBJECT MODULE PLACED IN lcddev.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe lcddev.c DB OE
line level source
1 #include "lcddev.h"
2 #include "ctypedef.h"
3
4 //初始化8051
5 void Port_IO_Init()
6 {
7 1 XBR0 = 0x00;
8 1 XBR1 = 0x00;
9 1 XBR2 = 0x40; //io交叉配置允许
10 1 P0MDOUT = 0xff;
11 1 P3MDOUT = 0xff;
12 1 }
13
14 void Oscillator_Init() //选用内部振荡器
15 {
16 1 OSCICN = 0x05;
17 1 }
18
19 void SYSCLK_Init (void)
20 {
21 1 int i;
22 1 OSCXCN = 0x67; // 外部晶振,大于6.7MHz
23 1 for (i=0; i < 2000; i++) ; // 等待起振
24 1 while (!(OSCXCN & 0x80)) ; // 检测是否起振
25 1 OSCICN = 0x88; // 设置为系统时钟为外部晶振,且开启时钟丢失检测
26 1 }
27
28 // Initialization function for device,
29 // Call Init_Device() from your main program
30 void Init_Device(void)
31 {
32 1 SYSCLK_Init ();
33 1 //Oscillator_Init();
34 1 Port_IO_Init();
35 1 }
36
37 /*
38
39 */
40 void Delay(uchar t)
41 {
42 1 while(t--);
43 1 }
44
45
46 /*--------------------------------
47 函数名:void LCD_ChkBusy(void);
48 函数功能:检查LCD是否忙
49 使用说明:
50 使用说明:
51 状态字格式:bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
52 状态字说明:
53 bit7: 存储器读写状态 0 准备好 1 忙
54 bit6: 扫描状态 0 准备好 1 忙
55 bit5: 睡眠模式 0 正常 1 睡眠
C51 COMPILER V8.02 LCDDEV 04/21/2009 22:23:54 PAGE 2
56 bit4 bit3: 不用
57 bit2: 唤醒状态位
58 bit1: KS状态
59 bit0: TP状态
60
61
62 -----------------------------------*/
63
64 void Lcd_ChkBusy(void)
65 {
66 1 uchar temp;
67 1 do{
68 2 //LcdDataPort_InPut();
69 2 RS = 0;
70 2 CS = 1;
71 2 WR = 1;
72 2 RD = 1;
73 2 Delay(2);
74 2 RS = 1;
75 2 Delay(2);
76 2 CS = 0;
77 2 Delay(5);
78 2 RD = 0;//开始读状态
79 2 temp = Lcd_DataPort;
80 2 Delay(10);
81 2 RD = 1;
82 2 Delay(2);
83 2 CS = 1;
84 2 RS = 0;
85 2 }while(temp & 0xC0);
86 1 }
87
88
89 /*void Lcd_writedatatocmd(uchar CmdReg,uchar udata) ///写数据到到寄存器
90 {
91 CS = 0;
92 RS = 1;
93 Delay(2);//
94 WR = 0;
95 Lcd_DataPort = CmdReg;
96 Delay(10);// 最小20ns
97 WR = 1;// 完成写寄存器
98 Delay(2);
99 CS = 1;
100 RS = 0;
101 Delay(20);
102 CS = 0;
103 Delay(10);//
104 WR = 0;
105 Lcd_DataPort = udata;
106 Delay(30);//最小50ns
107 WR = 1;
108 CS = 1;
109 RS = 1;
110 }*/
111
112
113 void Lcd_writecmd(uchar CmdReg) //写命令
114 {
115 1 CS = 0;
116 1 RS = 1;
117 1 WR = 0;
C51 COMPILER V8.02 LCDDEV 04/21/2009 22:23:54 PAGE 3
118 1 Lcd_DataPort = CmdReg;
119 1 Delay(10);// 最小20ns
120 1 WR = 1;// 完成写寄存器
121 1 Delay(2);
122 1 CS = 1;
123 1 RS = 0;
124 1 }
125 void Lcd_writedata(uchar DatValue)//写数据
126 {
127 1 CS = 0;
128 1 RS = 0;
129 1 Delay(10);//
130 1 WR = 0;
131 1 Lcd_DataPort = DatValue;
132 1 Delay(30);//最小50ns
133 1 WR = 1;
134 1 CS = 1;
135 1 RS = 1;
136 1 }
137 void Lcd_writedatatocmd(uchar CmdReg,uchar udata) ///写数据到到寄存器
138 {
139 1 Lcd_writecmd(CmdReg);
140 1 Lcd_writedata(udata);
141 1 }
142
143 /*
144 函数名:
145 */
146 /*uchar Lcd_readcmd(void)
147 {
148 uchar CmdReg;
149 LcdDataPort_InPut();
150 CS = 0;
151 RS = 0;
152 WR = 1;
153 RD = 0;
154 CmdReg = Lcd_DataPort;
155 Delay(4);
156 RD = 1;
157 CS = 1;
158 return CmdReg;
159 }
160 */
161
162
163 /*
164 函数名:
165
166 */
167 uchar Lcd_readdatafromcmd(uchar CmdReg)
168 {
169 1 uchar udata;
170 1 CS = 0;
171 1 RS = 1;
172 1 Delay(2);
173 1 WR = 0;
174 1 Lcd_DataPort = CmdReg;
175 1 Delay(10);//完成写寄存器
176 1 WR = 1;
177 1 Delay(2);
178 1 CS = 1;
179 1 RS = 0;
C51 COMPILER V8.02 LCDDEV 04/21/2009 22:23:54 PAGE 4
180 1 Delay(200);
181 1 CS = 0;
182 1 Delay(5);
183 1 RD = 0;
184 1 udata = Lcd_DataPort;
185 1 Delay(10);//完成读寄存器
186 1 RD = 1;
187 1 CS = 1;
188 1 RS = 1;
189 1 return udata;
190 1 }
191
192
193 /*
194 uchar Lcd_readdata(void)
195 {
196 uchar udata;
197 //Lcd_ChkBusy();
198 LcdDataPort_InPut(); //
199 CS = 0;
200 RS = 0;//读数据
201 WR = 1;
202 RD = 1;
203 Delay(5);
204 RD = 0;
205 udata = Lcd_DataPort;
206 Delay(10);//
207 RD = 1;
208 RS = 1;
209 CS = 1;
210 return udata;
211 }
212 */
213
214 //开显示
215 void LCD_ON(void)
216 {
217 1 uchar temp;
218 1 temp = Lcd_readdatafromcmd(WLCR);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -