📄 temp.lst
字号:
C51 COMPILER V7.01 TEMP 09/23/2008 14:27:38 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE TEMP
OBJECT MODULE PLACED IN TEMP.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE TEMP.C OPTIMIZE(6,SPEED) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg52.h>
2 #include <hz.h>
3
4 //宏**************************************************************************************************8
5 #define zkpos(num,stadd) (stadd+(num&0x00ff)*32)//通过字符编号算出字符在字符库中的地址num的低两位为地址编
-号
6
7 typedef unsigned char uchar;
8
9 //全局变量声明
10 extern unsigned char xdata KEY_BUF;
11
12 //变量定义**************************************************************************
13 unsigned char xdata XPOS; //XPOS 为0~7
14 unsigned char xdata YPOS; //YPOS 为0~127
15 unsigned char data COM; //command
16 unsigned char data DAT; //data
17 unsigned char code * data HZKSTADD = hzk;//汉字库起始地址
18 //地址定义*********************************
19 /*unsigned char xdata *WCADD_1=0x4000;
20 unsigned char xdata *RCADD_1=0x4200;
21 unsigned char xdata *WDADD_1=0x4100;
22 unsigned char xdata *RDADD_1=0x4300;
23
24 unsigned char xdata *WCADD_2=0x6000;
25 unsigned char xdata *RCADD_2=0x6200;
26 unsigned char xdata *WDADD_2=0x6100;
27 unsigned char xdata *RDADD_2=0x6300;
28 */
29 unsigned char xdata *WCADD_1=0xC000;
30 unsigned char xdata *RCADD_1=0xC002;
31 unsigned char xdata *WDADD_1=0xC001;
32 unsigned char xdata *RDADD_1=0xC003;
33
34 unsigned char xdata *WCADD_2=0xE000;
35 unsigned char xdata *RCADD_2=0xE002;
36 unsigned char xdata *WDADD_2=0xE001;
37 unsigned char xdata *RDADD_2=0xE003;
38
39 //变量声明************************************************
40 bit FB_FLAG;//反白标志位,反白FB_FLAG=1,正常FB_FLAG=0
41
42 //读写基本子程序
43 void cmdwrite_1(uchar com)//左侧写命令
44 {
45 1 while((*RCADD_1&0x80)!=0);//不为0 ,忙,等待
46 1 *WCADD_1=com;
47 1 }
48
49 void datwrite_1(uchar dat)//左侧写数据
50 {
51 1 while((*RCADD_1&0x80)!=0);//不为0 ,忙,等待
52 1 *WDADD_1=dat;
53 1 }
54
C51 COMPILER V7.01 TEMP 09/23/2008 14:27:38 PAGE 2
55 /*
56 void datread_1() //左侧读数据(no use)
57 {
58 while(*RCADD_1&0x80!=0);
59 DAT=*RDADD_1;
60 }
61 */
62
63 void cmdwrite_2(uchar com)//右侧写命令
64 {
65 1 while((*RCADD_2&0x80)!=0);//不为0 ,忙,等待
66 1 *WCADD_2=com;
67 1 }
68
69 void datwrite_2(uchar dat)//右侧写数据
70 {
71 1 while((*RCADD_2&0x80)!=0);//不为0 ,忙,等待
72 1 *WDADD_2=dat;
73 1 }
74
75 /*
76 void datread_2()//右侧读数据(no use)
77 {
78 while(*RCADD_2&0x80!=0);
79 DAT=*RDADD_2;
80 }
81 */
82 //---------------------------------------------------------------
83
84 //初始化
85 void lcm_init()
86 {
87 1 COM=0x3f;//开显示
88 1 cmdwrite_1(COM);
89 1 cmdwrite_2(COM);
90 1
91 1 COM=0xc0;//显示启始行
92 1 cmdwrite_1(COM);
93 1 cmdwrite_2(COM);
94 1 }
95 //---------------------------------------------------------------
96
97 //清屏
98 void clearscreen()
99 {
100 1 uchar x,y;
101 1 for(x=0;x<8;x++)
102 1 {
103 2 COM=x|0xB8;
104 2 cmdwrite_1(COM);
105 2 cmdwrite_2(COM);
106 2 COM=0X40;
107 2 cmdwrite_1(COM);
108 2 cmdwrite_2(COM);
109 2 for(y=0;y<64;y++)
110 2 {
111 3 DAT=0x0;
112 3 datwrite_1(DAT);
113 3 datwrite_2(DAT);
114 3 }
115 2 }
116 1 }
C51 COMPILER V7.01 TEMP 09/23/2008 14:27:38 PAGE 3
117 //---------------------------------------------------------------
118
119 //设定液晶显示起始坐标,输入:液晶显示字符的地址 XPOS为0~7,YPOS为0~127,不影响XPOS,YPOS
120 void setxy()
121 {
122 1 if(YPOS<=63)
123 1 { //设左侧lcm
124 2 cmdwrite_1(XPOS|0xB8);//设左侧页命令
125 2 cmdwrite_1(YPOS|0x40);}//设左侧列命令
126 1 else
127 1 { //设右侧LCM
128 2 cmdwrite_2(XPOS|0xB8);//设左侧页命令
129 2 cmdwrite_2(YPOS|0x40);
130 2 }//设左侧列命令
131 1 }
132 //--------------------------------------------------------
133
134 //写一个字节,不影响YPOS
135 void write_byte()
136 {
137 1 if(YPOS<=63)
138 1 datwrite_1(DAT);//字节写入左侧
139 1 else
140 1 datwrite_2(DAT);//字节写入右侧
141 1 }
142 //-----------------------------------------------------------
143
144 //写一个汉字16*16,输入:液晶显示字符的起始坐标XPOS,YPOS,字符的首地址*hzkpos,执行后XPOS,YPOS 不变
145 void write_ch(uchar *hzkpos)
146 {
147 1 uchar xtimes,ytimes,ytemp;
148 1 for(xtimes=0;xtimes<2;xtimes++)
149 1 {
150 2 XPOS=XPOS+xtimes; //换下一页,一个汉字占两页
151 2 ytemp=YPOS;
152 2 for(ytimes=0;ytimes<16;ytimes++)//一页中列变量自动加1写16列,但YPOS不变
153 2 {
154 3 if(FB_FLAG==0)
155 3 DAT=*hzkpos;
156 3 else
157 3 DAT=(255-*hzkpos);
158 3 YPOS++;
159 3 setxy();
160 3 write_byte();//将一个字节写入
161 3 hzkpos++;
162 3 }//指向下个字节
163 2 YPOS = ytemp;
164 2 }
165 1 XPOS--;
166 1 }//恢复页坐标
167 //-----------------------------------------------------------------------
168
169 //写一个英文字符8*16,输入:液晶显示字符的起始坐标XPOS,YPOS,字符的首地址hzkpos,执行后XPOS,YPOS 不变
170 void write_eng(uchar *hzkpos)
171 {
172 1 uchar xtimes,ytimes,ytemp;
173 1 for(xtimes=0;xtimes<2;xtimes++)
174 1 {
175 2 XPOS = XPOS+xtimes; //换下一页,一个字符占两页
176 2 ytemp = YPOS;
177 2 for(ytimes=0;ytimes<8;ytimes++)//一页 列变量自动加1写8列,但YPOS不变
178 2 {
C51 COMPILER V7.01 TEMP 09/23/2008 14:27:38 PAGE 4
179 3 if(FB_FLAG==0)
180 3 DAT=*hzkpos;
181 3 else
182 3 DAT=(255-*hzkpos);
183 3 YPOS++;
184 3 setxy();
185 3 write_byte();//将一个字节写入
186 3 hzkpos++;
187 3 }
188 2 YPOS = ytemp;
189 2 }//指向下个字节
190 1 XPOS--;
191 1 }
192 //---------------------------------------------------------------------
193
194 //确定下个汉字在液晶上的显示坐标XPOS,YPOS,输入XPOS,YPOS为上一字符的坐标
195 void c_lcmnext()
196 {
197 1 YPOS=YPOS+16;
198 1 if(YPOS>127)
199 1 {
200 2 XPOS=XPOS+2;
201 2 YPOS=0;
202 2 }
203 1 }//写到最后一列,换到下一个字符显示行,列坐标置0
204 //----------------------------------------------------------------
205
206 //确定下个英文在液晶上的显示坐标XPOS,YPOS,输入XPOS,YPOS为上一字符的坐标
207 void e_lcmnext()
208 {
209 1 YPOS=YPOS+8;
210 1 if(YPOS>127)
211 1 {
212 2 XPOS=XPOS+2;
213 2 YPOS=0;
214 2 }
215 1 }//写到最后一列,换到下一个字符显示行,列坐标置0
216 //-------------------------------------------------------------------
217
218 //以下为被调用函数putstr,输入为字符串起始坐标XPOS,YPOS, 字符串的起始地址STR,是否需要反白显示标志位FB_FLAG
219 void putstr(unsigned int *STR)
220 {
221 1 unsigned int *charnumpt=STR;//指向编号的指针。最初指向该字符串的第一个字符编码
222 1 unsigned int charnum;
223 1 unsigned char code *hzkpos;//字符在汉字库中的地址
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -