lcd.lst
来自「c8051f020模块.rar」· LST 代码 · 共 565 行 · 第 1/2 页
LST
565 行
C51 COMPILER V8.02 LCD 09/01/2009 17:41:50 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN lcd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <c8051f020.h>
2 #include<intrins.h>
3
4 #define uint8 unsigned char
5 #define uint16 unsigned int
6
7 uint8 j;
8
9 uint8 YE[8]={4,5,6,7,0,1,2,3};
10
11 //uint8 xdata DrawCur[96];
12 uint8 xdata DrawCur[128];
13
14 sbit SDA=P3^7;
15 sbit SCK=P3^6;
16 sbit D_C=P3^5;
17 sbit CSB=P3^4;
18
19
20
21 uint8 xdata num[32][32]={
22 /*-- 文字: 0 --*/
23 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
24 {0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0xF0,0x08,0x04,0x04,0x08,0xF0,0x00},
25
26 /*-- 文字: 1 --*/
27 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
28 {0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00},
29
30 /*-- 文字: 2 --*/
31 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
32 {0x00,0x0E,0x10,0x10,0x10,0x11,0x0E,0x00,0x00,0x0C,0x14,0x24,0x44,0x84,0x0C,0x00},
33
34 /*-- 文字: 3 --*/
35 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
36 {0x00,0x0C,0x10,0x11,0x11,0x12,0x0C,0x00,0x00,0x18,0x04,0x04,0x04,0x88,0x70,0x00},
37
38 /*-- 文字: 4 --*/
39 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
40 {0x00,0x00,0x03,0x04,0x08,0x1F,0x00,0x00,0x00,0xE0,0x20,0x24,0x24,0xFC,0x24,0x00},
41
42 /*-- 文字: 5 --*/
43 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
44 {0x00,0x1F,0x10,0x11,0x11,0x10,0x10,0x00,0x00,0x98,0x84,0x04,0x04,0x88,0x70,0x00},
45
46 /*-- 文字: 6 --*/
47 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
48 {0x00,0x07,0x08,0x11,0x11,0x18,0x00,0x00,0x00,0xF0,0x88,0x04,0x04,0x88,0x70,0x00},
49
50 /*-- 文字: 7 --*/
51 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
52 {0x00,0x1C,0x10,0x10,0x13,0x1C,0x10,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00},
53
54 /*-- 文字: 8 --*/
55 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
C51 COMPILER V8.02 LCD 09/01/2009 17:41:50 PAGE 2
56 {0x00,0x0E,0x11,0x10,0x10,0x11,0x0E,0x00,0x00,0x38,0x44,0x84,0x84,0x44,0x38,0x00},
57
58 /*-- 文字: 9 --*/
59 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
60 {0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0x00,0x8C,0x44,0x44,0x88,0xF0,0x00},
61
62 /*-- 文字: - --*/
63 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
64 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80},
65
66 /*-- 文字: + --*/
67 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
68 {0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xF8,0x80,0x80,0x80,0x00},
69
70 /*-- 文字: H --*/
71 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
72 {0x10,0x1F,0x10,0x00,0x00,0x10,0x1F,0x10,0x04,0xFC,0x84,0x80,0x80,0x84,0xFC,0x04},
73
74 /*-- 文字: Z --*/
75 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
76 {0x08,0x10,0x10,0x10,0x13,0x1C,0x10,0x00,0x04,0x1C,0x64,0x84,0x04,0x04,0x18,0x00},
77
78 /*-- 文字: : --*/
79 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
80 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x6C,0x00,0x00,0x00,0x00}};
81
82
83
84
85
86 uint8 xdata a[32][32]={
87 /*-- 文字: 度 --*/
88 /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
89 {0x00,0x00,0x3F,0x20,0x24,0x24,0x3F,0xA5,0x65,0x25,0x3F,0x24,0x24,0x24,0x20,0x00,
90 0x01,0x06,0xF8,0x01,0x01,0x42,0x62,0x54,0x48,0x48,0x54,0x64,0x42,0x03,0x02,0x00},
91
92 /*-- 文字: 频 --*/
93 /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
94 {0x04,0x3C,0x04,0x04,0xFD,0x24,0x24,0x00,0x4F,0x58,0x6B,0x48,0x48,0x4F,0x40,0x00,
95 0x22,0xC2,0x04,0x08,0xD0,0x20,0xC2,0x02,0xE4,0x18,0xE0,0x10,0x08,0xE4,0x06,0x00},
96
97 /*-- 文字: 率 --*/
98 /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
99 {0x00,0x30,0x28,0x25,0x20,0x26,0xAC,0x75,0x26,0x24,0x28,0x25,0x28,0x20,0x20,0x00,
100 0x10,0x50,0x90,0x10,0x10,0x50,0xD0,0x7F,0x50,0xD0,0x30,0x10,0x90,0x50,0x10,0x00},
101
102 /*-- 文字: 为 --*/
103 /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
104 {0x00,0x08,0x08,0x48,0x28,0x38,0x08,0x0F,0xF9,0x08,0x08,0x08,0x08,0x1F,0x08,0x00,
105 0x00,0x00,0x02,0x04,0x08,0x10,0x60,0x80,0x00,0x88,0x64,0x02,0x04,0xF8,0x00,0x00},
106
107 /*-- 文字: 相 --*/
108 /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
109 {0x08,0x08,0x0B,0xFF,0x0C,0x0A,0x09,0x00,0x7F,0x44,0x44,0x44,0x44,0x7F,0x00,0x00,
110 0x20,0xC0,0x00,0xFF,0x00,0x00,0x80,0x00,0xFF,0x42,0x42,0x42,0x42,0xFF,0x00,0x00},
111
112 /*-- 文字: 位 --*/
113 /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
114 {0x00,0x03,0x0C,0x37,0xC0,0x54,0x13,0x90,0x50,0x70,0x10,0x17,0x12,0x10,0x00,0x00,
115 0x80,0x00,0x00,0xFE,0x04,0x04,0x04,0xE4,0x04,0x0C,0x74,0x84,0x04,0x04,0x04,0x00},
116
117 /*-- 文字: 差 --*/
C51 COMPILER V8.02 LCD 09/01/2009 17:41:50 PAGE 3
118 /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
119 {0x01,0x11,0x15,0x15,0x95,0x75,0x57,0x1D,0x15,0x35,0xD5,0x55,0x15,0x11,0x01,0x00,
120 0x02,0x04,0x08,0x12,0x62,0xA2,0x22,0x22,0x3E,0x22,0x22,0x22,0x22,0x02,0x02,0x00},
121
122 /*-- 文字: 第 --*/
123 /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
124 {0x08,0x10,0x20,0xCB,0x6A,0x5A,0x4A,0x5A,0x2F,0xCA,0x6A,0x5A,0x4E,0x40,0x40,0x00,
125 0x00,0x04,0x04,0xC4,0x48,0x48,0x50,0x60,0xFF,0x40,0x40,0x48,0x44,0x78,0x00,0x00},
126
127 /*-- 文字: 小 --*/
128 /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
129 {0x00,0x00,0x00,0x03,0x0E,0x04,0x00,0xFF,0x00,0x08,0x04,0x03,0x01,0x00,0x00,0x00,
130 0x20,0x40,0x80,0x00,0x00,0x02,0x01,0xFE,0x00,0x00,0x00,0x00,0x80,0xE0,0x40,0x00},
131
132 /*-- 文字: 组 --*/
133 /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
134 {0x00,0x04,0x1C,0xE5,0x46,0x18,0x00,0x7F,0x44,0x44,0x44,0x44,0x7F,0x00,0x00,0x00,
135 0x00,0x44,0xC4,0x44,0x48,0x48,0x04,0xFC,0x44,0x44,0x44,0x44,0xFC,0x04,0x04,0x00},
136
137 /*-- 文字: 制 --*/
138 /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
139 {0x00,0x0A,0xF2,0x52,0x12,0xFF,0x12,0x12,0x12,0x00,0x3F,0x00,0x00,0xFF,0x00,0x00,
140 0x00,0x00,0xFC,0x80,0x80,0xFF,0x84,0x86,0xFC,0x00,0xF0,0x02,0x01,0xFE,0x00,0x00},
141
142 /*-- 文字: 作 --*/
143 /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
144 {0x01,0x02,0x04,0x1F,0xE0,0x44,0x18,0x30,0xDF,0x12,0x12,0x12,0x16,0x12,0x10,0x00,
145 0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x20,0x20,0x20,0x20,0x60,0x20,0x00}};
146
147
148
149 void delay(uint8 m)
150 {
151 1 while(m--);
152 1
153 1 }
154
155
156
157 void lcd_SendByte(uint8 x)
158 {
159 1 uint8 i,n=0x80;
160 1 for(i=0;i<8;i++)
161 1 {
162 2 if (x&n)
163 2 SDA=1;
164 2 else
165 2 SDA=0;
166 2 n=n>>1;
167 2 delay(5);
168 2 SCK=1;
169 2 delay(5);
170 2 SCK=0;
171 2 delay(5);
172 2 SCK=1;
173 2 }
174 1 }
175
176
177 /* 发命令x到主窗口*/
178 void lcd_MC(uint8 x)
179 {
C51 COMPILER V8.02 LCD 09/01/2009 17:41:50 PAGE 4
180 1 SCK=1;
181 1 CSB=0;
182 1 D_C=0;
183 1 lcd_SendByte(x);
184 1 CSB=1;
185 1 }
186
187 /*发数据到主窗口*/
188 void lcd_MD(uint8 x)
189 {
190 1 SCK=1;
191 1 CSB=0;
192 1 D_C=1;
193 1 lcd_SendByte(x);
194 1 CSB=1;
195 1 }
196
197 void lcd_clear(void) //清屏程序
198 {
199 1 uint8 i,page;
200 1 for (page=0;page<8;page++)
201 1 {
202 2 lcd_MC(0xB0|page); // 设置显示页面
203 2 lcd_MC(0x10); // 设置列地址高位
204 2 lcd_MC(0x01); // 设置列地址低位
205 2 for (i=0;i<128;i++)
206 2 {
207 3 lcd_MD(0x00);//lcd_SD(0x00);
208 3 }
209 2 }
210 1 }
211
212
213
214 void LcdIni(void) //液晶屏初始化
215 {
216 1 //P3DIR |=0xFF;
217 1 lcd_MC(0xE2); //液晶屏复位
218 1 lcd_MC(0x2F); //工作状态设置
219 1 lcd_MC(0x81); //电压模式设定
220 1 lcd_MC(0x31); //电压寄存器设定
221 1 lcd_MC(0xA2); //bias=1/9(11)
222 1 lcd_MC(0xA0); //ADC,clo0 maps seg0(8)
223 1 lcd_MC(0xC0); //remapped mode.com0-->comn(15)
224 1 lcd_MC(0x40); //设定起始行地址
225 1 lcd_MC(0xAF); //启动LCD
226 1 lcd_clear();// 清屏
227 1 }
228
229
230 void Init_PORT(void)
231 {
232 1 XBR2=0X40;
233 1 P3MDOUT=0XFF;
234 1 }
235
236
237 void Init_SYSCLK(void)
238 {
239 1 uint8 i;
240 1 OSCXCN = 0X67;//开始外部22.1184M晶振
241 1 for(i = 0;i < 128;i++); //等待外部起振
C51 COMPILER V8.02 LCD 09/01/2009 17:41:50 PAGE 5
242 1 while(!(OSCXCN & 0X80)); //查询标志位
243 1 OSCICN = 0X88;//用外部晶振,并使能始终丢
244 1 }
245
246
247 void lcd_hanzi(uint8 x0,uint8 page,uint8 width) //单个汉字显示
248 {
249 1 uint8 x,i=0;
250 1
251 1 for (x=x0+1;x<x0+width+1;x++) //起始列地址x0,页地址page,数据宽度width
252 1 {
253 2
254 2 // 一次显示两页
255 2
256 2 lcd_MC(0xB0|page); //设置页地址
257 2 lcd_MC(((x>>4)&0x0f)|0x10); // 设置列地址高位
258 2 lcd_MC(x&0x0F); // 设置列地址低位
259 2 lcd_MD(a[j][i]); // 画上层
260 2
261 2 lcd_MC(0xB0|(page-1)); //设置页地址
262 2 lcd_MC(((x>>4)&0x0f)|0x10); // 设置列地址高位
263 2 lcd_MC(x&0x0F); //设置列地址低位
264 2 lcd_MD(a[j][i+width]); // 画下层
265 2 i++;
266 2 }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?