📄 99.lst
字号:
C51 COMPILER V6.12 99 03/26/2008 13:46:33 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE 99
OBJECT MODULE PLACED IN .\99.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\C51.EXE .\99.c DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>
2 #ifndef _LCD1602_H_
3 #define _LCD1602_H_
4
5 //输入方式设置
6 #define LCD_AC_AUTO_INCREMENT 0x06 //数据读、写操作后,AC自动增一
7 #define LCD_AC_AUTO_DECREASE 0x04 //数据读、写操作后,AC自动减一
8 #define LCD_MOVE_ENABLE 0x05 //数据读、写操作,画面平移
9 #define LCD_MOVE_DISENABLE 0x04 //数据读、写操作,画面不动
10 #define LCD_GO_HOME 0x02 //AC=0,光标、画面回HOME位
11 //设置显示、光标及闪烁开、关
12 #define LCD_DISPLAY_ON 0x0C //显示开
13 #define LCD_DISPLAY_OFF 0x08 //显示关
14 #define LCD_CURSOR_ON 0x0A //光标显示
15 #define LCD_CURSOR_OFF 0x08 //光标不显示
16 #define LCD_CURSOR_BLINK_ON 0x09 //光标闪烁
17 #define LCD_CURSOR_BLINK_OFF 0x08 //光标不闪烁
18 //光标、画面移动,不影响DDRAM
19 #define LCD_LEFT_MOVE 0x18 //LCD显示左移一位
20 #define LCD_RIGHT_MOVE 0x1C //LCD显示右移一位
21 #define LCD_CURSOR_LEFT_MOVE 0x10 //光标左移一位
22 #define LCD_CURSOR_RIGHT_MOVE 0x14 //光标右移一位
23 //工作方式设置
24 #define LCD_DISPLAY_DOUBLE_LINE 0x38 //两行显示
25 #define LCD_DISPLAY_SINGLE_LINE 0x30 //单行显示
26 #define LCD_CLEAR_SCREEN 0X01 //清屏
27 /***********************LCD1602地址相关******************************/
28 #define LINE1_HEAD 0x80 // 第一行DDRAM起始地址
29 #define LINE2_HEAD 0xc0 // 第二行DDRAM起始地址
30 #define LINE1 0 //第一行
31 #define LINE2 1 //第二行
32 #define LINE_LENGTH 16 //每行的最大字符长度
33 /***********************LCD1602接线引脚定义**************************/
34 #define LCDIO P2 //定义P2口与LCD1602的数据口相接
35 sbit LCD_RS=P0^2;
36 sbit LCD_RW=P0^3;
37 sbit LCD_EN=P0^4;
38
39 /**********************另外相关的定*********************************/
40 #define HIGH 1
41 #define LOW 0
42 #define TURE 1
43 #define FALSE 0
44 #define uchar unsigned char
45 #define uint unsigned int
46
47 /*************************以下是函数的申明部*************************/
48 void LCD_init(void); //LCD1602初始化
49 void LCD_send_command(uchar command); //
50 void LCD_send_data(uchar dat);
51 void LCD_write_char(uchar x,uchar y,uchar dat);
52 void LCD_disp_string(uchar x,uchar y,char *Data);
53 void delay_ms(uint n);
54 void LCD_check_busy(void);
55 #endif
C51 COMPILER V6.12 99 03/26/2008 13:46:33 PAGE 2
56
57 void main(void)
58 {
59 1 uchar string[]=" I LOVE YOU! ";
60 1 uchar *cp;
61 1 cp=string;
62 1 LCD_init();
63 1 while(1)
64 1 {
65 2
66 2 LCD_send_command(LCD_CLEAR_SCREEN);
67 2 delay_ms(2);
68 2 LCD_disp_string(0,1,cp);
69 2 delay_ms(100);
70 2 cp++;
71 2 if(*cp=='\0')
72 2 {
73 3 cp=string; //到达字符的尾部时,改变指针,重新指向字符串的头部
74 3 }
75 2 }
76 1 }
77
78 /**************LCD1602的初始化***************************/
79 void LCD_init(void)
80 {
81 1 LCD_send_command(0x38);
82 1 LCD_send_command(0x06);
83 1 LCD_send_command( 0x04);
84 1 LCD_send_command(0x0c );
85 1 LCD_send_command( 0x08);
86 1 LCD_send_command(0x01);
87 1
88 1 }
89
90
91 void LCD_check_busy(void) //检测LCD状态,看它是不是还在忙呢
92 {
93 1
94 1 LCD_EN=0;
95 1 LCD_RS=0;
96 1 LCD_RW=1;
97 1 LCDIO=0xff;
98 1 LCD_EN=1;
99 1 while(P2&0x80);
100 1 LCD_EN=0;
101 1 }
102 /************LCD1602写命令*******************************/
103 void LCD_send_command(uchar command)
104 {
105 1 LCD_check_busy();
106 1 LCD_RS=LOW;
107 1 LCD_RW=LOW;
108 1 LCD_EN=HIGH;
109 1 LCDIO=command;
110 1 LCD_EN=LOW;
111 1 }
112 /*****************LCD1602写数据*********uu*****************/
113 void LCD_send_data(uchar dat)
114 {
115 1 LCD_check_busy();
116 1 LCD_RS=HIGH;
117 1 LCD_RW=LOW;
C51 COMPILER V6.12 99 03/26/2008 13:46:33 PAGE 3
118 1 LCD_EN=HIGH;
119 1 LCDIO=dat;
120 1 LCD_EN=LOW;
121 1 }
122
123 /******************LCD1602显示字符串*********************/
124 void LCD_disp_string(uchar x,uchar y,uchar *Data)
125 {
126 1 if(y==LINE1)
127 1 {
128 2 if(x<LINE_LENGTH)
129 2 {
130 3 LCD_send_command(LINE1_HEAD+x);
131 3 for(;x<LINE_LENGTH&&*Data!='\0';x++)
132 3 {
133 4 LCD_send_data(*(Data++));
134 4 }
135 3 if(*Data!='\0')
136 3 {
137 4 x=0;
138 4 y=LINE2;
139 4 }
140 3 }
141 2 }
142 1 if(y==LINE2)
143 1 {
144 2 LCD_send_command(LINE2_HEAD+x);
145 2 for(;x<LINE_LENGTH&&*Data!='\0';x++)
146 2 {
147 3 LCD_send_data(*(Data++));
148 3 }
149 2 }
150 1 }
151
152
153 void delay_ms(uint n)
154 {
155 1 uint i,j;
156 1 for(i=n;i>0;i--)
157 1 for(j=0;j<1140;j++)
158 1 ;
159 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 322 ----
CONSTANT SIZE = 18 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 24
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 + -