📄 test.lst
字号:
C51 COMPILER V8.06 TEST 03/11/2007 21:30:29 PAGE 1
C51 COMPILER V8.06, COMPILATION OF MODULE TEST
OBJECT MODULE PLACED IN test.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE test.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <intrins.h>
2
3 #include "ZYEL0304.H"
4 #include "Matrix16.H"
5
6 #define CMDADD XBYTE[0x6100] //写指令代码地
7 #define DATAADD XBYTE[0x6000] //写数据通道地址
8
9 unsigned char xdata bmp_info[1536];
10 volatile unsigned char idata info_ln[30];
11
12 #define LINEWIDTH 30 //行宽 30个字节
13 #define LCM_ERR 1
14 #define LCM_SUC 1
15
16 uchar sta01(void) // 状态位STA1,STA0判断(读写指令和读写数据)
17 {
18 1 uchar i;
19 1
20 1 for(i=10;i>0;i--)
21 1 {
22 2 if((CMDADD & 0x03) == 0x03)
23 2 break;
24 2 }
25 1 return i; // 若返回零,说明错误
26 1 }
27
28 uchar sta2(void) // 状态位STA2判断
29 {
30 1 uchar i;
31 1
32 1 for(i=10;i>0;i--)
33 1 {
34 2 if((CMDADD & 0x04) == 0x04)
35 2 break;
36 2 }
37 1 return i; // 若返回零,说明错误
38 1 }
39
40 uchar sta3(void) // 状态位STA3判断
41 {
42 1 uchar i;
43 1
44 1 for(i=10;i>0;i--)
45 1 {
46 2 if((CMDADD & 0x08) == 0x08)
47 2 break;
48 2 }
49 1 return i; // 若返回零,说明错误
50 1 }
51
52 uchar sta6(void) // 状态位STA6判断
53 {
54 1 uchar i;
55 1
C51 COMPILER V8.06 TEST 03/11/2007 21:30:29 PAGE 2
56 1 for(i=10;i>0;i--)
57 1 {
58 2 if((CMDADD & 0x40) == 0x40)
59 2 break;
60 2 }
61 1 return i; // 若返回零,说明错误
62 1 }
63
64 // 返回值
65 uchar writecode(unsigned char com) //写无参数指令
66 {
67 1 uint ret;
68 1 ret=sta01();
69 1 if(ret==0)
70 1 return LCM_ERR;
71 1 else
72 1 CMDADD=com;
73 1 return LCM_SUC;
74 1 }
75
76 uchar write1byte(unsigned char dat1,unsigned char com) //写单字节参数指令
77 {
78 1 uint ret;
79 1 ret=sta01();
80 1 if(ret==0)
81 1 return LCM_ERR;
82 1 else
83 1 DATAADD=dat1;
84 1 ret=sta01();
85 1
86 1 if(ret==0)
87 1 return LCM_ERR;
88 1 else
89 1 CMDADD=com;
90 1 return LCM_SUC;
91 1 }
92
93 uchar write2byte(unsigned char dat1,unsigned char dat2,unsigned char com) //写双字节参数指令
94 {
95 1 uint ret;
96 1 ret=sta01();
97 1 if(ret==0)
98 1 return LCM_ERR;
99 1 else
100 1 DATAADD=dat1;
101 1
102 1 ret=sta01();
103 1 if(ret==0)
104 1 return LCM_ERR;
105 1 else
106 1 DATAADD=dat2;
107 1
108 1 if(ret==0)
109 1 return LCM_ERR;
110 1 else
111 1 CMDADD=com;
112 1 return LCM_SUC;
113 1 }
114
115 uchar disp_ini(void) //显示屏初始化子程序
116 {
117 1 uint ret;
C51 COMPILER V8.06 TEST 03/11/2007 21:30:29 PAGE 3
118 1 ret=write2byte(0x00,0x00,0x40); //设置显示区域首地址0000h
119 1 ret=write2byte(0x10,0x00,0x41); //设置文本显示的宽度,即一行所占的字节数(12864t,16个8X8点阵字符)
120 1 ret=write2byte(0x00,0x08,0x42); //设置图形显示区域首地址0800h,或为文本属性区域首地址
121 1 ret=write2byte(LINEWIDTH,0x00,0x43); //设置图形显示区域宽度,或为文本属性区域宽度
122 1 ret=write2byte(LINEWIDTH,0x00,0x43); //设置图形显示区域宽度,或为文本属性区域宽度
123 1 ret=writecode(0xa7); //光标形状设置
124 1 ret=writecode(0x9c); //显示开关设置,打开图形显示模式
125 1 ret=writecode(0x80); //显示方式设置,逻辑或合成
126 1 return ret;
127 1 }
128
129 uchar clearram(void) //清屏程序
130 {
131 1 unsigned int i;
132 1 uint ret;
133 1
134 1 ret=write2byte(0x00,0x00,0x24); //设置显示ram首地址0000h
135 1 ret=writecode(0xb0); //设置自动写方式
136 1 for(i=8192;i>0;i--) //往显示区域写0;区域大小8k
137 1 {
138 2 ret=sta3();
139 2 DATAADD=0;
140 2 };
141 1 ret=writecode(0xb2); //关闭自动写指令
142 1 return ret;
143 1
144 1 }
145
146 uchar gshowNullword(unsigned char y,unsigned char x) //图形方式下显示空内容
147 //x--显示在第x(0~29)字符列,y--显示在第y(0~127)
148 {
149 1 unsigned int num,ret;
150 1 unsigned char d1,d2,i=16;
151 1 num=y*LINEWIDTH+x+0x800; //图形显示区首地址为0800h
152 1
153 1 for(i=16;i>0;i--)
154 1 {
155 2 d1=num/256; //得到显示屏上汉字显示的相对位置
156 2 d2=num%256;
157 2 ret=write2byte(d2,d1,0x24);
158 2 ret=write1byte(0x00,0xc0); //写汉字左代码
159 2 ret=write1byte(0x00,0xc0); //写汉字右代码
160 2 num+=LINEWIDTH; //显示ram地址修正
161 2 }
162 1 return ret;
163 1 }
164
165 //显示16*16点阵汉字
166 uchar gshowword(unsigned char y,unsigned char x,unsigned char *w_no) //图形方式下显示一个汉字字符(分为左
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -