📄 display.lst
字号:
C51 COMPILER V7.06 DISPLAY 10/13/2006 09:21:09 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DISPLAY
OBJECT MODULE PLACED IN display.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE display.c LARGE BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <stdio.h>
2 #include <absacc.h>
3 #include <./Atmel/at89x52.h>
4 #include <string.h>
5 #include <intrins.h>
6 #include "source.h"
7 //#include <intrins.h>
8 /*输入的X为以8个点为单位,Y以一个点为单位,宽度也是以8个点为单位的,高度以一个点为单位的.*/
9 unsigned char zero_buf[100]={//为全0的数据,在清除某行的时候用
10 0,0,0,0,0,0,0,0,0,0,
11 0,0,0,0,0,0,0,0,0,0,
12 0,0,0,0,0,0,0,0,0,0,
13 0,0,0,0,0,0,0,0,0,0,
14 0,0,0,0,0,0,0,0,0,0,
15 0,0,0,0,0,0,0,0,0,0,
16 0,0,0,0,0,0,0,0,0,0,
17 0,0,0,0,0,0,0,0,0,0,
18 0,0,0,0,0,0,0,0,0,0,
19 0,0,0,0,0,0,0,0,0,0,
20 };
21 void clear_all(void){
22 1 unsigned int cnt;
23 1 for(cnt=VRAM_BASE;cnt<VRAM_LEN;cnt++){
24 2 XBYTE[cnt]=0X00;
25 2 }
26 1 }
27 /**在orgx,orgy的位置上显示宽度为8,高度为depth的图片**/
28 void draw_wordw8(unsigned char orgx,unsigned int orgy,unsigned char depth,unsigned char *buf){
29 1 unsigned char row;
30 1 unsigned int basex;
31 1 basex=VRAM_BASE+SCREEN_WIDTH*orgy+orgx;
32 1 for(row=0;row<depth;row++){
33 2 XBYTE[basex]=buf[row];
34 2 basex +=SCREEN_WIDTH;
35 2 }
36 1 }
37 /**在orgx,orgy的位置上显示宽度为16,高度为depth的图片**/
38 void draw_wordw16(unsigned char orgx,unsigned int orgy,unsigned char depth,unsigned char *buf){
39 1 unsigned char row;
40 1 unsigned int temp;
41 1 unsigned int basex;
42 1 basex=VRAM_BASE+SCREEN_WIDTH*orgy+orgx;
43 1 for(row=0;row<depth;row++){
44 2 temp=row<<1;
45 2 XBYTE[basex]=buf[temp];
46 2 XBYTE[basex+1]=buf[temp+1];
47 2 basex +=SCREEN_WIDTH;
48 2 }
49 1 }
50 /**在orgx,orgy的位置上显示宽度为24,高度为depth的图片**/
51 void draw_wordw24(unsigned char orgx,unsigned int orgy,unsigned char depth,unsigned char *buf){
52 1 unsigned char row;
53 1 unsigned int temp;
54 1 unsigned int basex;
55 1 basex=VRAM_BASE+SCREEN_WIDTH*orgy+orgx;
C51 COMPILER V7.06 DISPLAY 10/13/2006 09:21:09 PAGE 2
56 1 for(row=0;row<depth;row++){
57 2 temp=row<<1;
58 2 temp +=row;//temp=3*row
59 2 XBYTE[basex]=buf[temp];
60 2 XBYTE[basex+1]=buf[temp+1];
61 2 XBYTE[basex+2]=buf[temp+2];
62 2 basex +=SCREEN_WIDTH;
63 2 }
64 1 }
65 /**在orgx,orgy的位置上显示宽度为32,高度为depth的图片**/
66 void draw_wordw32(unsigned char orgx,unsigned int orgy,unsigned char depth,unsigned char *buf){
67 1 unsigned char row;
68 1 unsigned int temp;
69 1 unsigned int basex;
70 1 basex=VRAM_BASE+SCREEN_WIDTH*orgy+orgx;
71 1 for(row=0;row<depth;row++){
72 2 temp=row<<2;
73 2 XBYTE[basex ]=buf[temp ];
74 2 XBYTE[basex+1]=buf[temp+1];
75 2 XBYTE[basex+2]=buf[temp+2];
76 2 XBYTE[basex+3]=buf[temp+3];
77 2 basex +=SCREEN_WIDTH;
78 2 }
79 1 }
80 /**在orgx,orgy的位置上显示宽度为48,高度为depth的图片**/
81 void draw_wordw48(unsigned char orgx,unsigned int orgy,unsigned char depth,unsigned char *buf){
82 1 unsigned char row;
83 1 unsigned int temp;
84 1 unsigned int basex;
85 1 basex=VRAM_BASE+SCREEN_WIDTH*orgy+orgx;
86 1 for(row=0;row<depth;row++){
87 2 temp=row<<2;
88 2 temp +=row<<1;
89 2 XBYTE[basex ]=buf[temp ];
90 2 XBYTE[basex+1]=buf[temp+1];
91 2 XBYTE[basex+2]=buf[temp+2];
92 2 XBYTE[basex+3]=buf[temp+3];
93 2 XBYTE[basex+4]=buf[temp+4 ];
94 2 XBYTE[basex+5]=buf[temp+5];
95 2 basex +=SCREEN_WIDTH;
96 2 }
97 1 }
98 /**在orgx,orgy的位置上显示宽度为24,高度为24的图片**/
99 void draw_wordw24x24(unsigned char orgx,unsigned int orgy,unsigned char *buf){
100 1 unsigned char row;
101 1 unsigned int temp;
102 1 unsigned int basex;
103 1 basex=VRAM_BASE+SCREEN_WIDTH*orgy+orgx;
104 1 for(row=0;row<3;row++){
105 2 temp=row<<1;
106 2 temp +=row;
107 2 XBYTE[basex]=buf[temp];
108 2 XBYTE[basex+1]=buf[temp+1];
109 2 XBYTE[basex+2]=buf[temp+2];
110 2 basex +=SCREEN_WIDTH;
111 2 }
112 1 }
113 /**在orgx,orgy点阵为24x24,区码为qh,位码为wh的汉字**/
114 void draw_hz24x24(unsigned char orgx,unsigned int orgy,unsigned char qh,unsigned char wh){
115 1 union SFADD offset;
116 1 unsigned int ladd;
117 1 unsigned int basex;
C51 COMPILER V7.06 DISPLAY 10/13/2006 09:21:09 PAGE 3
118 1 unsigned char i;
119 1 if(qh<16){//汉字库的区码从15开始
120 2 return;
121 2 }
122 1 offset.l=(94*(qh-16)+(wh-1));//区位码与flash的对应关系
123 1 offset.l *=72;
124 1 offset.l +=FLASH_ADD_HZK24X24_START;//把其转换为flash可以寻址的范围
125 1 ladd=offset.i[1];
126 1 ladd &=FLASH_ADD_MASK;
127 1 ladd |=FLASH_SPACE_START;//分离出flash的低位地址
128 1 offset.l <<=2;
129 1 FLASHADD=offset.c[1];//分离出flash的高位地址
130 1 basex=VRAM_BASE+SCREEN_WIDTH*orgy+orgx;//确定图片在屏幕上的位置
131 1 if(ladd>=(FLASH_SPACE_END-3*24)){//因为每个汉字使用72个字节,表明其跨越了flash的高位地址.
132 2 for(i=0;i<24;i++){
133 3 XBYTE[basex ]=XBYTE[ladd];
134 3 if(ladd==FLASH_SPACE_END){//高位地址跨越16K字节,高位要进一
135 4 FLASHADD=offset.c[1]+1;//高位地址进一
136 4 ladd=0;
137 4 }
138 3 else{//没有跨越16K字节地址
139 4 ladd++;//低位地址加一
140 4 }
141 3 XBYTE[basex+1]=XBYTE[ladd];
142 3 if(ladd==FLASH_SPACE_END){
143 4 FLASHADD=offset.c[1]+1;
144 4 ladd=0;
145 4 }
146 3 else{
147 4 ladd++;
148 4 }
149 3 XBYTE[basex+2]=XBYTE[ladd];
150 3 if(ladd==FLASH_SPACE_END){
151 4 FLASHADD=offset.c[1]+1;
152 4 ladd=0;
153 4 }
154 3 else{
155 4 ladd++;
156 4 }
157 3 basex +=SCREEN_WIDTH;
158 3 }
159 2 }
160 1 else{//没有跨越16K字节地址
161 2 for(i=0;i<24;i++){
162 3 memcpy((unsigned char *)basex,(unsigned char *)ladd,3);//字节显示
163 3 ladd +=3;//FLASH地址加3
164 3 basex +=SCREEN_WIDTH;//换下一行
165 3 }
166 2 }
167 1 }
168 /**在orgx,orgy点阵为24x24汉字字库扩展为48x48,区码为qh,位码为wh的汉字**/
169 void draw_double_hz24x24(unsigned char orgx,unsigned int orgy,unsigned char qh,unsigned char wh){
170 1 union SFADD offset;
171 1 unsigned char frtemp[3];
172 1 unsigned int ladd;
173 1 unsigned int basex;
174 1 unsigned char i;
175 1 if(qh<16){//汉字库的区码从15开始
176 2 return;
177 2 }
178 1 offset.l=(94*(qh-16)+(wh-1));//区位码与flash的对应关系
179 1 offset.l *=72;
C51 COMPILER V7.06 DISPLAY 10/13/2006 09:21:09 PAGE 4
180 1 offset.l +=FLASH_ADD_HZK24X24_START;//把其转换为flash可以寻址的范围
181 1 ladd=offset.i[1];
182 1 ladd &=FLASH_ADD_MASK;
183 1 ladd |=FLASH_SPACE_START;//分离出flash的低位地址
184 1 offset.l <<=2;
185 1 FLASHADD=offset.c[1];//分离出flash的高位地址
186 1 basex=VRAM_BASE+SCREEN_WIDTH*orgy+orgx;//确定图片在屏幕上的位置
187 1 if(ladd>=(FLASH_SPACE_END-3*24)){//因为每个汉字使用72个字节,表明其跨越了flash的高位地址.
188 2 for(i=0;i<24;i++){
189 3 frtemp[0]=XBYTE[ladd];//取出第一字节的数据
190 3 if(ladd==FLASH_SPACE_END){//高位地址跨越16K字节,高位要进一
191 4 FLASHADD=offset.c[1]+1;//高位地址进一
192 4 ladd=0;
193 4 }
194 3 else{//没有跨越16K字节地址
195 4 ladd++;//低位地址加一
196 4 }
197 3 frtemp[1]=XBYTE[ladd];//取出第二字节的数据
198 3 if(ladd==FLASH_SPACE_END){
199 4 FLASHADD=offset.c[1]+1;
200 4 ladd=0;
201 4 }
202 3 else{
203 4 ladd++;
204 4 }
205 3 frtemp[2]=XBYTE[ladd];//取出第三字节的数据
206 3 if(ladd==FLASH_SPACE_END){
207 4 FLASHADD=offset.c[1]+1;
208 4 ladd=0;
209 4 }
210 3 else{
211 4 ladd++;
212 4 }
213 3 /**下面把一行长度扩展一倍同时变成二行显示**/
214 3 XBYTE[basex ]=double_byte[frtemp[0]][0];
215 3 XBYTE[basex+1]=double_byte[frtemp[0]][1];
216 3 XBYTE[basex+2]=double_byte[frtemp[1]][0];
217 3 XBYTE[basex+3]=double_byte[frtemp[1]][1];
218 3 XBYTE[basex+4]=double_byte[frtemp[2]][0];
219 3 XBYTE[basex+5]=double_byte[frtemp[2]][1];
220 3 basex +=SCREEN_WIDTH;
221 3 XBYTE[basex ]=double_byte[frtemp[0]][0];
222 3 XBYTE[basex+1]=double_byte[frtemp[0]][1];
223 3 XBYTE[basex+2]=double_byte[frtemp[1]][0];
224 3 XBYTE[basex+3]=double_byte[frtemp[1]][1];
225 3 XBYTE[basex+4]=double_byte[frtemp[2]][0];
226 3 XBYTE[basex+5]=double_byte[frtemp[2]][1];
227 3 basex +=SCREEN_WIDTH;
228 3 }
229 2 }
230 1 else{
231 2 for(i=0;i<24;i++){
232 3 frtemp[0]=XBYTE[ladd];ladd++;
233 3 frtemp[1]=XBYTE[ladd];ladd++;
234 3 frtemp[2]=XBYTE[ladd];ladd++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -