📄 lcd.lst
字号:
C51 COMPILER V7.50 LCD 07/14/2008 10:33:20 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN lcd.obj
COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE source\lcd.c BROWSE DEBUG OBJECTEXTEND PRINT(.\lcd.lst) OBJEC
-T(lcd.obj)
line level source
1 // LCD型号:TC802B
2 // P0为数据口线
3 #include "../header/lcd.h"
4 /***********************************************
5 函 数: InitLcdMouble
6 功 能: 初始化TCB802B所有内部寄存器
7 输 入: /
8 输 出: /
9 描 述: /
10 ***********************************************/
11 void InitLcdMouble(void)
12 {
13 1 WriteLcdCmd(0x01); // 清屏命令
14 1 Delay(3); // 延时3ms
15 1
16 1 WriteLcdCmd(0x38); // 8位数据接口,两行5x7点显示
17 1 Delay(3); // 延时3ms
18 1
19 1 WriteLcdCmd(0x06); // 地址从左至右,自动加1
20 1 Delay(3); // 延时3ms
21 1
22 1 WriteLcdCmd(0x0c); // 开显示,光标关闭,无闪烁
23 1
24 1 LcdDclear();
25 1 LcdDisplay(&logo,0x10);
26 1 }
27 /***********************************************
28 函 数: WriteLcdCmd
29 功 能: 写TCB802B一个内部寄存器
30 输 入: CmdValue
31 输 出: /
32 描 述: /
33 ***********************************************/
34 void WriteLcdCmd(uchar CmdValue)
35 {
36 1 LCD_Rs = false; // 选择指令寄存器
37 1 LCD_Rw = false; // 选择写使能
38 1
39 1 LCD_En = true;
40 1 Delay(1); // 延时1ms
41 1 P0 = CmdValue;
42 1 Delay(1); // 延时1ms
43 1 LCD_En = false; // 下降沿触发锁定
44 1
45 1 LCD_Rw = true; // 恢复默认读使能
46 1 LCD_Rs = true; // 恢复默认数据寄存器
47 1 }
48 /***********************************************
49 函 数: WriteLcdData
50 功 能: 写TCB802B一个显示数据
51 输 入: DataValue
52 输 出: /
53 描 述: /
54 ***********************************************/
C51 COMPILER V7.50 LCD 07/14/2008 10:33:20 PAGE 2
55 void WriteLcdData(uchar DataValue)
56 {
57 1 LCD_Rw = false; // 选择写使能
58 1 Delay(1); // 延时1ms
59 1 LCD_En = true;
60 1 Delay(1); // 延时1ms
61 1 P0 = DataValue;
62 1 Delay(1); // 延时1ms
63 1 LCD_En = false; // 下降沿触发锁定
64 1
65 1 LCD_Rw = true; // 恢复默认读使能
66 1 }
67 /***********************************************
68 函 数: Lcd_Display_Hex()
69 功 能: 显示十六进制数据在LCD上
70 输 入: /
71 输 出: /
72 描 述: /
73 ***********************************************/
74 void Lcd_Display_Hex(uchar hex)
75 {
76 1 uchar temp;
77 1
78 1 temp = hex;
79 1 temp >>= 0x04;
80 1
81 1 /* 以下程序为把十六进制数据换为LCD显示的字模 */
82 1 if((temp&0x0f) >= 0x0a)
83 1 WriteLcdData((temp&0x0f)+0x37);
84 1 else
85 1 WriteLcdData((temp&0x0f)+0x30);
86 1
87 1 if((hex&0x0f) >= 0x0a)
88 1 WriteLcdData((hex&0x0f)+0x37);
89 1 else
90 1 WriteLcdData((hex&0x0f)+0x30);
91 1 }
92 /***********************************************
93 函 数: LcdDisplay
94 功 能: 显示缓冲区数据
95 输 入: buffer,number
96 输 出: /
97 描 述: 从LCD第一个位置开始显示number个数据
98 ***********************************************/
99 void LcdDisplay(uchar *buffer,uchar number)
100 {
101 1 uchar i;
102 1 uchar temp;
103 1
104 1 WriteLcdCmd(0x08); //关显示,光标关闭,无闪烁
105 1 Delay(3); // 延时3ms
106 1
107 1 if(number>0x08)
108 1 {
109 2 temp = number - 0x08;
110 2
111 2 WriteLcdCmd(0x80); // 设置DDRAM地址第一行
112 2 Delay(3); // 延时3ms
113 2 for(i=0x00;i<0x08;i++)
114 2 {
115 3 WriteLcdData(*buffer);
116 3 buffer ++;
C51 COMPILER V7.50 LCD 07/14/2008 10:33:20 PAGE 3
117 3 }
118 2
119 2 Delay(3); // 延时3ms
120 2 WriteLcdCmd(0xc0); // 设置DDRAM地址第二行
121 2 Delay(3); // 延时3ms
122 2 for(i=0x00;i<temp;i++)
123 2 {
124 3 WriteLcdData(*buffer);
125 3 buffer ++;
126 3 }
127 2 }
128 1 else
129 1 {
130 2 WriteLcdCmd(0x80); // 设置DDRAM地址第一行
131 2 Delay(3); // 延时3ms
132 2 for(i=0x00;i<number;i++)
133 2 {
134 3 WriteLcdData(*buffer);
135 3 buffer ++;
136 3 }
137 2 }
138 1
139 1 WriteLcdCmd(0x0c); // 开显示,光标关闭,无闪烁
140 1 }
141 /***********************************************
142 函 数: Lcd_Display_Character
143 功 能: 显示一个字符
144 输 入: /
145 输 出: /
146 描 述: /
147 ***********************************************/
148 void Lcd_Display_Character(uchar character)
149 {
150 1 WriteLcdData(character);
151 1 }
152 /***********************************************
153 函 数: LcdDclear
154 功 能: 清除缓冲区数据
155 输 入: /
156 输 出: /
157 描 述: /
158 ***********************************************/
159 void LcdDclear(void)
160 {
161 1 uchar i;
162 1
163 1 WriteLcdCmd(0x08); // 关显示,光标关闭,无闪烁
164 1 Delay(3); // 延时3ms
165 1
166 1
167 1 WriteLcdCmd(0x80); // 设置DDRAM地址第一行
168 1 Delay(3); // 延时3ms
169 1
170 1 for(i=0x00;i<0x08;i++)
171 1 {
172 2 WriteLcdData(0x20);
173 2 }
174 1
175 1 Delay(3); // 延时3ms
176 1 WriteLcdCmd(0xc0); // 设置DDRAM地址第二行
177 1 Delay(3); // 延时3ms
178 1
C51 COMPILER V7.50 LCD 07/14/2008 10:33:20 PAGE 4
179 1 for(i=0x00;i<0x08;i++)
180 1 {
181 2 WriteLcdData(0x20);
182 2 }
183 1
184 1 WriteLcdCmd(0x0c); // 开显示,光标关闭,无闪烁
185 1 }
186 /***********************************************
187 函 数: Delay
188 功 能: 延时X(0x00-0xff)毫秒
189 输 入: X
190 输 出: /
191 描 述: 误差1ms,要求有定时器定时1ms,使用全局变量Time_count
192 ***********************************************/
193 void Delay(uchar X)
194 {
195 1 Time_Count = X;
196 1 while(Time_Count)
197 1 {
198 2 }
199 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 414 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 11
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 + -