📄 lcd1602.lst
字号:
C51 COMPILER V7.50 LCD1602 04/09/2007 18:39:44 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LCD1602
OBJECT MODULE PLACED IN LCD1602.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD1602.C BROWSE DEBUG OBJECTEXTEND
line level source
1
2 /**************************************************************************
3
4
5 File Name: LCD.h
6 Author: liao xuming
7 Created: 2007/3/23
8 Modified: NO
9 Revision: 1.0
10
11 ***************************************************************************/
12
13 #include"LCD1602.h"
14 #include"keyboard.h"
15 /***********************LCD1602接线引脚定义**************************/
16
17 #define LCDIO P0 //定义P2口与LCD1602的数据口相接
18 sbit LCD_RS=P2^5;
19 sbit LCD_RW=P2^6;
20 sbit LCD_EN=P2^7;
21 sbit LCD_BUSY=LCDIO^7;
22
23
24 /**************LCD1602的初始化***************************/
25 void LCD_init(void)
26 {LCD_EN=0;
27 1 LCD_send_command(LCD_DISPLAY_DOUBLE_LINE);
28 1 LCD_send_command(LCD_DISPLAY_DOUBLE_LINE);
29 1 LCD_send_command(LCD_AC_AUTO_INCREMENT|LCD_MOVE_DISENABLE);
30 1 LCD_send_command(LCD_DISPLAY_ON|LCD_CURSOR_OFF);
31 1 LCD_send_command(LCD_CLEAR_SCREEN);
32 1 }
33 /********************************************************/
34
35 void LCD_check_busy(void) //检测LCD状态,看它是不是还在忙呢
36 {
37 1 do
38 1 {
39 2 LCD_EN=0;
40 2 LCD_RS=0;
41 2 LCD_RW=1;
42 2 LCDIO=0xff;
43 2 LCD_EN=1;
44 2 }
45 1 // while(1);
46 1 while(LCD_BUSY==1); //在用Proteus仿真时,注意用屏蔽此语句,在调用GotoXY()时,会进入死循环,
47 1 //可能在写该控制字时,该模块没有返回写入完备命令,即DBPort&0x80==0x80
48 1 //实际硬件时打开此语句
49 1 LCD_EN=0;
50 1 }
51 /************LCD1602写命令*******************************/
52 void LCD_send_command(uchar command)
53 {
54 1 LCD_check_busy();
55 1 LCD_RS=LOW;
C51 COMPILER V7.50 LCD1602 04/09/2007 18:39:44 PAGE 2
56 1 LCD_RW=LOW;
57 1 LCD_EN=HIGH;
58 1 LCDIO=command;
59 1 LCD_EN=LOW;
60 1 }
61 /********************************************************/
62 /*****************LCD1602写数据**************************/
63 void LCD_send_data(uchar dat)
64 {
65 1 LCD_check_busy();
66 1 LCD_RS=HIGH;
67 1 LCD_RW=LOW;
68 1 LCD_EN=HIGH;
69 1 LCDIO=dat;
70 1 LCD_EN=LOW;
71 1 }
72 /********************************************************/
73 void LCD_write_char(uchar x,uchar y,uchar dat)
74 {
75 1 unsigned char address;
76 1 if(dat!=KEY_NOTHING+0x30) //this if is my add for when the time no key down to do not display anythi
-ng
77 1 {
78 2 if (y == LINE1)
79 2 address = LINE1_HEAD + x;
80 2 else
81 2 address = LINE2_HEAD + x;
82 2 LCD_send_command(address);
83 2 LCD_send_data(dat);
84 2 }
85 1 }
86
87 void GotoXY(unsigned char x, unsigned char y)
88 {
89 1 if(y==0)
90 1 LCD_send_command(0x80|x);
91 1 if(y==1)
92 1 LCD_send_command(0x80|(x-0x40));
93 1 }
94
95
96 void Print(unsigned char *str)
97 {
98 1 while(*str!='\0')
99 1 {
100 2 LCD_send_data(*str);
101 2 str++;
102 2 }
103 1 }
104 /******************LCD1602显示字符串*********************/
105 void LCD_disp_string(uchar x,uchar y,uchar *Data)
106 {
107 1 if(y==LINE1)
108 1 {
109 2 if(x<LINE_LENGTH)
110 2 {
111 3 LCD_send_command(LINE1_HEAD+x);
112 3 for(;x<LINE_LENGTH&&*Data!='\0';x++)
113 3 {
114 4 LCD_send_data(*(Data++));
115 4 }
116 3 if(*Data!='\0')
C51 COMPILER V7.50 LCD1602 04/09/2007 18:39:44 PAGE 3
117 3 {
118 4 x=0;
119 4 y=LINE2;
120 4 }
121 3 }
122 2 }
123 1 if(y==LINE2)
124 1 {
125 2 LCD_send_command(LINE2_HEAD+x);
126 2 for(;x<LINE_LENGTH&&*Data!='\0';x++)
127 2 {
128 3 LCD_send_data(*(Data++));
129 3 }
130 2 }
131 1 }
132 /****************************************************************/
133
134 //ming add display code string
135 /******************LCD1602显示字符串*********************/
136 void LCD_disp_string_code(uchar x,uchar y,uchar code *Data)
137 {
138 1 if(y==LINE1)
139 1 {
140 2 if(x<LINE_LENGTH)
141 2 {
142 3 LCD_send_command(LINE1_HEAD+x);
143 3 for(;x<LINE_LENGTH&&*Data!='\0';x++)
144 3 {
145 4 LCD_send_data(*(Data++));
146 4 }
147 3 if(*Data!='\0')
148 3 {
149 4 x=0;
150 4 y=LINE2;
151 4 }
152 3 }
153 2 }
154 1 if(y==LINE2)
155 1 {
156 2 LCD_send_command(LINE2_HEAD+x);
157 2 for(;x<LINE_LENGTH&&*Data!='\0';x++)
158 2 {
159 3 LCD_send_data(*(Data++));
160 3 }
161 2 }
162 1 }
163 /****************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 372 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 3
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 + -