📄 51
字号:
C51 COMPILER V8.09 1602CHUANHANG 07/12/2010 14:10:14 PAGE 1
C51 COMPILER V8.09, COMPILATION OF MODULE 1602CHUANHANG
OBJECT MODULE PLACED IN 1602chuanhang.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE 1602chuanhang.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************
2
3 * 描述:
4 * LCD1602可以分为8位和4位控制方式,8位控制方式是用D0-D7数据线
5 * 来传送控制命令及数据。4位控制方式是用D4-D7数据线来传送控制命令
6 * 及数据。使用4位数据线做控制时,需要分两次来传送,先送出高4位数
7 * 据,再送出低4位数据。可以节省单片机的4根端口线。
8 *
9 *******************************************************************/
10 #include < reg52.h >
11 #include < intrins.h >
12 #define uchar unsigned char
13 #define uint unsigned int
14 sbit LCD_RS = P2^7;
15 sbit LCD_RW = P2^6;
16 sbit LCD_EN = P2^5;
17 uchar code cdis1[ ] = {" WELCOME TO "};
18 uchar code cdis2[ ] = {" WWW.RICHMCU.COM "};
19 /**********************************************************
20
21 * 5us 延时子程序
22
23 **********************************************************/
24 void delayNOP()
25 {
26 1 _nop_();
27 1 _nop_();
28 1 _nop_();
29 1 _nop_();
30 1 _nop_();
31 1 }
32
33 /**********************************************************
34
35 * 延时子程序
36
37 **********************************************************/
38 void delay(uint ms)
39
40 {
41 1 uchar t;
42 1 while(ms--)
43 1 {
44 2 for(t = 0; t < 120; t++);
45 2 }
46 1 }
47
48
49 /**********************************************************
50
51 * 检查LCD忙状态
52 * lcd_busy为1时,忙,等待。
53 * lcd-busy为0时,闲,可写指令与数据
54
55 **********************************************************/
C51 COMPILER V8.09 1602CHUANHANG 07/12/2010 14:10:14 PAGE 2
56 bit lcd_busy()
57 {
58 1 bit result;
59 1 LCD_RS = 0;
60 1 LCD_RW = 1;
61 1 LCD_EN = 1;
62 1 delayNOP();
63 1 result = (bit)(P0&0x80);
64 1 LCD_EN = 0;
65 1 return(result);
66 1 }
67
68 /*********************************************************
69
70 * 写指令或数据
71
72 * start=0, 写入命令; start=1, 写入数据
73
74 *********************************************************/
75
76 void lcd_write(bit start, uchar in_data)
77 {
78 1 uchar Hdata,Ldata;
79 1
80 1 while(lcd_busy());
81 1
82 1 Hdata=in_data&0xf0; //取高四位
83 1 Ldata=(in_data<<4)&0xf0; //取低四位
84 1
85 1 if(start==0)
86 1 LCD_RS = 0; //写入命令
87 1 else
88 1 LCD_RS = 1; //写入数据
89 1
90 1 LCD_RW = 0;
91 1 LCD_EN = 0;
92 1 delayNOP();
93 1
94 1 P0 = Hdata; //发送高四位
95 1 LCD_EN = 1;
96 1 delayNOP();
97 1 LCD_EN = 0;
98 1 delayNOP();
99 1
100 1 P0 = Ldata; //发送低四位
101 1 LCD_EN = 1;
102 1 delayNOP();
103 1 LCD_EN = 0;
104 1 delayNOP();
105 1 }
106
107 /*************************************************************
108
109 * LCD初始化设定
110
111 *************************************************************/
112 void lcd_init()
113 {
114 1 delay(15);
115 1 lcd_write(0,0x28); //16*2显示,5*7点阵,4位数据
116 1 delay(5);
117 1 lcd_write(0,0x28);
C51 COMPILER V8.09 1602CHUANHANG 07/12/2010 14:10:14 PAGE 3
118 1 delay(5);
119 1 lcd_write(0,0x28);
120 1
121 1 delay(5);
122 1 lcd_write(0,0x0c); //显示开,关光标
123 1 delay(5);
124 1 lcd_write(0,0x06); //移动光标
125 1 delay(5);
126 1 lcd_write(0,0x01); //清除LCD的显示内容
127 1 delay(25); //延时
128 1 }
129
130 /**********************************************************
131
132 * 设定显示位置
133
134 **********************************************************/
135 void lcd_pos(uchar pos)
136 {
137 1 lcd_write(0,pos|0x80); //数据指针=80+地址变量
138 1 }
139
140 /**********************************************************
141
142 * 主函数
143
144 **********************************************************/
145 void main()
146 {
147 1 uchar m;
148 1
149 1 lcd_init(); //LCD1602初始化
150 1
151 1 lcd_pos(0x00); //设置显示位置为第一行
152 1 for(m=0;m<16;m++)
153 1 lcd_write(1,cdis1[m]);
154 1
155 1
156 1 lcd_pos(0x40); //设置显示位置为第二行
157 1 for(m=0;m<16;m++)
158 1 lcd_write(1,cdis2[m]);
159 1
160 1 while(1);
161 1 }
162
163 /*********************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 231 ----
CONSTANT SIZE = 35 ----
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 + -