📄 lcd162.lst
字号:
C51 COMPILER V7.50 LCD162 11/24/2007 11:04:04 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LCD162
OBJECT MODULE PLACED IN lcd162.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd162.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //-----------------------------------------------------------------------------
2 //程序描述:
3 // 这个程序可以在该液晶模块上显示字符:" BT F020 V1.0 www.xhl.com.cn"
4 // 此程序用4位数据线来驱动液晶
5 // 液晶接线方法 :1脚接地;2脚接+5V;3脚通过1个10K电阻接+5v,通过1个430欧电阻接地;
6 // 15脚接地;16脚通过1个15R电阻接+5v。液晶别的引脚直接接相应的数据或控制信号线。
7 //作者:ZDP
8 //时间:2005-11-30
9 //版本:V1.0
10 //-----------------------------------------------------------------------------
11 // 头文件包含
12 //-----------------------------------------------------------------------------
13 #include <c8051f020.h>
14
15 //-----------------------------------------------------------------------------
16 //全局变量定义
17 //-----------------------------------------------------------------------------
18 #define sysclk 22118400
19
20 unsigned long x; //"www.xhl.com.cn"
21 unsigned char xdata Netdata[16]={0x77,0x77,0x77,0x2e,0x78,0x68,0x6c,0x2e,0x63,0x6f,
22 0x6d,0x2e,0x63,0x6e};
23
24 //" BT F020 V1.0 "
25 unsigned char xdata NCDdata[17]={0x20,0x20,0x42,0x54,0x20,0x46,0x30,0x32,0x30,0x20,
26 0x56,0x31,0x2e,0x30,0x20,0x20};
27
28 unsigned char *lcdpoint; //指向 lcddata数组的指针
29 unsigned char lcd_data_count;
30 //-----------------------------------------------------------------------------
31 // 函数定义
32 //-----------------------------------------------------------------------------
33 void SYSCLK_Init (void);
34 void PORT_Init (void);
35 void LCD_Init(void);
36 void delayms(unsigned int ms);
37 void delayus(unsigned int us);
38 //-----------------------------------------------------------------------------
39 // 主程序
40 //-----------------------------------------------------------------------------
41 void main (void)
42 {
43 1 static unsigned char data1;
44 1 WDTCN = 0xde;
45 1 WDTCN = 0xad; //禁止看门狗定时器
46 1
47 1 SYSCLK_Init (); // 系统时钟初始化
48 1
49 1 PORT_Init (); // 交叉开关和通用I/O口初始化
50 1
51 1 while(1){
52 2 LCD_Init(); //LCD初始化
53 2 delayms(20);
54 2 P2 = 0x00;
55 2 delayus(50);
C51 COMPILER V7.50 LCD162 11/24/2007 11:04:04 PAGE 2
56 2 P3 = 0x80;
57 2 delayus(50);
58 2 P2 = 0x80;
59 2 delayus(100);
60 2 // for(x=0;x<1000;x++);
61 2 P2 = 0x00;
62 2 delayus(100);
63 2 // for(x=0;x<1000;x++);
64 2
65 2
66 2 P2 = 0x20; //准备送数据
67 2 delayus(100);
68 2 // for(x=0;x<1000;x++);
69 2 lcdpoint=&NCDdata; //取地址
70 2 for(lcd_data_count=14;lcd_data_count>0;lcd_data_count--)//显示第一行字符
71 2 {
72 3 data1=*lcdpoint; //读出数据
73 3 P3 = data1; //写数据到端口
74 3 delayus(50);
75 3 P2 = 0xA0;
76 3 delayms(10);
77 3 P2 = 0x20; //控制LCD
78 3 lcdpoint++;
79 3 delayus(100);
80 3 // for(x=0;x<1000;x++);
81 3 }
82 2 delayms(2000);
83 2 P2=0x00;
84 2 delayus(50);
85 2 P3 = 0xc1;
86 2 delayus(50);
87 2 P2 = 0x80;
88 2 delayus(100);
89 2 // for(x=0;x<1000;x++);
90 2 P2 = 0x00;
91 2 delayus(100);
92 2 // for(x=0;x<1000;x++);
93 2
94 2 P2 = 0x80;
95 2 delayus(100);
96 2 // for(x=0;x<1000;x++);
97 2 lcdpoint=&Netdata;
98 2 for(lcd_data_count=14;lcd_data_count>0;lcd_data_count--)//显示第一行字符
99 2 {
100 3 data1=*lcdpoint;
101 3 P3 = data1;
102 3 delayus(50);
103 3 //-----------------------------------------------------
104 3 // P2 = 0x20; /*原来的LCD程序*/
105 3 // P2 = 0xA0;
106 3 //-----------------------------------------------------
107 3 P2 = 0xA0; //修改后的LCD程序
108 3 delayms(10);
109 3
110 3 P2 = 0x20;
111 3 //------------------------------------------------------/
112 3 lcdpoint++;
113 3 delayus(100);
114 3 // for(x=0;x<1000;x++);
115 3 }
116 2 delayms(1500);
117 2 }
C51 COMPILER V7.50 LCD162 11/24/2007 11:04:04 PAGE 3
118 1 }
119
120 //-----------------------------------------------------------------------------
121 //函数名称: SYSCLK_Init ()
122 //函数功能: 系统时钟初始化
123 //入口参数: 无
124 //出口参数: 无
125 //全局变量引用: 无
126 //调用模块: 无
127 //-----------------------------------------------------------------------------
128 //
129
130 void SYSCLK_Init (void)
131 {
132 1 int i; // delay counter
133 1
134 1 OSCXCN = 0x67; // start external oscillator with
135 1 // 22.1184MHz crystal
136 1
137 1 for (i=0; i < 256; i++) ; // Wait for osc. to start up
138 1
139 1 while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle
140 1
141 1 OSCICN = 0x88;
142 1
143 1 // OSCICN = 0x05; // 系统时钟初始化为片内的 24.5MHz / 8
-
144 1 }
145
146 //-----------------------------------------------------------------------------
147 //函数名称: PORT_Init ()
148 //函数功能: 通用I/O口及交叉开关初始化
149 //入口参数: 无
150 //出口参数: 无
151 //全局变量引用: 无
152 //调用模块: 无
153 //-----------------------------------------------------------------------------
154
155 void PORT_Init (void)
156 {
157 1
158 1 XBR0 = 0x00; // 没有选择数字外设
159 1 XBR2 = 0x40;
160 1 P2MDOUT = 0xe0; // P2口设为推挽方式
161 1 }
162 //-----------------------------------------------------------------------------
163 //函数名称: LCD_Init ()
164 //函数功能: LCD初始化
165 //入口参数: 无
166 //出口参数: 无
167 //全局变量引用: 无
168 //调用模块: 无
169 //-----------------------------------------------------------------------------
170 void LCD_Init(void)
171 { delayms(100);
172 1 //for(x=0;x<50000;x++);
173 1 P2 = 0X80;
174 1 delayms(100);
175 1 // for(x=0;x<50000;x++);
176 1 //P7 = 0x30; /*一行显示*/
177 1 P3 = 0x38; /*两行显示*/
178 1 delayus(50);
C51 COMPILER V7.50 LCD162 11/24/2007 11:04:04 PAGE 4
179 1 P2 = 0X00;//0x08;
180 1 delayus(50);
181 1 P2 = 0X80;//0x09;
182 1 delayus(100);
183 1 // for(x=0;x<1000;x++);
184 1 P3 = 0x0e;
185 1 delayus(50);
186 1 P2 = 0x00;
187 1 delayus(50);
188 1 P2 = 0x80;
189 1 delayus(100);
190 1 //for(x=0;x<1000;x++);
191 1 P3= 0x06;
192 1 delayus(50);
193 1 P2 = 0x00;
194 1 delayus(50);
195 1 P2 = 0x80;
196 1 delayus(100);
197 1 // for(x=0;x<5000;x++);
198 1 P3 = 0x01;
199 1 delayus(50);
200 1 P2 = 0x00;
201 1 delayus(50);
202 1 P2 = 0x80;
203 1 delayus(100);
204 1 // for(x=0;x<5000;x++);
205 1 }
206
207 void delayms(unsigned int ms)
208 {int i; // 毫秒计数器
209 1 for (i = 0; i < ms; i++) { // 数毫秒
210 2 TR0 = 0; // 停定时器T0
211 2 TH0 = (-sysclk/1000) >> 8; // 设置定时器T0 1ms溢出
212 2 TL0 = -sysclk/1000;
213 2 TR0 = 1; // 启动定时器T0
214 2 while (TF0 == 0); // 等待溢出
215 2 TF0 = 0; // 清除溢出标志
216 2 }
217 1 }
218 void delayus(unsigned int us)
219 {int i; // 毫秒计数器
220 1 for (i = 0; i < us; i++) { // 数毫秒
221 2 TR0 = 0; // 停定时器T0
222 2 TH0 = (-sysclk/1000000) >> 8; // 设置定时器T0 1ms溢出
223 2 TL0 = -sysclk/1000000;
224 2 TR0 = 1; // 启动定时器T0
225 2 while (TF0 == 0); // 等待溢出
226 2 TF0 = 0; // 清除溢出标志
227 2 }
228 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 462 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 33 ----
PDATA SIZE = ---- ----
DATA SIZE = 9 ----
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 + -