📄 displaylcd.lst
字号:
C51 COMPILER V7.06 DISPLAYLCD 12/05/2008 17:08:25 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DISPLAYLCD
OBJECT MODULE PLACED IN DisplayLCD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DisplayLCD.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <at89x52.h>
2 #include<intrins.h>
3
4 #define uchar unsigned char
5 #define uint unsigned int
6 #define xtal 8
7
8 #define Set_CS() P2 |= (1<<0)
9 #define Set_SID() P2 |= (1<<1)
10 #define Set_SCLK() P2 |= (1<<2)
11
12 #define Clr_CS() P2 &=~(1<<0)
13 #define Clr_SID() P2 &=~(1<<1)
14 #define Clr_SCLK() P2 &=~(1<<2)
15
16
17
18 //====================================================================
19 //函数声明
20 void Delay(uint ms); //延时子程序
21 void W_1byte(uchar RW, uchar RS, uchar W_data);
22 void Write_8bits(uint W_bits);
23 void LCD_Init(void);
24
25 /********************************************************************
26 ********************************************************************/
27 //===================================================================
28 const uchar mynew1[]={" 开门鸿公司"};
29 const uchar mynew2[]={" 欢迎您!"};
30 const uchar mynew3[]={" 联系电话:"};
31 const uchar mynew4[]={"12345678"};
32 /********************************************************************
33
34 ********************************************************************/
35 void main()
36 {
37 1 uchar i = 0;
38 1 P2 = 0x00;
39 1 P2 |= (1<<6);
40 1 P2 |= (1<<7);
41 1
42 1 P2 |= (1<<5);
43 1 P2 |= 1<<3;
44 1
45 1 Clr_CS();
46 1 Clr_SID();
47 1 Clr_SCLK();
48 1 LCD_Init();
49 1 while(1)
50 1 {
51 2
52 2
53 2 _nop_();
54 2 W_1byte(0,0,0x80); //显示的地址0x80
55 2 _nop_();
C51 COMPILER V7.06 DISPLAYLCD 12/05/2008 17:08:25 PAGE 2
56 2 for(i=0;mynew1[i]!='\0';i++)
57 2 {
58 3 W_1byte(0,1,mynew1[i]);
59 3 }
60 2 W_1byte(0,0,0x90); //显示的地址0x90
61 2 for(i=0;mynew2[i]!='\0';i++)
62 2 {
63 3 W_1byte(0,1,mynew2[i]);
64 3 }
65 2 Delay(100);
66 2 _nop_();
67 2 W_1byte(0,0,0x01); //写指令
68 2 _nop_();
69 2 W_1byte(0,0,0x02); //写指令
70 2 _nop_();
71 2 W_1byte(0,0,0x80); //显示的地址0x88
72 2 for(i=0;mynew3[i]!='\0';i++)
73 2 {
74 3 W_1byte(0,1,mynew3[i]);
75 3 }
76 2 W_1byte(0,0,0x90); //显示的地址0x98
77 2 for(i=0;mynew4[i]!='\0';i++)
78 2 {
79 3 W_1byte(0,1,mynew4[i]);
80 3 }
81 2 Delay(100);
82 2 _nop_();
83 2 W_1byte(0,0,0x01); //写指令
84 2 _nop_();
85 2 W_1byte(0,0,0x02); //写指令
86 2 _nop_();
87 2 Delay(100);
88 2
89 2
90 2
91 2 }
92 1 }
93 /******************************************************************/
94 void LCD_Init(void)
95 {
96 1 uchar cmd;
97 1 cmd=0x30; //功能设置 8位数据,基本指令
98 1 W_1byte(0,0,cmd);
99 1 Delay(2);
100 1 cmd=0x0C; //显示状态 ON,游标OFF,反白OFF
101 1 W_1byte(0,0,cmd); //写指令
102 1 Delay(2);
103 1 cmd=0x01; //清除显示
104 1 W_1byte(0,0,cmd); //写指令
105 1 Delay(2);
106 1 cmd=0x02; //地址归位
107 1 W_1byte(0,0,cmd); //写指令
108 1 Delay(2);
109 1 cmd=0x80; //设置DDRAM地址
110 1 W_1byte(0,0,cmd); //写指令
111 1 Delay(2); //延时
112 1 }
113 /*******************************************************************
114 函 数 名:W_1byte
115 入口参数:RW、RS、W_data
116 出口参数:无
117 建立日期:2007年3月3日
C51 COMPILER V7.06 DISPLAYLCD 12/05/2008 17:08:25 PAGE 3
118 修改日期:
119 函数作用:写一个字节的数据到12864液晶,包括指令和数据
120 说 明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;
121 (一般RW都设为0,即只向液晶写数据,不读数据)
122 RS=1,写入的是数据;RS=0,写入的是指令;
123 一般模式:RW=0,RS=1;写数据
124 RW=0,RS=0;写指令
125 ********************************************************************/
126 void W_1byte(uchar RW, uchar RS, uchar W_data)
127 {
128 1 uint H_data,L_data,S_ID = 0xf8; //11111RWRS0
129 1 if(RW == 0)
130 1 {
131 2 S_ID &=~ 0x04;
132 2 }
133 1 else //if(RW==1)
134 1 {
135 2 S_ID |= 0X04;
136 2 }
137 1 if(RS == 0)
138 1 {
139 2 S_ID &=~ 0x02;
140 2 }
141 1 else //if(RS==1)
142 1 {
143 2 S_ID |= 0X02;
144 2 }
145 1 H_data = W_data;
146 1 H_data &= 0xf0; //屏蔽低4位的数据
147 1 L_data = W_data; //xxxx0000格式
148 1 L_data &= 0x0f; //屏蔽高4位的数据
149 1 L_data <<= 4; //xxxx0000格式
150 1 Set_CS();
151 1 Write_8bits(S_ID); //发送S_ID
152 1 Write_8bits(H_data); //发送H_data
153 1 Write_8bits(L_data); //发送L_data
154 1 Clr_CS();
155 1 }
156 /********************************************************************
157 函 数 名:Write_8bits
158 入口参数:W_bits
159 出口参数:无
160 建立日期:2007年3月3日
161 修改日期:
162 函数作用:负责串行输出8个bit位
163 说 明:
164 ********************************************************************/
165 void Write_8bits(uint W_bits)
166 {
167 1 uint i,Temp_data,j=0;
168 1 for(i=0; i<8; i++)
169 1 {
170 2 Temp_data = W_bits;
171 2 Temp_data <<= i;
172 2 if((Temp_data&0x80)==0) //bit7 is zero
173 2 {
174 3 Clr_SID();
175 3 j++;
176 3 Set_SCLK();
177 3 _nop_();
178 3 Clr_SCLK();
179 3 _nop_();
C51 COMPILER V7.06 DISPLAYLCD 12/05/2008 17:08:25 PAGE 4
180 3 Clr_SID();
181 3 _nop_();
182 3
183 3 }
184 2 else //bit7 is one
185 2 {
186 3 Set_SID();
187 3 _nop_();
188 3 Set_SCLK();
189 3 _nop_();
190 3 _nop_();
191 3 Clr_SCLK();
192 3 _nop_();
193 3 Clr_SID();
194 3 _nop_();
195 3
196 3 }
197 2 }
198 1 }
199 /********************************************************************
200 函 数 名:Delay
201 入口参数:ms
202 出口参数:无
203 建立日期:2007年3月3日
204 修改日期:
205 函数作用:毫秒级的延时程序,当晶振为12Mhz时,xtal=12;
206 说 明:
207 ********************************************************************/
208 void Delay(uint ms)
209 {
210 1 uint i;
211 1 while(ms--)
212 1 {
213 2 for(i=1;i<(uint)(xtal*143-2);i++)
214 2 ;
215 2 }
216 1 }
217 //===================================================================*/
218
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 474 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 48 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 + -