📄 main.lst
字号:
C51 COMPILER V8.02 MAIN 05/08/2012 23:59:43 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: E:\IDEsoftware\Keil uVision3\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /************http://hi.baidu.com/echoas***************
2 程序:LCD12864自定义显示字符(最多显示4个)
3 内容:ASCII码显示、自带字库显示(8192个)、自定义显示字符(4个)。
4 软件:keil uVision4
5 液晶:QYLCD12864HZ1(带字库)
6 作者:大海橡树
7 整理日期:2010-11-28 11:00
8 修改:无
9
10 备注:有什么错误的地方,欢迎网友们到空间留言
11
12 O(∩_∩)O~
13
14 ************http://hi.baidu.com/echoas*****************/
15 #include<AT89X52.h>
16 #define uchar unsigned char
17 #define uint unsigned int //定义一下,方便使用
18
19 sbit RS=P2^5;
20 sbit RW=P2^6;
21 sbit EN=P2^7; //液晶的三个控制端
22
23 //sbit PSB=P2^4;//1---8位或4位并口方式;0---串口方式。单片机上电高电平,选择的是并口方式
24
25 //繁体中文字“龍”
26 uchar table[]={0x10,0x80,0x08,0x80,0x7E,0xFC,0x24,0x80,0x18,0xFC,0xFF,0x04,0x00,0xFC,0x3E,0x80,
27 0x22,0xF8,0x3E,0x80,0x22,0xF8,0x3E,0x80,0x22,0xFA,0x22,0x82,0x2A,0x82,0x24,0x7E};
28
29 //一个星星、一个月亮
30 unsigned char code zk[]={0x08,0x20,0x1c,0x10,0x1c,0x1c,0xff,0x9e,0x7f,0x1e,0x1c,0x1f,0x3e,0x1f,
31 0x3e,0x1f, 0x77,0x1f,0x41,0x3f,0x00,0x7e,0x00,0xfe,0x83,0xfc,0x7f,0xf8,0x3f,0xf0,0x0f,0xc0,
32 };
33
34 //小人
35 uchar code table2[]={0x03,0xC0,0x04,0x20,0x04,0x20,0x03,0xC0,0x0C,0x30,0x14,0x28,0x14,0x28,0x14,0x28,
36 0x14,0x28,0x17,0xE8,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x0E,0x70,0x0E,0x70};
37
38 //喇叭
39 uchar code table3[]={0x00,0x39,0x00,0x6A,0x00,0xA8,0x01,0x29,0x7E,0x2A,0xFC,0x28,0xFC,0x29,0xCC,0x2A,
40 0xCC,0x28,0xFC,0x29,0xFC,0x2A,0x7E,0x28,0x01,0x29,0x00,0xAA,0x00,0x68,0x00,0x38};
41
42 uchar code table4[]="LCD12864";
43 uchar code table5[]="自定义显示字符";
44 uchar code table6[]="大海橡树";
45
46 void delay(uint i) //延时函数
47 {
48 1 while(--i);
49 1 }
50
51 void read_busy() //读忙标志 最高位为1则busy,不能进行读写操作
52 {
53 1 RS=0;
54 1 RW=1;
55 1 EN=1; //看时序
C51 COMPILER V8.02 MAIN 05/08/2012 23:59:43 PAGE 2
56 1 while(P0 & 0x80);
57 1 EN=0;
58 1 }
59
60 void write_LCD_command(uchar value) //写命令函数
61 {
62 1 read_busy(); //每次读写都要进行读忙标志
63 1 RS=0;
64 1 RW=0;
65 1 delay(200);
66 1 EN=1; //EN从1--0锁存数据
67 1 P0=value;
68 1 delay(200);
69 1 EN=0;
70 1 }
71
72 void write_LCD_data(uchar value) //写数据函数
73 {
74 1 read_busy();
75 1 RS=1;
76 1 RW=0;
77 1 delay(200);
78 1 EN=1; //EN从1--0锁存数据
79 1 P0=value;
80 1 delay(200);
81 1 EN=0;
82 1 }
83
84 void init_LCD() //8位并口方式LCD1864初始化函数
85 {
86 1 delay(4000); //等待时间>40ms
87 1 write_LCD_command(0x30);//功能设定:8位数据、基本指令操作
88 1 delay(100); //等待时间>100us
89 1 write_LCD_command(0x30);//功能设定:8位数据、基本指令操作
90 1 delay(37); //等待时间>37us
91 1 write_LCD_command(0x0C);//显示设定:整体显示、游标关、不反白
92 1 delay(100); // 等待时间>100us
93 1 write_LCD_command(0x01);//清屏指令
94 1 delay(10000); //等待时间>10ms
95 1 write_LCD_command(0x06);//进入点设定:地址指针加1
96 1 }
97
98 /*=============================================
99 自定义汉字函数:CGRAM自定义显示字符
100 地址 显示编码
101 0x40 0x0000
102 0x50 0x0002
103 0x60 0x0004
104 0x70 0x0006
105 共可显示四个自定义字符!
106 显示自定义字符前,先要设定显示的位置,否则会乱码
107 ==============================================*/
108 void CGRAM()
109 {
110 1 uchar i;
111 1 write_LCD_command(0x30);//基本指令操作
112 1 write_LCD_command(0x40);//设定CGRAM字符的位置
113 1 for(i=0;i<16;i++)
114 1 {
115 2 write_LCD_data(table[i*2]);
116 2 write_LCD_data(table[i*2+1]);//送显示数据到CGRAM区中
117 2 }
C51 COMPILER V8.02 MAIN 05/08/2012 23:59:43 PAGE 3
118 1 write_LCD_command(0x50);
119 1 for(i=0;i<16;i++)
120 1 {
121 2 write_LCD_data(zk[i*2]);
122 2 write_LCD_data(zk[i*2+1]);
123 2 }
124 1 write_LCD_command(0x60);
125 1 for(i=0;i<16;i++)
126 1 {
127 2 write_LCD_data(table2[i*2]);
128 2 write_LCD_data(table2[i*2+1]);
129 2 }
130 1
131 1 write_LCD_command(0x70);
132 1 for(i=0;i<16;i++)
133 1 {
134 2 write_LCD_data(table3[i*2]);
135 2 write_LCD_data(table3[i*2+1]);
136 2 }
137 1
138 1 }
139
140 void main()
141 {
142 1 uchar num;
143 1 init_LCD();
144 1
145 1 while(1)
146 1 {
147 2 write_LCD_command(0x80);
148 2 for(num=0;num<8;num++)
149 2 {
150 3 write_LCD_data(table6[num]);
151 3 }
152 2 write_LCD_command(0x84);
153 2 for(num=0;num<8;num++)
154 2 {
155 3 write_LCD_data(table4[num]);
156 3 }
157 2
158 2 write_LCD_command(0x90);
159 2 for(num=0;num<14;num++)
160 2 {
161 3 write_LCD_data(table5[num]);
162 3 }
163 2
164 2 CGRAM();
165 2 write_LCD_command(0x98);
166 2 write_LCD_data(0x00);
167 2 write_LCD_data(0x00);//第一个自定义显示字符编码为:0x0000
168 2
169 2 write_LCD_command(0x99);
170 2 write_LCD_data(0x00);
171 2 write_LCD_data(0x02);//第一个自定义显示字符编码为:0x0002
172 2
173 2 write_LCD_command(0x9A);
174 2 write_LCD_data(0x00);
175 2 write_LCD_data(0x04);//第一个自定义显示字符编码为:0x0004
176 2
177 2 write_LCD_command(0x9B);
178 2 write_LCD_data(0x00);
179 2 write_LCD_data(0x06);//第一个自定义显示字符编码为:0x0006
C51 COMPILER V8.02 MAIN 05/08/2012 23:59:43 PAGE 4
180 2 }
181 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 410 ----
CONSTANT SIZE = 129 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 32 ----
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 + -