📄 lcd1602_text.lst
字号:
C51 COMPILER V8.02 LCD1602_TEXT 03/12/2007 17:32:14 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCD1602_TEXT
OBJECT MODULE PLACED IN lcd1602_text.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd1602_text.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #include<intrins.h>
3
4
5 sbit LCM_RS=P2^0;
6 sbit LCM_RW=P2^1;
7 sbit LCM_EN=P2^2;
8
9 #define BUSY 0x80 //常量定义
10 #define DATAPORT P0
11 #define uchar unsigned char
12 #define uint unsigned int
13
14 uchar code str0[]={"-This is a lcd-!"};
15 uchar code str1[]={"yi wei kong jian"};
16 uchar code str2[]={" "};
17
18 void delay(uint);
19 void lcd_wait(void);
20
21
22 /*********延时K*1ms,12.000mhz**********/
23 void delay(uint k)
24 {
25 1 uint i,j;
26 1 for(i=0;i<k;i++)
27 1 {
28 2 for(j=0;j<60;j++)
29 2 {;}
30 2 }
31 1 }
32 /**********写指令到ICM子函数************/
33
34 void WriteCommandLCM(uchar WCLCM,uchar BusyC)
35 {
36 1 if(BusyC)lcd_wait();
37 1 DATAPORT=WCLCM;
38 1 LCM_RS=0; // 选中指令寄存器
39 1 LCM_RW=0; // 写模式
40 1 LCM_EN=1;
41 1 _nop_();
42 1 _nop_();
43 1 _nop_();
44 1 LCM_EN=0;
45 1
46 1 }
47
48 /**********写数据到LCM子函数************/
49
50 void WriteDataLCM(uchar WDLCM)
51 {
52 1 lcd_wait( ); //检测忙信号
53 1 DATAPORT=WDLCM;
54 1 LCM_RS=1; // 选中数据寄存器
55 1 LCM_RW=0; // 写模式
C51 COMPILER V8.02 LCD1602_TEXT 03/12/2007 17:32:14 PAGE 2
56 1 LCM_EN=1;
57 1 _nop_();
58 1 _nop_();
59 1 _nop_();
60 1 LCM_EN=0;
61 1 }
62
63 /***********lcm内部等待函数*************/
64
65 void lcd_wait(void)
66 {
67 1 DATAPORT=0xff; //读LCD前若单片机输出低电平,而读出LCD为高电平,则冲突,Proteus仿真会有显示逻辑黄色
68 1 LCM_EN=1;
69 1 LCM_RS=0;
70 1 LCM_RW=1;
71 1 _nop_();
72 1 _nop_();
73 1 _nop_();
74 1 while(DATAPORT&BUSY)
75 1 { LCM_EN=0;
76 2 _nop_();
77 2 _nop_();
78 2 LCM_EN=1;
79 2 _nop_();
80 2 _nop_();
81 2 }
82 1 LCM_EN=0;
83 1
84 1 }
85
86 /**********LCM初始化子函数***********/
87 void initLCM( )
88 {
89 1 DATAPORT=0;
90 1 delay(15);
91 1 WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
92 1 delay(5);
93 1 WriteCommandLCM(0x38,0);
94 1 delay(5);
95 1 WriteCommandLCM(0x38,0);
96 1 delay(5);
97 1
98 1 WriteCommandLCM(0x38,1); //8bit数据传送,2行显示,5*7字型,检测忙信号
99 1 WriteCommandLCM(0x08,1); //关闭显示,检测忙信号
100 1 WriteCommandLCM(0x01,1); //清屏,检测忙信号
101 1 WriteCommandLCM(0x06,1); //显示光标右移设置,检测忙信号
102 1 WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号
103 1 }
104
105 /****显示指定坐标的一个字符子函数****/
106
107 void DisplayOneChar(uchar X,uchar Y,uchar DData)
108 {
109 1 Y&=1;
110 1 X&=15;
111 1 if(Y)X|=0x40; //若y为1(显示第二行),地址码+0X40
112 1 X|=0x80; //指令码为地址码+0X80
113 1 WriteCommandLCM(X,0);
114 1 WriteDataLCM(DData);
115 1 }
116
117 /*******显示指定坐标的一串字符子函数*****/
C51 COMPILER V8.02 LCD1602_TEXT 03/12/2007 17:32:14 PAGE 3
118
119 void DisplayListChar(uchar X,uchar Y,uchar code *DData)
120 {
121 1 uchar ListLength=0;
122 1 Y&=0x01;
123 1 X&=0x0f;
124 1 while(X<16)
125 1 {
126 2 DisplayOneChar(X,Y,DData[ListLength]);
127 2 ListLength++;
128 2 X++;
129 2 }
130 1 }
131 /**********main funcation************/
132
133 void main(void)
134 {
135 1 delay(500);
136 1 initLCM();
137 1
138 1 WriteCommandLCM(0x01,1); //清显示屏
139 1 DisplayListChar(0,0,str0);
140 1 DisplayListChar(0,1,str1);
141 1
142 1 }
143
-
-
144
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 290 ----
CONSTANT SIZE = 36 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 8
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 + -