📄 chengxu.lst
字号:
145 1 //**************求取红色因子***********************
146 1 TH0=(65536-10000)/256;
147 1 TL0=(65536-10000)%256;
148 1 TH1=0;
149 1 TL1=0;
150 1 tcs230_s2=0;
151 1 tcs230_s3=0;//选择红色滤光器
152 1 tcs230_en=0;
153 1 TR0=1;//10毫秒开始计时
154 1 TR1=1;//开始计数
155 1 while(TF0==0);//等待定时器溢出
156 1 TF0=0;//清楚定时器0溢出标志
157 1 TR0=0;//关闭定时0
158 1 TR1=0;
159 1 ryz=TH1*256+TL1;//其实这里的比例因子应该为255/(TH1*256+TL1)
160 1 //**************求取蓝色因子***********************
161 1 TH0=(65536-10000)/256;
162 1 TL0=(65536-10000)%256;
163 1 TH1=0;
164 1 TL1=0;
165 1 tcs230_s2=0;
166 1 tcs230_s3=1;//选择蓝色滤光器
167 1 TR0=1;//10毫秒开始计时
168 1 TR1=1;//开始计数
169 1 while(TF0==0);//等待定时器溢出
170 1 TF0=0;//清楚定时器0溢出标志
171 1 TR0=0;//关闭定时0
172 1 TR1=0;
173 1 byz=TH1*256+TL1;//其实这里的比例因子应该为255/(TH1*256+TL1)
174 1 //**************求绿红色因子***********************
175 1 TH0=(65536-10000)/256;
176 1 TL0=(65536-10000)%256;
177 1 TH1=0;
178 1 TL1=0;
179 1 tcs230_s2=1;
C51 COMPILER V8.05a CHENGXU 04/11/2012 16:53:31 PAGE 4
180 1 tcs230_s3=1;//选择绿色滤光器
181 1 TR0=1;//10毫秒开始计时
182 1 TR1=1;//开始计数
183 1 while(TF0==0);//等待定时器溢出
184 1 TF0=0;//清楚定时器0溢出标志
185 1 TR0=0;//关闭定时0
186 1 TR1=0;
187 1 tcs230_en=1;
188 1 gyz=TH1*256+TL1;//其实这里的比例因子应该为255/(TH1*256+TL1)
189 1 }
190 /*======================================================================
191 LCM初始化
192 ======================================================================*/
193 void LCMInit(void)
194 {
195 1 LCM_Data = 0;
196 1 WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
197 1 DelayMs(5);
198 1 WriteCommandLCM(0x38,0);
199 1 DelayMs(5);
200 1 WriteCommandLCM(0x38,0);
201 1 DelayMs(5);
202 1 WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号
203 1 WriteCommandLCM(0x08,1); //关闭显示
204 1 WriteCommandLCM(0x01,1); //显示清屏
205 1 WriteCommandLCM(0x06,1); // 显示光标移动设置
206 1 WriteCommandLCM(0x0C,1); // 显示开及光标设置
207 1 DelayMs(100);
208 1 }
209 //==============================LCD1602显示子程序================================================
210 // 写数据函数: E =高脉冲 RS=1 RW=0
211 //======================================================================*/
212 void WriteDataLCM(uchar WDLCM)
213 {
214 1 ReadStatusLCM(); //检测忙
215 1 LCM_Data = WDLCM;
216 1 LCM_RS = 1;
217 1 LCM_RW = 0;
218 1 LCM_E = 0; //若晶振速度太高可以在这后加小的延时
219 1 LCM_E = 0; //延时
220 1 LCM_E = 1;
221 1 }
222 /*====================================================================
223 写指令函数: E=高脉冲 RS=0 RW=0
224 ======================================================================*/
225 void WriteCommandLCM(uchar WCLCM,BuysC) //BuysC为0时忽略忙检测
226 {
227 1 if (BuysC) ReadStatusLCM(); //根据需要检测忙
228 1 LCM_Data = WCLCM;
229 1 LCM_RS = 0;
230 1 LCM_RW = 0;
231 1 LCM_E = 0;
232 1 LCM_E = 0;
233 1 LCM_E = 1;
234 1 }
235 /*====================================================================
236 正常读写操作之前必须检测LCD控制器状态:E=1 RS=0 RW=1;
237 DB7: 0 LCD控制器空闲,1 LCD控制器忙。
238 读状态
239 ======================================================================*/
240 uchar ReadStatusLCM(void)
241 {
C51 COMPILER V8.05a CHENGXU 04/11/2012 16:53:31 PAGE 5
242 1 LCM_Data = 0xFF;
243 1 LCM_RS = 0;
244 1 LCM_RW = 1;
245 1 LCM_E = 0;
246 1 LCM_E = 0;
247 1 LCM_E = 1;
248 1 while (LCM_Data & Busy); //检测忙信号
249 1 return(LCM_Data);
250 1 }
251 /*======================================================================
252 功 能: 在1602 指定位置显示一个字符:第一行位置0~15,第二行16~31
253 说 明: 第 X 行,第 y 列 注意:字符串不能长于16个字符
254 ======================================================================*/
255 void DisplayOneChar( uchar X, uchar Y, uchar ASCII)
256 {
257 1 X &= 0x1;
258 1 Y &= 0xF; //限制Y不能大于15,X不能大于1
259 1 if (X) Y |= 0x40; //当要显示第二行时地址码+0x40;
260 1 Y |= 0x80; // 算出指令码
261 1 WriteCommandLCM(Y, 0); //这里不检测忙信号,发送地址码
262 1 WriteDataLCM(ASCII);
263 1 }
264 /*====================================================================
265 设定延时时间:x*1ms
266 ====================================================================*/
267 void DelayMs(uint Ms)
268 {
269 1 uint i,TempCyc;
270 1 for(i=0;i<Ms;i++)
271 1 {
272 2 TempCyc = 250;
273 2 while(TempCyc--);
274 2 }
275 1 }
276
277
278
279 /*************************************************************************
280 结束
281 **************************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1048 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 28 3
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -