📄 main.lst
字号:
C51 COMPILER V8.02 MAIN 05/09/2012 00:03:48 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显示图片原理
3 内容:显示国旗和人物头像
4 软件:keil uVision4
5 学习板:HOT-51
6 作者:大海橡树
7 整理日期:2010-11-18 21:00
8 修改:无
9
10 备注:有什么错误的地方,欢迎网友们到空间留言
11
12 O(∩_∩)O~
13
14 *************http://hi.baidu.com/echoas************/
15 #include<AT89X52.h>
16 #include"BMP.h"
17 #include"BMP1.h"
18 #include"BMP2.h"
19 #define uchar unsigned char
20 #define uint unsigned int
21
22 sbit RS=P2^5;
23 sbit RW=P2^6;
24 sbit EN=P2^7; //LCD三个控制端
25
26 void delay(uint i) //延时函数
27 {
28 1 while(--i);
29 1 }
30
31 void read_busy()//读忙函数。每次读写都要进行读忙操作
32 {
33 1 RS=0;
34 1 RW=1;
35 1 EN=1;
36 1 while(P0 & 0x80);//最高位为BF位 DB7---BF
37 1 EN=0;
38 1 }
39
40 void write_LCD_command(uchar value)//写指令函数
41 {
42 1 read_busy();
43 1 RS=0;
44 1 RW=0;
45 1 EN=1; //EN从1---0锁存数据
46 1 P0=value;
47 1 delay(200);
48 1 EN=0;
49 1 }
50
51 void write_LCD_data(uchar value)//写数据函数
52 {
53 1 read_busy();
54 1 RS=1;
55 1 RW=0;
C51 COMPILER V8.02 MAIN 05/09/2012 00:03:48 PAGE 2
56 1 EN=1; //EN从1---0锁存数据
57 1 P0=value;
58 1 delay(200);
59 1 EN=0;
60 1 }
61 /***********************************************
62 函数:显示图片初始化
63 说明:与显示汉字的不一样(基本指令--0x30),显示图
64 片的指令是扩充指令---0x36
65 ***********************************************/
66 void init_BMP()
67 {
68 1 write_LCD_command(0x36);//CL=1--8位。扩充指令(RE=1),绘图打开(G=1)
69 1 delay(100); //适当延时
70 1 write_LCD_command(0x36);
71 1 delay(37);
72 1 write_LCD_command(0x3E); //8位(CL=1),扩充指令(RE=1),绘图打开(G=1)
73 1 delay(100);
74 1 write_LCD_command(0x01);//清屏指令
75 1 delay(100);
76 1 }
77 /**********************************************
78 函数:显示图片
79 说明:要先设定垂直地址再设定水平地址(连续写入两
80 个字节的资料来完成垂直于水平的坐标地址)
81 0x80---0x87:显示上半部分
82 0x88---0x8F:显示下半部分
83 只需设定显示的第一个位置,指针会自动加1
84 **********************************************/
85 void display_BMP(uchar *address)
86 {
87 1 uchar i,j;
88 1 for(i=0;i<32;i++)
89 1 {
90 2 write_LCD_command(0x80+i);//先送垂直地址
91 2 write_LCD_command(0x80); //再送水平地址 ----显示图片的上半部分
92 2 for(j=0;j<16;j++)
93 2 {
94 3 write_LCD_data(*address);
95 3 address++;
96 3 }
97 2 }
98 1
99 1 for(i=0;i<32;i++)
100 1 {
101 2 write_LCD_command(0x80+i); //先送垂直地址
102 2 write_LCD_command(0x88); //显示图片的下半部分
103 2 for(j=0;j<16;j++)
104 2 {
105 3 write_LCD_data(*address);
106 3 address++; //指针地址指向下个位置
107 3 }
108 2 }
109 1 }
110
111 void clear_BMP_RAM()//清除图片显示RAM区的数据,与清屏指令write_LCD_command(0x01)不同
112 {
113 1 uchar i,j;
114 1 for(i=0;i<32;i++)
115 1 {
116 2 write_LCD_command(0x80+i);
117 2 write_LCD_command(0x80);
C51 COMPILER V8.02 MAIN 05/09/2012 00:03:48 PAGE 3
118 2 for(j=0;j<16;j++)
119 2 {
120 3 write_LCD_data(0);//清0
121 3 }
122 2 }
123 1
124 1 for(i=0;i<32;i++)
125 1 {
126 2 write_LCD_command(0x80+i);
127 2 write_LCD_command(0x88);
128 2 for(j=0;j<16;j++)
129 2 {
130 3 write_LCD_data(0);//清0
131 3 }
132 2 }
133 1 }
134
135 void main()
136 {
137 1 while(1)
138 1 {
139 2 init_BMP();
140 2 display_BMP(table);//显示国旗
141 2 delay(50000);
142 2 delay(50000);
143 2 delay(50000);
144 2 delay(50000);
145 2 clear_BMP_RAM();//清除RAM区
146 2 display_BMP(table1);//显示人物头像
147 2 delay(50000);
148 2 delay(50000);
149 2 delay(50000);
150 2 delay(50000);
151 2 clear_BMP_RAM();//清除RAM区
152 2 display_BMP(table2);//显示人物头像
153 2 delay(50000);
154 2 delay(50000);
155 2 delay(50000);
156 2 delay(50000);
157 2 }
158 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 300 ----
CONSTANT SIZE = 3072 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -