📄 lcd1602.lst
字号:
C51 COMPILER V7.09 LCD1602 07/05/2007 19:59:40 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE LCD1602
OBJECT MODULE PLACED IN LCD1602.obj
COMPILER INVOKED BY: D:\A\KEIL\C51\BIN\C51.EXE LCD1602\LCD1602.c BROWSE DEBUG OBJECTEXTEND PRINT(.\LCD1602.lst) OBJECT(L
-CD1602.obj)
line level source
1 #include "LCD1602.h"
2
3
4 #define BUSYFLAG 0x80 //用于检测LCM状态字中的Busy标识
5
6
7
8 static void short_delay(unsigned int i)
9 {
10 1 while (i>0) i--;
11 1 }
12
13
14 void ReadBusyLCM(void)
15 { // 测试LCD忙碌状态 直到忙碌状态结束
16 1 bit result;
17 1 LCM_Data |= BUSYFLAG; //D7(BF) 1-正在执行内部操作 0-可接收指令
18 1 do
19 1 {
20 2 LCM_RS = 0;
21 2 LCM_RW = 1;
22 2 LCM_E = 1;
23 2 result = (bit)(LCM_Data & 0x80);////
24 2 LCM_E = 0;
25 2 }while (result == 1);
26 1 }
27
28
29 //写数据
30 void WriteDataLCM(unsigned char WDLCM)
31 {
32 1 ReadBusyLCM(); //检测忙
33 1 LCM_Data = WDLCM;
34 1 LCM_RS = 1;
35 1 LCM_RW = 0;
36 1 LCM_E = 1;
37 1 LCM_E = 0; //若晶振速度太高可以在这后加小的延时
38 1 short_delay(250);
39 1 // short_delay(250);
40 1 }
41
42
43 //写指令
44 void WriteCommandLCM(unsigned char WCLCM,unsigned char BusyC) //BusyC为0时忽略忙检测
45 {
46 1 if (BusyC) ReadBusyLCM(); //根据需要检测忙
47 1 LCM_Data = WCLCM;
48 1 LCM_RS = 0;
49 1 LCM_RW = 0;
50 1 LCM_E = 1;
51 1 LCM_E = 0;
52 1 short_delay(250);
53 1 }
54
C51 COMPILER V7.09 LCD1602 07/05/2007 19:59:40 PAGE 2
55
56 void LCMInit(void) //LCM初始化
57 {
58 1 LCM_E = 0;
59 1 WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
60 1 short_delay(250);
61 1 WriteCommandLCM(0x38,0);
62 1 short_delay(250);
63 1 WriteCommandLCM(0x38,0);
64 1 WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号
65 1 WriteCommandLCM(0x08,1); //关闭显示
66 1 WriteCommandLCM(0x01,1); //显示清屏
67 1 WriteCommandLCM(0x06,1); // 显示光标移动设置
68 1 WriteCommandLCM(0x0C,1); // 显示开及光标设置
69 1 short_delay(250);
70 1 }
71
72
73 //按指定位置显示一个字符
74 void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
75 {
76 1 Y &= 0x1;
77 1 X &= 0xF; //限制X不能大于15,Y不能大于1
78 1 if (Y) X |= 0x40; //当要显示第二行时地址码 0x40;
79 1 X |= 0x80; // 算出指令码
80 1 WriteCommandLCM(X, 1); //这里不检测忙信号,发送地址码
81 1 WriteDataLCM(DData);
82 1 }
83
84
85 //按指定位置显示一串字符
86 void DisplayListChar_code(unsigned char X, unsigned char Y, unsigned char code *DData)
87 {
88 1 DisplayOneChar(X,Y,*DData);
89 1 while((*(++DData))>0x20 && ++X<=0xf)
90 1 {
91 2 WriteDataLCM(*DData);
92 2 }
93 1 }
94
95 void DisplayListChar(unsigned char X, unsigned char Y, unsigned char *DData)
96 {
97 1 DisplayOneChar(X,Y,*DData);
98 1 while((*(++DData))>0x20 && ++X<=0xf)
99 1 {
100 2 WriteDataLCM(*DData);
101 2 }
102 1 }
103
104
105 #ifdef ReadDataLCM_ENABLE
106 //读数据
107 unsigned char ReadDataLCM(void)
108 {
109 1 LCM_RS = 1;
110 1 LCM_RW = 1;
111 1 LCM_E = 1;
112 1 LCM_E = 0;
113 1 short_delay(250);
114 1 return(LCM_Data);
115 1 }
116 #endif
C51 COMPILER V7.09 LCD1602 07/05/2007 19:59:40 PAGE 3
117
118
119
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 293 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 6
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -