📄 lcd.lst
字号:
C51 COMPILER V7.06 LCD 10/31/2006 13:43:02 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN LCD.OBJ
COMPILER INVOKED BY: c:\KEIL\C51\BIN\C51.exe LCD.c DB OE
stmt level source
1 #include "c8051F020.h"
2 #include <intrins.h>
3
4
5 #define LCD_DATA P2
6 #define LCD_RS P10
7 #define LCD_RW P11
8 #define LCD_E P12
9 #define LCD_CS1 P13
10 #define LCD_CS2 P14
11 #define LCD_RST P15
12
13 void Delay1ms(unsigned char);
14
15 #define SELECTCS 0
16 void LCD_WaitReady1(void) //判断LCD控制芯片KS0108是否忙
17 {
18 1 LCD_DATA=0xff;
19 1 _nop_();
20 1 LCD_CS2=SELECTCS;
21 1 LCD_RW=1;
22 1 LCD_RS=0;
23 1 LCD_E=1;
24 1 while (LCD_DATA&0x80);
25 1 LCD_CS2=!SELECTCS;
26 1 }
27
28 void LCD_WaitReady2(void) //判断LCD控制芯片KS0108是否忙
29 {
30 1 LCD_DATA=0xff;
31 1 _nop_();
32 1 LCD_CS1=SELECTCS;
33 1 LCD_RW=1;
34 1 LCD_RS=0;
35 1 LCD_E=1;
36 1 while (LCD_DATA&0x80);
37 1 LCD_CS1=!SELECTCS;
38 1 }
39
40 void LCD_WriteCommand1(char ch) //向LCD控制芯片KS0108发送控制命令
41 {
42 1 LCD_WaitReady1();
43 1 LCD_CS2=SELECTCS;
44 1 LCD_RW=0;
45 1 LCD_RS=0;
46 1 LCD_DATA=ch;
47 1 LCD_E=1;
48 1 LCD_E=0;
49 1 LCD_CS2=!SELECTCS;
50 1 }
51
52 void LCD_WriteCommand2(char ch) //向LCD控制芯片KS0108发送控制命令
53 {
54 1 LCD_WaitReady2();
55 1 LCD_CS1=SELECTCS;
C51 COMPILER V7.06 LCD 10/31/2006 13:43:02 PAGE 2
56 1 LCD_RW=0;
57 1 LCD_RS=0;
58 1 LCD_DATA=ch;
59 1 LCD_E=1;
60 1 LCD_E=0;
61 1 LCD_CS1=!SELECTCS;
62 1 }
63
64 void LCD_WriteData1(char ch) //向LCD控制芯片KS0108发送数据命令
65 {
66 1 LCD_WaitReady1();
67 1 LCD_CS2=SELECTCS;
68 1 LCD_RW=0;
69 1 LCD_RS=1;
70 1 LCD_DATA=ch;
71 1 LCD_E=1;
72 1 LCD_E=0;
73 1 LCD_CS2=!SELECTCS;
74 1 }
75
76 void LCD_WriteData2(char ch) //向LCD控制芯片KS0108发送数据命令
77 {
78 1 LCD_WaitReady2();
79 1 LCD_CS1=SELECTCS;
80 1 LCD_RW=0;
81 1 LCD_RS=1;
82 1 LCD_DATA=ch;
83 1 LCD_E=1;
84 1 LCD_E=0;
85 1 LCD_CS1=!SELECTCS;
86 1 }
87
88
89 void LCD_WriteHZ(char x,char y,char *Dot) //显示16*16点阵汉字
90 {
91 1 char i;
92 1 for (i=0;i<32;i++)
93 1 {
94 2 if ((x+i%16)<64)
95 2 {
96 3 LCD_WriteCommand1(0xB8+y+i/16);
97 3 LCD_WriteCommand1(0x40+x+i%16);
98 3 LCD_WriteData1(Dot[i]);
99 3 }
100 2 else
101 2 {
102 3 LCD_WriteCommand2(0xB8+y+i/16);
103 3 LCD_WriteCommand2(0x40+x-64+i%16);
104 3 LCD_WriteData2(Dot[i]);
105 3 }
106 2 }
107 1 }
108
109 char code Number[]=
110 /*-- 文字: 0123456789:/ --*/
111 {
112 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,
113 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x10,0x10,0x00,0x00,
114 0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x18,0x14,0x12,0x11,0x10,0x18,0x00,
115 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x0C,0x10,0x10,0x10,0x11,0x0E,0x00,
116 0x00,0x80,0x40,0x20,0xF8,0x00,0x00,0x00,0x00,0x03,0x02,0x12,0x1F,0x12,0x12,0x00,
117 0x00,0xF8,0x88,0x48,0x48,0x48,0x88,0x00,0x00,0x0C,0x10,0x10,0x10,0x10,0x0F,0x00,
C51 COMPILER V7.06 LCD 10/31/2006 13:43:02 PAGE 3
118 0x00,0xE0,0x10,0x88,0x88,0x98,0x00,0x00,0x00,0x0F,0x11,0x10,0x10,0x10,0x0F,0x00,
119 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,
120 0x00,0x70,0x88,0x88,0x88,0x88,0x70,0x00,0x00,0x0E,0x11,0x10,0x10,0x11,0x0E,0x00,
121 0x00,0xF0,0x08,0x08,0x08,0x90,0xE0,0x00,0x00,0x00,0x19,0x11,0x11,0x08,0x07,0x00,
122 0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,
123 0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,
124 };
125
126
127 void LCD_WriteChar(char x,char y,char *Dot) //显示8*16点阵字符
128 {
129 1 char i;
130 1 for (i=0;i<16;i++)
131 1 {
132 2 if ((x+i%8)<64)
133 2 {
134 3 LCD_WriteCommand1(0xB8+y+i/8);
135 3 LCD_WriteCommand1(0x40+x+i%8);
136 3 LCD_WriteData1(Dot[i]);
137 3 }
138 2 else
139 2 {
140 3 LCD_WriteCommand2(0xB8+y+i/8);
141 3 LCD_WriteCommand2(0x40+x-64+i%8);
142 3 LCD_WriteData2(Dot[i]);
143 3 }
144 2 }
145 1 }
146
147 void LCD_DispChar(char x,char y,char ch) //128*64 取值x=0-128 y=0-8
148 {
149 1 if ((ch>=0)&&(ch<=0xb))
150 1 {
151 2 LCD_WriteChar(x,y,&Number[ch*16]);
152 2 }
153 1 }
154
155 void InitLCD(void) //初始化LCD
156 {
157 1 char i,j;
158 1 LCD_RST=0;
159 1 Delay1ms(1);
160 1 LCD_RST=1;
161 1 Delay1ms(1);
162 1 LCD_WriteCommand1(0xc0);
163 1 LCD_WriteCommand2(0xc0);
164 1 LCD_WriteCommand1(0x3f); //开显示
165 1 LCD_WriteCommand2(0x3f);
166 1
167 1 for (j=0;j<8;j++) //清屏
168 1 {
169 2 LCD_WriteCommand1(0xB8+j); //清左半屏
170 2 LCD_WriteCommand1(0x40);
171 2 for (i=0;i<64;i++)
172 2 LCD_WriteData1(0x00);
173 2
174 2 LCD_WriteCommand2(0xB8+j); //清右半屏
175 2 LCD_WriteCommand2(0x40);
176 2 for (i=0;i<64;i++)
177 2 LCD_WriteData2(0x00);
178 2 }
179 1 }
C51 COMPILER V7.06 LCD 10/31/2006 13:43:02 PAGE 4
180
181 void DispBmp(char *buf) //显示一幅位图
182 {
183 1 int i,j;
184 1 for (j=0;j<8;j++) //显示位图
185 1 {
186 2 LCD_WriteCommand1(0xB8+j);
187 2 LCD_WriteCommand1(0x40);
188 2 for (i=0;i<64;i++)
189 2 LCD_WriteData1(buf[(j*2)*64+i]);
190 2 LCD_WriteCommand2(0xB8+j);
191 2 LCD_WriteCommand2(0x40);
192 2 for (i=0;i<64;i++)
193 2 LCD_WriteData2(buf[(j*2+1)*64+i]);
194 2 }
195 1 }
196
197 void Delay1s(unsigned char T);
198
199
200
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 718 ----
CONSTANT SIZE = 192 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 14
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 + -