📄 11.lst
字号:
C51 COMPILER V8.02 11 04/09/2007 21:36:09 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 11
OBJECT MODULE PLACED IN 11.OBJ
COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE 11.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************
2 *
3 * ME500单片机开发系统演示程序 - LCD1602 4位数据线控制方式
4 *
5 * LCD1602显示
6 *
7 * 邮箱: gguoqing@willar.com
8 * 网站: http://www.willar.com ;
9 * 作者: gguoqing
10 * 时间: 2007/01/03
11 *
12 *【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved
13 *【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
14 *
15 ********************************************************************
16 *
17 * 描述:
18 * LCD1602可以分为8位和4位控制方式,8位控制方式是用D0-D7数据线
19 * 来传送控制命令及数据。4位控制方式是用D4-D7数据线来传送控制命令
20 * 及数据。使用4位数据线做控制时,需要分两次来传送,先送出高4位数
21 * 据,再送出低4位数据。可以节省单片机的4根端口线。
22 *
23 *******************************************************************/
24 #include < reg51.h >
25 #include < intrins.h >
26 #define uchar unsigned char
27 #define uint unsigned int
28 sbit LCD_RS = P2^1;
29 sbit LCD_RW = P2^2;
30 sbit LCD_EN = P2^0;
31
32 uchar code cdis1[ ] = {" WELCOME TO "};
33 uchar code cdis2[ ] = {" WWW.WILLAR.COM "};
34 /**********************************************************
35 * 5us 延时子程序
36 **********************************************************/
37 void delayNOP()
38 {
39 1 _nop_();
40 1 _nop_();
41 1 _nop_();
42 1 _nop_();
43 1 _nop_();
44 1 }
45 /**********************************************************
46 * 延时子程序
47 **********************************************************/
48 void delay(uint ms)
49 {
50 1 uchar t;
51 1 while(ms--)
52 1 {
53 2 for(t = 0; t < 120; t++);
54 2 }
55 1 }
C51 COMPILER V8.02 11 04/09/2007 21:36:09 PAGE 2
56
57 /**********************************************************
58 * 检查LCD忙状态
59 * lcd_busy为1时,忙,等待。
60 * lcd-busy为0时, 闲,可写指令与数据
61 **********************************************************/
62 bit lcd_busy()
63 {
64 1 bit result;
65 1 LCD_RS = 0;
66 1 LCD_RW = 1;
67 1 LCD_EN = 1;
68 1 delayNOP();
69 1 result = (bit)(P0&0x80);
70 1 LCD_EN = 0;
71 1 return(result);
72 1 }
73 /*********************************************************
74 * 写指令或数据
75 * start=0, 写入命令; start=1, 写入数据
76 *********************************************************/
77 void lcd_write(bit start, uchar in_data)
78 {
79 1 uchar Hdata,Ldata;
80 1 while(lcd_busy());
81 1 Hdata=in_data&0xf0; //取高四位
82 1 Ldata=(in_data<<4)&0xf0; //取低四位
83 1 if(start==0)
84 1 LCD_RS = 0; //写入命令
85 1 else
86 1 LCD_RS = 1; //写入数据
87 1
88 1 LCD_RW = 0;
89 1
90 1 LCD_EN = 0;
91 1 delayNOP();
92 1 P0 = Hdata; //发送高四位
93 1 LCD_EN = 1;
94 1 delayNOP();
95 1 LCD_EN = 0;
96 1
97 1 delayNOP();
98 1 P0 = Ldata; //发送低四位
99 1 LCD_EN = 1;
100 1 delayNOP();
101 1 LCD_EN = 0;
102 1 delayNOP();
103 1 }
104 /*************************************************************
105 * LCD初始化设定
106 *************************************************************/
107 void lcd_init()
108 {
109 1 delay(15);
110 1 lcd_write(0,0x28); //16*2显示,5*7点阵,4位数据
111 1 delay(5);
112 1 lcd_write(0,0x28);
113 1 delay(5);
114 1 lcd_write(0,0x28);
115 1 delay(5);
116 1 lcd_write(0,0x0c); //显示开,关光标
117 1 delay(5);
C51 COMPILER V8.02 11 04/09/2007 21:36:09 PAGE 3
118 1 lcd_write(0,0x06); //移动光标
119 1 delay(5);
120 1 lcd_write(0,0x01); //清除LCD的显示内容
121 1 delay(25); //延时
122 1 }
123 /**********************************************************
124 * 设定显示位置
125
126 **********************************************************/
127 void lcd_pos(uchar pos)
128 {
129 1 lcd_write(0,pos|0x80); //数据指针=80+地址变量
130 1 }
131 /**********************************************************
132 * 主函数
133 **********************************************************/
134 void main()
135 {
136 1 uchar m;
137 1 lcd_init(); //LCD1602初始化
138 1
139 1 lcd_pos(0x00); //设置显示位置为第一行
140 1 for(m=0;m<16;m++)
141 1 lcd_write(1,cdis1[m]);
142 1
143 1 lcd_pos(0x40); //设置显示位置为第二行
144 1 for(m=0;m<16;m++)
145 1 lcd_write(1,cdis2[m]);
146 1 while(1);
147 1 }
148 /*********************************************************/
149
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 231 ----
CONSTANT SIZE = 34 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 1
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -