📄 lcd.lst
字号:
C51 COMPILER V7.09 LCD 08/24/2007 09:37:37 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN LCD.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE LCD.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #include"Config.h"
3 #include"IOCfg.c"
4 #include"TimeDLY.h"
5 #include"IIC_PCA8574.h"
6 #include"LCD.h"
7
8 bit x;
9
10 //IO输入输出控制
11 void InitLCDData(bit i)
12 {
13 1 if(i==1) x=PCA8574_PutOne(0x41,0xff);
14 1 else x=PCA8574_PutOne(0x41,0x00);
15 1 }
16
17 //指令/数据选择函数:SetLCD_RS()
18 void SetLCD_RS(bit i)
19 {
20 1 if(i==1) x=PCA8574_PutOne(0x40,0x20);
21 1 else x=PCA8574_PutOne(0x40,0x00);
22 1 }
23
24 //读写操作控制信号:SetLCD_RW()
25 void SetLCD_RW(bit i)
26 {
27 1 if(i==1) x=PCA8574_PutOne(0x40,0x40);
28 1 else x=PCA8574_PutOne(0x40,0x00);
29 1 }
30
31 //使能信号:SetLCD_EN()
32 void SetLCD_EN(bit i)
33 {
34 1 if(i==1) x=PCA8574_PutOne(0x40,0x10);
35 1 else x=PCA8574_PutOne(0x40,0x00);
36 1 }
37
38 //复位:SetLCD_RST()
39 void SetLCD_RST(bit i)
40 {
41 1 if(i==1) x=PCA8574_PutOne(0x40,0x80);
42 1 else x=PCA8574_PutOne(0x40,0x00);
43 1 }
44
45 //读状态函数:ReadStatus()
46 INT8U ReadStatus(void)
47 {
48 1 INT8U i;
49 1 InitLCDData(1);
50 1 SetLCD_RW(1);
51 1 SetLCD_RS(0);
52 1 SetLCD_EN(0);
53 1 nNop(10);
54 1 SetLCD_EN(1);
55 1 nNop(20);
C51 COMPILER V7.09 LCD 08/24/2007 09:37:37 PAGE 2
56 1 x=PCA8574_GetOne(0x41,i);
57 1 nNop(40);
58 1 SetLCD_EN(0);
59 1 return(i);
60 1 }
61
62 //读一字节数据函数:ReadOneByte()
63 INT8U ReadOneByte(void)
64 {
65 1 INT8U i;
66 1 InitLCDData(1);
67 1 SetLCD_RW(1);
68 1 SetLCD_RS(1);
69 1 SetLCD_EN(0);
70 1 nNop(10);
71 1 SetLCD_EN(1);
72 1 nNop(20);
73 1 x=PCA8574_GetOne(0x41,i);
74 1 nNop(40);
75 1 SetLCD_EN(0);
76 1 return(i);
77 1 }
78
79 //写指令函数:WriteInstruc()
80 void WriteInstruc(INT8U Instruction)
81 {
82 1 while((ReadStatus() & 0x80)!= 0x00);
83 1 InitLCDData(0);
84 1 SetLCD_RW(0);
85 1 SetLCD_RS(0);
86 1 SetLCD_EN(0);
87 1 x=PCA8574_PutOne(0x41,Instruction);
88 1 nNop(100);
89 1 SetLCD_EN(1);
90 1 nNop(100);
91 1 SetLCD_EN(0);
92 1 }
93
94 //写一字节数据函数:WriteOneByte()
95 void WriteOneByte(INT8U Data)
96 {
97 1 while((ReadStatus() & 0x80)!= 0x00);
98 1 InitLCDData(0);
99 1 SetLCD_RW(0);
100 1 SetLCD_RS(1);
101 1 SetLCD_EN(0);
102 1 x=PCA8574_PutOne(0x41,Data);
103 1 nNop(100);
104 1 SetLCD_EN(1);
105 1 nNop(100);
106 1 SetLCD_EN(0);
107 1 }
108
109 //复位函数:ResetLCD()
110 void ResetLCD(void)
111 {
112 1 LDelay(40);
113 1 SetLCD_RST(0);
114 1 LDelay(1);
115 1 SetLCD_RST(1);
116 1 LDelay(1);
117 1 }
C51 COMPILER V7.09 LCD 08/24/2007 09:37:37 PAGE 3
118
119 //初始化函数:InitLCD()
120 void InitLCD(void)
121 {
122 1 ResetLCD();
123 1 FunctionSet(0x30); // Function Set: 8_bits_Data, Base_Instrution
124 1 LDelay(1);
125 1 FunctionSet(0x30); // Function Set: 8_bits_Data, Base_Instrution
126 1 LDelay(1);
127 1 Disp_OnOff(0x0c); // Disp_ON: The Whole ALL_ON
128 1 LDelay(1);
129 1 ClearLCD(); // Clear LCD
130 1 LDelay(1);
131 1 PointSet(0x06); // Entry Mode Set: DDRAM Address Counter(AC) + 1
132 1 LDelay(1);
133 1 }
134
135 //显示一个汉字(16x16)函数:DispOneWord()
136 void DispOneWord(INT8U X,INT8U Y,INT16U Word)
137 {
138 1 INT8U Disp_Address;
139 1 INT8U Address_H;
140 1 INT8U Address_L;
141 1
142 1 if((X == 0x00)||(X == 0x02)) // 0,2行
143 1 Address_H = 0x80;
144 1 else // 1,3行
145 1 Address_H = 0x90;
146 1
147 1 if((X == 0x00)||(X == 0x01)) // 0,1行
148 1 Address_L = Y;
149 1 else // 2,3行
150 1 Address_L = Y + 0x08;
151 1 Disp_Address = (Address_H | Address_L) & 0xff;
152 1 SetDDRAM_Add(Disp_Address); // Set DDRAM(Disp_Address)
153 1 WriteOneByte(((Word & 0xff00) >> 8) & 0xff); // H_Byte
154 1 WriteOneByte(Word & 0xff); // L_Byte
155 1 }
156
157
158 //显示两个字符(8x16)函数:DispTwoCharacter()
159 void DispTwoCharacter(INT8U X,INT8U Y,INT8U Character1,INT8U Character2)
160 {
161 1 INT8U Disp_Address;
162 1 INT8U Address_H;
163 1 INT8U Address_L;
164 1
165 1 if((X == 0x00)||(X == 0x02)) // 0,2行
166 1 Address_H = 0x80;
167 1 else // 1,3行
168 1 Address_H = 0x90;
169 1
170 1 if((X == 0x00)||(X == 0x01)) // 0,1行
171 1 Address_L = Y;
172 1 else // 2,3行
173 1 Address_L = Y + 0x08;
174 1 Disp_Address = Address_H | Address_L;
175 1 SetDDRAM_Add(Disp_Address); // Set DDRAM(Disp_Address)
176 1 WriteOneByte(Character1);
177 1 WriteOneByte(Character2);
178 1 }
C51 COMPILER V7.09 LCD 08/24/2007 09:37:37 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 514 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 14
IDATA SIZE = ---- ----
BIT SIZE = 1 5
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -