📄 ks0108.lst
字号:
C51 COMPILER V7.06 KS0108 11/12/2008 09:12:21 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE KS0108
OBJECT MODULE PLACED IN KS0108.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE KS0108.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*--------------------------------------------------------------KS0108 LCD DIRVER-*/
2 /*----------------------------------------------write by codekey, codekey@126.com-*/
3 /*-------------------------------------------------------------------------2008-3-*/
4 /*---------------------------------------------欢迎使用和修改,但需保留原作者信息-*/
5 /*--------------------------------------------------------------------------------*/
6 #include <reg52.h>
7 #include <intrins.h>
8 #include <math.h>
9 #include "KS0108.H"
10
11 UINT8 ReadStatus(UINT8 sel)
12 {
13 1 UINT8 status;
14 1 CS = sel;
15 1 DI = 0; // ┒
16 1 RW = 1; // ┛读状态指令
17 1 E = 1; // 在E高电平期间,数据被读出
18 1 _nop_();
19 1 status = DB;
20 1 E=0;
21 1 _nop_();
22 1 return status;
23 1 }
24
25 void WaitForUse(UINT8 sel)
26 {
27 1 UINT8 status;
28 1 CS=sel;
29 1 do
30 1 {
31 2 DB =0xFF;
32 2 DI = 0; // ┒
33 2 RW = 1; // ┛读状态指令
34 2 E = 1; // 在E高电平期间,数据被读出
35 2 _nop_();
36 2 status = DB;
37 2 E=0;
38 2 _nop_();
39 2 }
40 1 while((status&0x80)==0x80);
41 1 }
42
43 void SetDisplay(UINT8 sel, UINT8 cmd)
44 {
45 1 WaitForUse(sel);
46 1 E = 0;
47 1 CS = sel; // 片选
48 1 DI = 0; // ┒
49 1 RW = 0; // ┛
50 1 DB = cmd;
51 1 E = 1; // ┒
52 1 _nop_();
53 1 E = 0; // ┛在下降沿数据被写入
54 1 }
55
C51 COMPILER V7.06 KS0108 11/12/2008 09:12:21 PAGE 2
56 void SetDispOnOff(UINT8 sel,UINT8 on)
57 {
58 1 if(on){
59 2 SetDisplay(sel,0x3F);
60 2 }
61 1 else{
62 2 SetDisplay(sel,0x3E);
63 2 }
64 1 }
65
66
67 void SetDispFirstRow(UINT8 sel, UINT8 row)
68 {
69 1 SetDisplay(sel, row|0xC0);
70 1 }
71
72 void SetDispCurPage(UINT8 sel, UINT8 page)
73 {
74 1 SetDisplay(sel, (page&0x07)|0xB8);
75 1 }
76
77 void SetDispCurCol(UINT8 sel, UINT8 col)
78 {
79 1 SetDisplay(sel, (col&0x3F)|0x40);
80 1 }
81
82 void WriteData(UINT8 sel,UINT8 wdata)
83 {
84 1 WaitForUse(sel);
85 1 CS = sel; // 片选
86 1 DI = 1; // ┒
87 1 RW = 0; // ┛读状态指令
88 1 E = 0;
89 1 DB = wdata;
90 1 E = 1; // ┒
91 1 _nop_(); //
92 1 E = 0; // ┛在下降沿数据被写入
93 1 _nop_();
94 1 }
95
96 UINT8 ReadData(UINT8 sel)
97 {
98 1 UINT8 rdata;
99 1 WaitForUse(sel);
100 1 CS = sel; // 片选
101 1 DI = 1; // ┒
102 1 RW = 1; // ┛读状态指令
103 1 DB = 0xFF;
104 1 E = 1; // 在E高电平期间,数据被读出
105 1 _nop_();
106 1 rdata = DB;
107 1 E = 0; // 归位
108 1 _nop_();
109 1 return rdata;
110 1 }
111 void DrawAssistFun(UINT8 sel, UINT8 tcp, UINT8 ty1, UINT8 ty2, UINT8 dat, BOOL br, BOOL type)
112 {
113 1 UINT8 rdata=0;
114 1 SetDispCurPage(sel,tcp);
115 1 if(!br)
116 1 SetDispCurCol(sel,ty1%64);
117 1 while(ty1<=ty2)
C51 COMPILER V7.06 KS0108 11/12/2008 09:12:21 PAGE 3
118 1 {
119 2 if(br) // 根据br来确定是否读已经存在的数据
120 2 { // 这样可以节省读取时间(比较耗时)
121 3 SetDispCurCol(sel,ty1%64);
122 3 rdata=ReadData(sel);
123 3 rdata=ReadData(sel);
124 3 SetDispCurCol(sel,ty1%64);
125 3 }
126 2 if(type)
127 2 WriteData(sel,dat|rdata);
128 2 else
129 2 WriteData(sel,dat&rdata);
130 2 ty1++;
131 2 }
132 1 }
133
134 /* 画矩形:[(y1,r1),(y2,r2)], 其中y是列,r是行*/
135 void DrawRect(UINT8 y1, UINT8 r1, UINT8 y2, UINT8 r2, BOOL type) // type为0表示清除
136 {
137 1 UINT8 bp=r1/8; // 开始的page
138 1 UINT8 ep=r2/8; // 结束的page
139 1 UINT8 cp=bp+1; // 当前page
140 1 UINT8 hd,ed,sel;
141 1
142 1 if( y1>y2 || r1>r2 || y2>127 || r2>63 )
143 1 return;
144 1
145 1 while(cp<ep) // 先填充中间的page
146 1 {
147 2 hd = (0==type)? 0: 0xFF;
148 2 if( y2<64 || y1>63 )
149 2 {
150 3 sel=y2/64; // y2>=y1
151 3 DrawAssistFun(sel,cp,y1,y2,hd,0,type);
152 3 }
153 2 else
154 2 {
155 3 DrawAssistFun(0,cp,y1,63,hd,0,type);
156 3 DrawAssistFun(1,cp,0,y2%64,hd,0,type);
157 3 }
158 2 cp+=1;
159 2 }
160 1
161 1 // 中间填充完毕,开始处理两头
162 1 if( bp==ep )
163 1 {
164 2 hd= pow(2,r1%8)-1;
165 2 ed= 0xff-pow(2,r2%8+1)+1;
166 2 hd = 0xff & (~hd)& (~ed);
167 2 sel=y1/64;
168 2 hd = (0==type)? (~hd): hd;
169 2
170 2 if( y2<64 || y1>63 ){
171 3 DrawAssistFun(sel,bp,y1,y2,hd,1,type);
172 3 }
173 2 else{
174 3 DrawAssistFun(0,bp,y1,63,hd,1,type);
175 3 DrawAssistFun(1,bp,0,y2%64,hd,1,type);
176 3 }
177 2 }
178 1 else
179 1 {
C51 COMPILER V7.06 KS0108 11/12/2008 09:12:21 PAGE 4
180 2 hd = (pow(2,r1%8)-1); // 头,
181 2 ed = pow(2,r2%8+1)-1; // 尾
182 2 if(0==type){
183 3 ed = ~ed; // hd本应该取反,故不变
184 3 }
185 2 else{ // 填充
186 3 hd = ~hd; // ed 不变
187 3 }
188 2 if( y2<64 || y1>63 )
189 2 {
190 3 sel=y2/64; // y2>=y1
191 3 DrawAssistFun(sel,bp,y1,y2,hd,1,type);
192 3 DrawAssistFun(sel,ep,y1,y2,ed,1,type);
193 3 }
194 2 else
195 2 {
196 3 DrawAssistFun(0,bp,y1,63,hd,1,type);
197 3 DrawAssistFun(0,ep,y1,63,ed,1,type);
198 3 DrawAssistFun(1,bp,0,y2%64,hd,1,type);
199 3 DrawAssistFun(1,ep,0,y2%64,ed,1,type);
200 3 }
201 2 }
202 1 }
203
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 845 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 14
IDATA SIZE = ---- ----
BIT SIZE = ---- 3
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -