📄 lcm320240-function.lst
字号:
C51 COMPILER V7.20 LCM320240_FUNCTION 03/19/2009 15:59:28 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE LCM320240_FUNCTION
OBJECT MODULE PLACED IN LCM320240-function.OBJ
COMPILER INVOKED BY: D:\Program Files\KEIL\C51\BIN\C51.EXE LCM320240-function.C LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 #include"LCM3202403.h"
2
3
4 /* ------------------初始化子程序------------------------*/
5 void LCM_initial(void)
6 {
7 1 wrcmd(SystemSet);//系统设置
8 1 wrdata(0x30);//8*8 1
9 1 wrdata(0x87);//8 2
10 1 wrdata(0x07);//8 3
11 1 wrdata(0x27);//显示每行字节数40 4
12 1 wrdata(0x39);//设置显示频率 5
13 1 wrdata(0xef);//行数240 6
14 1 wrdata(0x28);//一行占缓冲区字节数 7
15 1 wrdata(0x00);
16 1
17 1 wrcmd(Scroll);//存储设置
18 1 wrdata(0x00); // 1
19 1 wrdata(0x00);//起始地址0000H 2
20 1 wrdata(0xef);//240行 3
21 1 wrdata(0x00);// 4
22 1 wrdata(0x40);//起始地址4000H 5
23 1 wrdata(0xef);//240行 6
24 1 wrdata(0x00);// 7
25 1 wrdata(0x80);//起始地址8000H 8
26 1 wrdata(0x00);// 9
27 1 wrdata(0x00);//起始地址0000H 10
28 1
29 1 wrcmd(HdotScr);//设置水平点位移
30 1 wrdata(0x00);
31 1
32 1 wrcmd(Ovlay);//第一层文本格式,三层或关系
33 1 wrdata(0x00);
34 1
35 1 wrcmd(CsrForm);//光标格式设置
36 1 wrdata(0x07);//8*8
37 1 wrdata(0x87);//block cursor
38 1
39 1 wrcmd(DispOn);//显示屏开
40 1 wrdata(0x16);//一区开不闪,二区开不闪,光标闪烁
41 1
42 1 }
43
44
45 /* ------------------图形写入子程序--------------------------*/
46 void LCM_picture(uint x, uint y, uint width, uint height, uchar *p) //write a dot on the 2nd layer
47 {
48 1 uchar i, j;
49 1 uint addr;
50 1 addr = 0x4000 + x + y*AP;
51 1 if(width % 8 == 0)
52 1 width = width / 8; //点阵对应到每行占用的字节数
53 1 else
54 1 width = (width + 8) / 8;//不足一字节,按一字节算,取整
55 1 for(i=0; i<height; i++) //图形点阵,像素高度
C51 COMPILER V7.20 LCM320240_FUNCTION 03/19/2009 15:59:28 PAGE 2
56 1 {
57 2 wrcmd(CsrW); // 光标Locate,定位0x46
58 2 wrdata(addr); // 写入参数CSRL设置参数光标指针低8位
59 2 wrdata(addr>>8); // 写入参数CSRH设置参数光标指针高8位
60 2 wrcmd(CsrDirR); // 光标移动方向定义:自动右移
61 2 wrcmd(mWrite); // 数据写入指令,代码0x42
62 2 for(j=0; j<width; j++)
63 2 {
64 3 wrdata(*p++); // 写入数据
65 3 }
66 2 addr = addr + AP; //按行写入数据,每行在内存中占用地址为AP,所以地址每次加AP
67 2 }
68 1 }
69
70
71 /* ------------------划线子程序--------------------------
72 void LCM_line(uint x1, uint y1, uint x2, uint y2) //write a line on the 2nd layer
73 {
74 int dalt_x, dalt_y, err = 0;
75 if(y1>y2)
76 {
77 SWAP(x1, x2);
78 SWAP(y1, y2);
79 }
80 LCM_dot(x1, y1);
81 dalt_x=x2-x1;
82 dalt_y=y2-y1;
83 if(dalt_x>=0)
84 {
85 if(dalt_y>dalt_x)
86 {
87 while(y1<y2)
88 {
89 if(err<0)
90 {
91 x1=x1+1;
92 y1=y1+1;
93 err=err+dalt_y-dalt_x;
94 }
95 else
96 {
97 y1=y1+1;
98 err=err-dalt_x;
99 }
100 LCM_dot(x1, y1);
101 }
102 }
103 else
104 {
105 if(dalt_y==0)
106 y1=y1-1;
107 while(x1<x2)
108 {
109 if(err<0)
110 {
111 x1=x1+1;
112 err=err+dalt_y;
113 }
114 else
115 {
116 y1=y1+1;
117 x1=x1+1;
C51 COMPILER V7.20 LCM320240_FUNCTION 03/19/2009 15:59:28 PAGE 3
118 err=err+dalt_y-dalt_x;
119 }
120 LCM_dot(x1, y1);
121 }
122 }
123 }
124 else
125 {
126 dalt_x=x1-x2;
127 if(dalt_y>dalt_x)
128 {
129 while(y1<y2)
130 {
131 if(err<0)
132 {
133 x1=x1-1;
134 y1=y1+1;
135 err=err+dalt_y-dalt_x;
136 }
137 else
138 {
139 y1=y1+1;
140 err=err-dalt_x;
141 }
142 LCM_dot(x1, y1);
143 }
144 }
145 else
146 {
147 if(dalt_y==0)
148 y1=y1-1;
149 while(x1>x2)
150 {
151 if(err<0)
152 {
153 x1=x1-1;
154 err=err+dalt_y;
155 }
156 else
157 {
158 x1=x1-1;
159 y1=y1+1;
160 err=err+dalt_y-dalt_x;
161 }
162 LCM_dot(x1, y1);
163 }
164 }
165 }
166 }*/
167
168
169 /* ------------------坐标点写入子程序--------------------------
170 void LCM_dot(uint x, uint y) //write a dot on the 2nd layer
171 {
172 uint addr;
173 uchar addrh, addrl;
174 uchar dotdata = 0x80, m;
175 addr = 0x4000 + x/8 + y*AP;
176 m = x%8;
177 dotdata = dotdata >> m;
178 addrl = addr;
179 addrh = addr>>8;
C51 COMPILER V7.20 LCM320240_FUNCTION 03/19/2009 15:59:28 PAGE 4
180 wrcmd(CsrDirR); // 光标移动方向定义:自动右移
181 wrcmd(CsrW); // 光标Locate,定位0x46
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -