📄 main.lst
字号:
C51 COMPILER V8.02 MAIN 05/08/2012 23:42:32 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 程序:LCD12664液晶显示原理
3 内容:显示动画——飞翔的鸽子
4 学习板:Proteus仿真图
5 液晶:Proteus元件库—AMPIRE128X64(无字库)
6 LCD控制器:KS0108,详细操作见PDF文档
7 软件:keil uVision4
8 作者:大海橡树
9 整理日期:2010-12-08
10 修改:无
11
12 备注:有什么错误的地方,欢迎网友们到空间留言
13
14 O(∩_∩)O~
15 ******http://hi.baidu.com/echoas*****/
16 #include <AT89X52.h>
17 #include <intrins.h>
18 #include"BMP1.h"
19 #include"BMP2.h"
20 #include"BMP3.h"
21 #include"BMP4.h"
22 #include"BMP5.h"
23 #include"BMP6.h"
24 #define uchar unsigned char
25 #define uint unsigned int
26
27 #define LCD_databus P0 //LCD12864的8位数据口
28
29 sbit RS=P2^2; //RS为0---命令;1----数据
30 sbit RW=P2^1; //RW为1---写;0---读
31 sbit EN=P2^0; //使能端
32 sbit CS1=P2^4; //片选1低电平有效,控制左半屏
33 sbit CS2=P2^3; //片选1低电平有效,控制右半屏
34 void delay(uint i)
35 {
36 1 while(--i);
37 1 }
38
39 void Read_busy()//读“忙”函数-----数据线的最高位DB71则busy
40 {
41 1 P0=0x00;
42 1 RS=0;
43 1 RW=1;
44 1 EN=1;
45 1 while(P0 & 0x80);
46 1 EN=0;
47 1 }
48
49 void write_LCD_command(uchar value)//写命令函数
50 {
51 1 Read_busy(); //对LCD的每次读写都要读忙
52 1 RS=0; //选择命令
53 1 RW=0; //读操作
54 1 LCD_databus=value;
55 1 EN=1; //EN由1----0锁存有效数据
C51 COMPILER V8.02 MAIN 05/08/2012 23:42:32 PAGE 2
56 1 delay(2);
57 1 EN=0;
58 1 }
59
60 void write_LCD_data(uchar value)//写数据函数
61 {
62 1 Read_busy();
63 1 RS=1; //选择数据
64 1 RW=0;
65 1 LCD_databus=value;
66 1 EN=1; //EN由1----0锁存有效数据
67 1 delay(2);
68 1 EN=0;
69 1 }
70
71 void Set_page(uchar page)//设置“页”LCD12864共8页,一页是8行点阵点
72 {
73 1 page=0xb8|page; //页的首地址为0xB8
74 1 write_LCD_command(page);
75 1 }
76
77 void Set_line(uchar startline) //设置显示的起始行
78 {
79 1 startline=0xC0|startline; //起始行地址为0xC0
80 1 write_LCD_command(startline); //设置从哪行开始:共0--63;一般从0 行开始显示
81 1 }
82
83 void Set_column(uchar column) //设置显示的列
84 {
85 1 column=column & 0x3f; //列的最大值为64
86 1 column= 0x40|column; //列的首地址为0x40
87 1 write_LCD_command(column);//规定显示的列的位置
88 1 }
89
90 void SetOnOff(uchar onoff) //显示开关函数:0x3E是关显示,0x3F是开显示
91 {
92 1 onoff=0x3e|onoff; //0011 111x,onoff只能为0或者1
93 1 write_LCD_command(onoff);
94 1 }
95
96 void SelectScreen(uchar screen) //选择屏幕
97 {
98 1 switch(screen)
99 1 {
100 2 case 0: CS1=0;CS2=0;break; //全屏
101 2 case 1: CS1=0;CS2=1;break;//左半屏
102 2 case 2: CS1=1;CS2=0;break;//右半屏
103 2 default:break;
104 2 }
105 1 }
106
107 void ClearScreen(uchar screen) //清屏函数
108 {
109 1 uchar i,j;
110 1 SelectScreen(screen); //0--全屏;1---左半屏;2---右半屏
111 1 for(i=0;i<8;i++) //控制页数0-7,共8页
112 1 {
113 2 Set_page(i);
114 2 Set_column(0);
115 2 for(j=0;j<64;j++) //控制列数0-63,共64列
116 2 {
117 3 write_LCD_data(0x00); //写入0,地址指针自加1
C51 COMPILER V8.02 MAIN 05/08/2012 23:42:32 PAGE 3
118 3 }
119 2 }
120 1 }
121
122 void InitLCD() //LCD的初始化
123 {
124 1 Read_busy();
125 1 SelectScreen(0);
126 1 SetOnOff(0); //关显示
127 1 SelectScreen(0);
128 1 SetOnOff(1); //开显示
129 1 SelectScreen(0);
130 1 ClearScreen(0);//清屏
131 1 Set_line(0); //开始行:0
132 1 }
133
134 void Display(uchar ss,uchar page,uchar column,uchar *p)
135 {
136 1 uchar i;
137 1 SelectScreen(ss);
138 1 Set_page(page); //写上半页
139 1 Set_column(column); //控制列
140 1 for(i=0;i<16;i++) //控制16列的数据输出
141 1 {
142 2 write_LCD_data(p[i]); //汉字的上半部分
143 2 }
144 1 Set_page(page+1); //写下半页
145 1 Set_column(column); //控制列
146 1 for(i=0;i<16;i++) //控制16列的数据输出
147 1 {
148 2 write_LCD_data(p[i+16]); //汉字的下半部分
149 2 }
150 1 }
151
152 void display_BMP(uchar a[][64])//显示图形的左边部分
153 {
154 1 uchar i,j;
155 1
156 1 for(j=0;j<8;j++)
157 1 {
158 2 SelectScreen(1);
159 2 Set_page(j);
160 2 Set_column(0);
161 2 for(i=0;i<64;i++)
162 2 {
163 3 write_LCD_data(a[2*j][i]);//每隔一行取一次数组中的数据
164 3 }
165 2 SelectScreen(2);
166 2 Set_page(j);
167 2 Set_column(0);
168 2 for(i=0;i<64;i++)
169 2 {
170 3 write_LCD_data(a[2*j+1][i]);//每隔一行取一次数组中的数据
171 3 }
172 2 }
173 1 }
174
175 void main()
176 {
177 1 InitLCD(); //初始12864
178 1 ClearScreen(0); //清屏
179 1 Set_line(0); //显示开始
C51 COMPILER V8.02 MAIN 05/08/2012 23:42:32 PAGE 4
180 1 while(1)
181 1 {
182 2 display_BMP(table1);
183 2 display_BMP(table2);
184 2 display_BMP(table3);
185 2 display_BMP(table4);
186 2 display_BMP(table5);
187 2 display_BMP(table6);
188 2 }
189 1
190 1 }
191
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 451 ----
CONSTANT SIZE = 6144 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 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 + -