📄 lcddisplay.lst
字号:
C51 COMPILER V7.06 LCDDISPLAY 08/12/2009 16:40:11 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LCDDISPLAY
OBJECT MODULE PLACED IN LcdDisplay.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE LcdDisplay.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /**********************************Copyright (c)**************************************************
2 ** 浙 江 师 范 大 学
3 **
4 **--------------文件信息---------------------------------------------------------------------------
5 功能:在LCD上显示汉字信息
6 作者:陈希
7 时间:2008-08-20
8 版本:V1.0
9 注:
10
11 **--------------当前版本修订-----------------------------------------------------------------------
12 ** 修改人:
13 ** 日 期:
14 ** 描 述:
15 **
16 **-------------------------------------------------------------------------------------------------
17 ***************************************************************************************************/
18
19 #include <c8051f020.h> // SFR declarations
20 #include <intrins.h>
21 #include <stdio.h>
22
23 #define uchar unsigned char
24 #define uint unsigned int
25
26 #define Lcd_Bus P5
27
28 #define SYSCLK 22118400 // SYSCLK frequency in Hz
29 #define INT_DEC 256 // integrate and decimate ratio
30 #define _Nop() _nop_()
31 //-----------------------------------------------------------------------------
32 // 16-bit SFR Definitions for 'F02x
33 //-----------------------------------------------------------------------------
34
35 sfr16 DP = 0x82; // data pointer
36 sfr16 TMR3RL = 0x92; // Timer3 reload value
37 sfr16 TMR3 = 0x94; // Timer3 counter
38 sfr16 ADC0 = 0xbe; // ADC0 data
39 sfr16 ADC0GT = 0xc4; // ADC0 greater than window
40 sfr16 ADC0LT = 0xc6; // ADC0 less than window
41 sfr16 RCAP2 = 0xca; // Timer2 capture/reload
42 sfr16 T2 = 0xcc; // Timer2
43 sfr16 RCAP4 = 0xe4; // Timer4 capture/reload
44 sfr16 T4 = 0xf4; // Timer4
45 sfr16 DAC0 = 0xd2; // DAC0 data
46 sfr16 DAC1 = 0xd5; // DAC1 data
47 //-----------------------------------------------------------------------------
48 // 液晶接口定义
49 //-----------------------------------------------------------------------------
50 //sbit RS=P3^0;
51 //sbit RW=P3^1;
52 //sbit E =P3^2;
53 //sbit RS=P6^7
54 //sbit RW=P6^6;
55 //sbit E =P6^5;
C51 COMPILER V7.06 LCDDISPLAY 08/12/2009 16:40:11 PAGE 2
56 //sbit PSB =P6^4;//高电平
57 //sbit RST =P6^2;//高电平
58
59 #define LCDRSLow P6&=~0x80;
60 #define LCDRSHigh P6|=0x80;
61
62 #define LCDRWLow P6&=~0x40;
63 #define LCDRWHigh P6|=0x40;
64
65 #define LCDELow P6&=~0x20;
66 #define LCDEHigh P6|=0x20;
67
68 #define LCDPSBLow P6&=~0x10;
69 #define LCDPSBHigh P6|=0x10;
70
71 #define LCDRSTLow P6&=~0x04;
72 #define LCDRSTHigh P6|=0x04;
73
74
75 //==============================//
76 uchar num;
77 uint delay_time;
78 /*-----------------------------------------------------*/
79
80 void SYSCLK_Init (void);
81 void PORT_Init (void);
82
83
84 //-----------------------------------------------------------------------------
85 //
86 //-----------------------------------------------------------------------------
87
88
89 void delay(unsigned int t)
90 { unsigned int k,j;
91 1 for(k=0;k<t;k++)
92 1 for(j=0;j<10;j++) ;
93 1 }
94 //-----------------------------------------------------------------------------
95 //
96 //-----------------------------------------------------------------------------
97
98
99 void delay18(uint k)
100 { while(k)
101 1 { k--; }
102 1 }
103
104 //-----------------------------------------------------------------------------
105 // 液晶显示写命令
106 //-----------------------------------------------------------------------------
107 void write_com(unsigned char cmdcode)
108 {
109 1 LCDRSLow;
110 1 LCDRWLow;
111 1 LCDEHigh;
112 1 Lcd_Bus=cmdcode;
113 1 delay(50);delay(60); //在数据写入的时候加入适当的延时
114 1 LCDELow;
115 1 delay(50);delay(60);
116 1 }
117 //-----------------------------------------------------------------------------
C51 COMPILER V7.06 LCDDISPLAY 08/12/2009 16:40:11 PAGE 3
118 // 液晶显示写数据
119 //-----------------------------------------------------------------------------
120 void write_data(unsigned char Dispdata)
121 {
122 1 LCDRSHigh;
123 1 LCDRWLow;
124 1 LCDEHigh;
125 1 Lcd_Bus=Dispdata;
126 1 delay(50);delay(60); // 在数据写入的时候加入适当的延时
127 1 LCDELow;
128 1 delay(50);delay(60);
129 1 }
130 //-----------------------------------------------------------------------------
131 // 液晶显示,复位初始
132 //-----------------------------------------------------------------------------
133 void lcdreset()
134 {
135 1 delay(200);delay(250);
136 1 write_com(0x30);
137 1 delay(100);delay(250); //选择基本指令集
138 1 write_com(0x30); //选择8bit数据流
139 1 delay(50);delay(250);
140 1 write_com(0x0c); //开显示(无游标、不反白)
141 1 delay(50);delay(250);
142 1 write_com(0x01); //清除显示,并且设定地址指针为00H
143 1 delay(50);delay(250);
144 1 write_com(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
145 1
146 1 }
147 //-----------------------------------------------------------------------------
148 // 液晶显示
149 //-----------------------------------------------------------------------------
150 void display(unsigned char code *s)
151 {
152 1 while(*s>0)
153 1 { write_data(*s);
154 2 s++;
155 2 delay(50);delay(100);
156 2 }
157 1 }
158 //-----------------------------------------------------------------------------
159 // 液晶显示内容
160 //-----------------------------------------------------------------------------
161
162 void zero_screen()
163 {
164 1 write_com(0x01);
165 1 delay18(10000);
166 1 //write_com(0x80);
167 1 //display(" 浙江师范大学 ");
168 1 write_com(0x90);
169 1 //display("省单片机精品课程");
170 1 display("C8051F020 开发板");
171 1 write_com(0x88);
172 1 //display("C8051F020 开发板");
173 1 display(" QQ:45248052 ");
174 1 //write_com(0x98);
175 1 //display(" QQ:45248052 ");
176 1 }
177 //-----------------------------------------------------------------------------
178 // 通用I/O口及交叉开关初始化
179 //-----------------------------------------------------------------------------
C51 COMPILER V7.06 LCDDISPLAY 08/12/2009 16:40:11 PAGE 4
180 void PORT_Init (void)
181 {
182 1 XBR0 = 0x02; // 通过交叉开关将SPI连到通用I/O 引脚;P0.0,P0.1,P0.2 , P0.3
183 1 XBR2 = 0x40; // 交叉开关使能
184 1
185 1 //P3MDOUT = 0xff; // 设为推挽方式 AT24C02读取设置成推挽模式
186 1 //P2MDOUT = 0xff;
187 1 // P1MDOUT = 0xff;
188 1 //P0MDOUT = 0x00; //读取刷卡器信息设置成开漏模式
189 1
190 1 // P0MDOUT=0x05;
191 1 // P0|=0x80;
192 1 }
193 //-----------------------------------------------------------------------------
194 // 系统时钟初始化
195 //-----------------------------------------------------------------------------
196
197 /*
198 void SYSCLK_Init()
199 {
200 OSCICN =0x87; //使用内部时钟16M
201 while((OSCICN & 0x10)==0);//内部时钟按设定频率运行
202 }
203 */
204 // 配置系统时钟使用外部晶振11.0592MHz
205
206 void SYSCLK_Init (void)
207 {
208 1 int i; // delay counter
209 1
210 1 OSCXCN = 0x67; // start external oscillator with
211 1 // 22.1184MHz crystal
212 1 for (i=0; i < 256; i++) ; // XTLVLD blanking interval (>1ms)
213 1
214 1 while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle
215 1
216 1 OSCICN = 0x88; // select external oscillator as SYSCLK
217 1 // source and enable missing clock
218 1 // detector
219 1 }
220
221 //-----------------------------------------------------------------------------
222 // 系统初始化
223 //-----------------------------------------------------------------------------
224 void init()
225 {
226 1 SYSCLK_Init();
227 1 PORT_Init ();
228 1 lcdreset();
229 1 zero_screen();
230 1 }
231 //-----------------------------------------------------------------------------
232 // 主程序
233 //-----------------------------------------------------------------------------
234
235 void main()
236 {
237 1
238 1 WDTCN = 0xde;
239 1 WDTCN = 0xad; //禁止看门狗定时器
240 1
241 1 LCDPSBHigh;
C51 COMPILER V7.06 LCDDISPLAY 08/12/2009 16:40:11 PAGE 5
242 1 LCDRSTHigh;
243 1 init();
244 1 zero_screen();
245 1
246 1 P6=0xff;
247 1 P5=0xff;
248 1 while(1)
249 1 {
250 2
251 2 }
252 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 316 ----
CONSTANT SIZE = 33 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 2
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 + -