?? lcd_040.lst
字號(hào):
C51 COMPILER V7.50 LCD_040 10/08/2006 13:29:10 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LCD_040
OBJECT MODULE PLACED IN lcd_040.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd_040.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "C8051F040.h"
2 #include <intrins.h>
3
4 #define uchar unsigned char
5 #define uint unsigned int
6
7 void writelcd(uchar spi_data);
8 void writecode(uchar ins);
9 void writedata(uchar d);
10 void lcdinit();
11 void lcdchar (void);
12 void Oscillator_Init();
13 void port_init();
14
15 sbit spi_mosi=P0^4;
16 sbit SPICLK=P0^2;
17 sbit LcdCs=P1^1;
18
19 uchar xdata virt_port;
20 uchar xdata discode;//開關(guān)顯示、光標(biāo)、閃爍的命令字暫存單元
21
22 signed char xdata tab1[16]={0x20,0x20,0x42,0x54,0x20,0x46,0x33,0x34,0x30,0x20,0x56,0x31,0x2e,0x30
23 ,0x20,0x20};
24 unsigned char xdata Netdata[16]={0x77,0x77,0x77,0x2e,0x78,0x68,0x6c,0x2e,0x63,0x6f,
25 0x6d,0x2e,0x63,0x6e,0x20,0x20};
26
27 /****************************************************************************
28 *
29 *主函數(shù)中執(zhí)行顯示
30 *****************************************************************************/
31 void main()
32 {
33 1 WDTCN = 0xDE; // 關(guān)看門狗定時(shí)器
34 1 WDTCN = 0xAD;
35 1 Oscillator_Init(); //時(shí)鐘初始化
36 1 port_init(); //端口初始化
37 1 // lcdinit(); //液晶初始化
38 1
39 1 while(1)
40 1 {
41 2 // LcdCs=1;
42 2 // SPICLK=1;
43 2 // spi_mosi=1;
44 2 writelcd(0x03);
45 2 //lcdchar(); //顯示字符
46 2 }
47 1 }
48 /*****************************************************************************
49 *
50 *初始化時(shí)鐘選擇外22.1184Mhz 晶振做
51 ******************************************************************************/
52 void Oscillator_Init()
53 {
54 1 int i = 0;
55 1 SFRPAGE = CONFIG_PAGE;
C51 COMPILER V7.50 LCD_040 10/08/2006 13:29:10 PAGE 2
56 1 OSCXCN = 0x67;
57 1 for (i = 0; i < 3000; i++); // 初始化時(shí)等待1毫秒
58 1 while ((OSCXCN & 0x80) == 0);
59 1 CLKSEL = 0x01;
60 1 }
61 /*****************************************************************************
62 *
63 *向LV595寫數(shù)據(jù)以SPI方式
64 *****************************************************************************/
65 void writelcd(uchar spi_data)
66 {
67 1 uchar xdata i;
68 1
69 1 LcdCs=0;
70 1 for(i=0;i<8;i++)
71 1 {
72 2 SPICLK=0;
73 2 if(spi_data&0x80)
74 2 spi_mosi=1;
75 2 else
76 2 spi_mosi=0;
77 2 spi_data<<=1;
78 2 SPICLK=1;
79 2 SPICLK=0;
80 2 }
81 1 LcdCs=1;
82 1 }
83
84 /*****************************************************************************
85 *
86 * 向液晶控制模塊寫命令
87 ******************************************************************************/
88 void writecode(uchar ins)
89 {
90 1 uchar xdata t;
91 1 uint xdata j;
92 1
93 1 for(j=0;j<500;j++);
94 1 virt_port|=ins&0xf0; //取高字節(jié)向1602寫數(shù)據(jù)
95 1 writelcd(virt_port); //先寫高4位后再寫低4位 這是在選擇四個(gè)數(shù)據(jù)線的時(shí)候
96 1
97 1 virt_port|=0x08;
98 1 writelcd(virt_port); //使能E腳為高電平
99 1 virt_port&=~0x08;
100 1 writelcd(virt_port); //使能E腳為低電平
101 1
102 1 t=ins<<4;
103 1 virt_port|=t&0xf0; //取低字節(jié)向1602寫數(shù)據(jù)
104 1 writelcd(virt_port);
105 1 virt_port|=0x08; //使能E腳為高電平
106 1 writelcd(virt_port);
107 1 virt_port&=~0x08; //使能E腳為低電平
108 1 writelcd(virt_port);
109 1 virt_port=0;
110 1 writelcd(virt_port);
111 1 }
112 /******************************************************************************
113 *
114 * 寫數(shù)據(jù)到1602控制模塊
115 *******************************************************************************/
116 void writedata(uchar d)
117 {
C51 COMPILER V7.50 LCD_040 10/08/2006 13:29:10 PAGE 3
118 1 uchar xdata i,t;
119 1 uint xdata j;
120 1
121 1 for(j=0;j<500;j++);
122 1 virt_port|=0x02; //光標(biāo)返回指令
123 1 writelcd(virt_port);
124 1 virt_port|=d&0xf0; //取高字節(jié)數(shù)據(jù)給數(shù)據(jù)寄存器
125 1 writelcd(virt_port);
126 1 virt_port|=0x08; //使能E腳為高電平
127 1 writelcd(virt_port);
128 1 virt_port&=0xf7; //使能E腳為低電平
129 1 writelcd(virt_port);
130 1 virt_port&=0x07; //設(shè)置光標(biāo)右移,文字也右移
131 1 writelcd(virt_port);
132 1
133 1 t=d&0x0f;
134 1 virt_port|=t<<4; //取低字節(jié)數(shù)據(jù)給數(shù)據(jù)寄存器
135 1 writelcd(virt_port);
136 1
137 1 virt_port|=0x08; //使能E腳為高電平
138 1 writelcd(virt_port);
139 1 for(i=3;i>0;i--);
140 1 virt_port&=0xf7; //使能E腳為低電平
141 1 writelcd(virt_port);
142 1 virt_port=0; //數(shù)據(jù)清零
143 1 writelcd(virt_port);
144 1 }
145 /***************************************************************************
146 *
147 * 顯示字符到液晶上
148 ****************************************************************************/
149 void lcdchar (void)
150 {
151 1 uint xdata i,j,k;
152 1 for(j=0;j<5000;j++); //數(shù)據(jù)讀、寫操作,畫面不動(dòng)
153 1 for(k=0;k<5000;k++);
154 1
155 1 for(i=0;i<16;i++){
156 2 writedata(tab1[i]);
157 2 for(j=0;j<1000;j++);
158 2 for(k=0;k<1000;k++);
159 2 for(k=0;k<5000;k++);
160 2 for(k=0;k<1000;k++);
161 2 }
162 1
163 1
164 1 writecode(0xb0); //
165 1 for(j=0;j<5000;j++);
166 1 for(k=0;k<5000;k++);
167 1 discode=0xb0;
168 1 for(i=0;i<16;i++){
169 2 writedata(Netdata[i]);
170 2 for(j=0;j<5000;j++);
171 2 for(k=0;k<5000;k++);
172 2 for(k=0;k<5000;k++);
173 2 };
174 1
175 1 }
176
177 /*******************************************************************************
178 *
179 *液晶初始化程序
C51 COMPILER V7.50 LCD_040 10/08/2006 13:29:10 PAGE 4
180 ********************************************************************************/
181 void lcdinit()
182 {
183 1 uint xdata i;
184 1
185 1 virt_port=0x00;
186 1 writelcd(virt_port); //RS腳為零寫指令寄存器 RW為低電平
187 1 virt_port|=0x08; //使能腳E=1
188 1 writelcd(virt_port);
189 1 virt_port&=0xf7; //使E=0使能腳發(fā)生跳變高--低
190 1 writelcd(virt_port);
191 1 for(i=1000;i>0;i--); //3次延時(shí),重要!
192 1 for(i=8000;i>0;i--); //用延時(shí)代替查詢
193 1
194 1
195 1 virt_port=0; //寫入20碼,設(shè)置為4位總線方式,非常重要!!!!!
196 1 writelcd(virt_port);
197 1 virt_port|=0x20; //只寫高字節(jié)
198 1 writelcd(virt_port);
199 1 virt_port|=0x08; //E=1
200 1 writelcd(virt_port);
201 1 for(i=20;i>0;i--); //使命令執(zhí)行
202 1 virt_port&=0xf7; //E=0
203 1 writelcd(virt_port);
204 1 for(i=10;i>0;i--);
205 1 virt_port=0;
206 1 writelcd(virt_port);
207 1 writecode(0x38); //設(shè)兩行顯示,4線方式5*10字符顯示
208 1 for(i=50;i>0;i--);
209 1 writecode(0x06); //光標(biāo)右移
210 1 for(i=50;i>0;i--);
211 1
212 1
213 1 writecode(0x0c); //開顯示指令
214 1 for(i=50;i>0;i--);
215 1
216 1
217 1 writecode(0x02); //光標(biāo)返回指令
218 1 for(i=50;i>0;i--);
219 1
220 1
221 1
222 1 writecode(0x01); //清屏指令
223 1 for(i=50;i>0;i--);
224 1 }
225 /******************************************************************************
226 *
227 *引腳初始化
228 *******************************************************************************/
229 void port_init()
230 {
231 1 SFRPAGE = CONFIG_PAGE;
232 1 P1MDOUT = 0xff;
233 1 XBR2 = 0x40;
234 1
235 1 }
236
237
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1232 ----
C51 COMPILER V7.50 LCD_040 10/08/2006 13:29:10 PAGE 5
CONSTANT SIZE = ---- ----
XDATA SIZE = 34 16
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -