📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 10/29/2006 14:32:09 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <stdio.h>
2 #include <absacc.h>
3 #include <./Atmel/at89x52.h>
4 #define uchar unsigned char
5 #define MWCMD(a) XBYTE[0X40]=(a) //主控制器写命令
6 #define MWDATA(a) XBYTE[0X41]=(a) //主控制器写数据
7 #define MRCMD XBYTE[0X42] //主控制器读命令
8 #define MRDATA XBYTE[0X43]= //主控制器读数据
9 #define SWCMD(a) XBYTE[0X80]=(a) //从控制器写命令
10 #define SWDATA(a) XBYTE[0X81]=(a) //从控制器写数据
11 #define SRCMD XBYTE[0X82] //从控制器读命令
12 #define SRDATA XBYTE[0X83] //从控制器读数据
13 #define BLIGHT_ON P1_7=0 //背光开
14 #define BLIGHT_OFF P1_7=1 //背光关
15 #define LCD_RST_ON P1_6=0 //对液晶模块进行硬件复位
16 #define LCD_RST_OFF P1_6=1 //对液晶模块进行硬件复位解除
17 #define PWM_PORT P1_5 //PWM模拟端口
18 uchar code NanJing[]={
19 /*-- 文字: 南 --*/
20 /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
21 0x20,0x20,0x27,0x24,0x24,0x26,0x2D,0xF4,0x24,0x25,0x26,0x24,0x24,0x67,0x20,0x00,
22 0x00,0x00,0xFE,0x20,0xA0,0xA0,0xA0,0xFE,0xA0,0xA0,0xA0,0xA4,0x22,0xFC,0x00,0x00,
23
24 /*-- 文字: 京 --*/
25 /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
26 0x00,0x20,0x20,0x27,0x24,0x24,0xA4,0x64,0x24,0x24,0x24,0x27,0x60,0x20,0x00,0x00,
27 0x00,0x04,0x08,0x98,0xB0,0x82,0x81,0xFE,0x80,0x80,0xA0,0xB0,0x1C,0x08,0x00,0x00,
28 };
29 uchar code Asc12[]={
30 /*-- 文字: 1 --*/
31 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
32 0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,
33
34 /*-- 文字: 2 --*/
35 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
36 0x00,0x0E,0x10,0x10,0x10,0x11,0x0E,0x00,0x00,0x0C,0x14,0x24,0x44,0x84,0x0C,0x00,
37 };
38 struct PIC {
39 uchar x;
40 uchar y;
41 uchar w;
42 uchar h;
43 uchar *dat;
44 };
45 void Init_Lcd(void);
46 void drawbmp(struct PIC *p);
47 void clearbmp(struct PIC *p);
48 main(){
49 1 struct PIC This;
50 1 unsigned int i=0;
51 1 IE=0X40;
52 1 EA=1; /* Enable interrupts */
53 1 Init_Lcd();
54 1 BLIGHT_ON;
55 1 while(1){
C51 COMPILER V7.06 MAIN 10/29/2006 14:32:09 PAGE 2
56 2 i++;
57 2 if(i==10000){
58 3 This.x=0;This.y=0;
59 3 This.w=16;This.h=16;
60 3 clearbmp(&This);
61 3 This.w=32;This.h=16;
62 3 This.dat=NanJing;
63 3 drawbmp(&This);
64 3 }
65 2 else if(i==20000){
66 3 This.x=0;This.y=0;
67 3 This.w=32;This.h=16;
68 3 clearbmp(&This);
69 3 This.w=16;This.h=16;
70 3 This.dat=Asc12;
71 3 drawbmp(&This);
72 3 }
73 2 }
74 1 }
75 void Init_Lcd(void){
76 1 unsigned int i;
77 1 LCD_RST_ON;//对LCD进行硬件复位
78 1 for(i=0;i<500;i++){
79 2 }
80 1 LCD_RST_OFF;//解除硬件复位
81 1 /***下面开始对LCD进行初始化**/
82 1 /*MWCMD(0xae);SWCMD(0xae); //显示开关:关
83 1 MWCMD(0xc0);SWCMD(0xc0); //显示起始在第一行
84 1 MWCMD(0xa4);SWCMD(0xa4); //static driver 关
85 1 MWCMD(0x00);SWCMD(0x00); //列地址设置为 0列
86 1 MWCMD(0xbb);SWCMD(0xbb); //页地址设置为 0页
87 1 MWCMD(0xa9);SWCMD(0xa9); //占空比选择
88 1 MWCMD(0xa0);SWCMD(0xa0); //ADC选择 rightward
89 1 MWCMD(0xee);SWCMD(0xee); //读修改写:关
90 1 */
91 1 /***在实际初始化中发现只采用以下几就可以完成初始化了,而用上面的初始化代码不行****/
92 1 MWCMD(0xaf);SWCMD(0xaf); //显示开关 :开
93 1 MWCMD(0x00);SWCMD(0x00); //列地址设置为 0列
94 1 MWCMD(0xbb);SWCMD(0xbb); //页地址设置为 0页
95 1 }
96 #define setpages(page) SWCMD(0xb8+((page)&0x03))
97 #define setcols(address) SWCMD((address)&0x7f) //column
98 #define setpagem(page) MWCMD(0xb8+((page)&0x03))
99 #define setcolm(address) MWCMD((address)&0x7f)
100 void drawbmp(struct PIC *p){//y must 0,8,16 or 24
101 1 /*display a 8*8 bitmap */
102 1 uchar i;
103 1 uchar *buf;
104 1 buf=p->dat;
105 1 setpages(p->y/8);
106 1 setpagem(p->y/8);
107 1 if(p->h==8){
108 2 for(i=p->x;i<p->w+p->x;i++){
109 3 if(i<61){//是主控制器控制的列
110 4 setcolm(i);
111 4 MWDATA(*buf);
112 4 }
113 3 else{//是从控制器控制的列
114 4 setcols(i-61);
115 4 SWDATA(*buf);
116 4 }
117 3 buf++;
C51 COMPILER V7.06 MAIN 10/29/2006 14:32:09 PAGE 3
118 3 }
119 2 }
120 1 else if(p->h==16){
121 2 for(i=p->x;i<p->w+p->x;i++){
122 3 if(i<61){//是主控制器控制的列
123 4 setcolm(i);
124 4 MWDATA(*buf);
125 4 }
126 3 else{//是从控制器控制的列
127 4 setcols(i-61);
128 4 SWDATA(*buf);
129 4 }
130 3 buf +=2;
131 3 }
132 2 buf=p->dat+1;
133 2 setpages(p->y/8+1);
134 2 setpagem(p->y/8+1);
135 2 for(i=p->x;i<p->w+p->x;i++){
136 3 if(i<61){//是主控制器控制的列
137 4 setcolm(i);
138 4 MWDATA(*buf);
139 4 }
140 3 else{//是从控制器控制的列
141 4 setcols(i-61);
142 4 SWDATA(*buf);
143 4 }
144 3 buf +=2;
145 3 }
146 2 }
147 1 }
148 void clearbmp(struct PIC *p){//y must 0,8,16 or 24
149 1 uchar i,j;
150 1 uchar *buf;
151 1 for(j=0;j<p->h/8;j++){
152 2 setpages(p->y/8+j);
153 2 setpagem(p->y/8+j);
154 2 for(i=p->x;i<p->w+p->x;i++){
155 3 if(i<61){//是主控制器控制的列
156 4 setcolm(i);
157 4 MWDATA(0);
158 4 }
159 3 else{//是从控制器控制的列
160 4 setcols(i-61);
161 4 SWDATA(0);
162 4 }
163 3 buf++;
164 3 }
165 2 }
166 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 739 ----
CONSTANT SIZE = 96 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 21
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 + -