📄 chengxu.lst
字号:
C51 COMPILER V8.05a CHENGXU 04/03/2011 00:11:32 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE CHENGXU
OBJECT MODULE PLACED IN chengxu.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE chengxu.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************
2 汇诚科技
3
4 实现功能:对颜色传感器输出的频率进行测量
5 使用芯片:AT89S52 或者 STC89C52
6 晶振:11.0592MHZ
7 编译环境:Keil
8 作者:zhangxinchunleo
9 网站:www.ourhc.cn
10 淘宝店:汇诚科技 http://shop36330473.taobao.com
11 【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
12
13 /*******************************************
14
15 * 文件名:TCS230.c
16
17 * 功能: 读取RGB值
18
19 /********************************************/
20
21 #include <reg52.h>
22
23 #include <intrins.h>
24
25 #define uchar unsigned char
26
27 #define uint unsigned int
28
29 /**引脚定义**/
30
31 sbit oe=P1^0;
32
33 sbit s0=P1^2;
34
35 sbit s1=P1^3;
36
37 sbit s2=P1^5;
38
39 sbit s3=P1^4;
40
41
42 //变量、常量定义
43
44 long int color,red,green,blue;
45
46 long int disp_tc;
47
48 long int buf_cor; //颜色值
49
50 uint rp=3,gp=6,bp=3; //定义比例因子
51
52 uchar disp_p; //颜色标志位(0:红 1:绿 2:蓝)
53
54 //数组
55
C51 COMPILER V8.05a CHENGXU 04/03/2011 00:11:32 PAGE 2
56 uchar disp_buf[3]={0xff,0xff,0xff}; //临时保存当前的色值
57
58 uchar code table[]={0xc0,0Xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};/*数码管段码*/
59
60 uchar code scan[4]={0XEf,0XDf,0XBf,0X7f}; /*数码管位选*/
61
62 /*******************************************
63
64 * 函数名称: t0_init()
65
66 * 函数功能: 定时器0初始化
67
68 /********************************************/
69
70 void t0_init()
71 {
72 1 TMOD=0x51; //T1计数 T0定时 工作方式1
73 1 TH0=0x3C; //定时50ms
74 1 TL0=0xB0;
75 1 TH1=0xFF; //计数初值
76 1 TL1=0x9C;
77 1 EA=1; //开中断
78 1 ET0=1;
79 1 TR0=1; //启动
80 1 TR1=1;
81 1 }
82 /*******************************************
83
84 * 函数名称: delay_1ms(uint w)
85
86 * 函数功能: 延时1mx
87
88 /********************************************/
89
90 void delay_1ms(uint w)
91
92 {
93 1 uint y,z;
94 1 for(z=w;z>0;z--)
95 1 for(y=100;y>0;y--);
96 1 }
97
98 /*******************************************
99
100 * 函数名称: feed_buf()
101
102 * 函数功能: 根据颜色标志位disp_p,读取当前检测
103
104 到的色值,并保存到disp_buf[]
105
106 /********************************************/
107
108 void feed_buf()
109
110 {
111 1 //依次读取红、绿、蓝色值
112 1
113 1 if(disp_p==0)
114 1
115 1 {red=buf_cor/rp;color=red;} //读取红色值
116 1
117 1 else if(disp_p==1)
C51 COMPILER V8.05a CHENGXU 04/03/2011 00:11:32 PAGE 3
118 1
119 1 {green=buf_cor/gp;color=green;}
120 1
121 1 else if(disp_p==2)
122 1
123 1 {blue=buf_cor/bp;color=blue;}
124 1
125 1
126 1 disp_buf[0]=color/100;
127 1
128 1 disp_buf[1]=(color-100*disp_buf[0])/10;
129 1
130 1 disp_buf[2]=color%10;
131 1
132 1 }
133
134 /*******************************************
135
136 * 函数名称: display()
137
138 * 函数功能: 数码管显示
139
140 /********************************************/
141
142 void display()
143
144 {
145 1
146 1 uchar i;
147 1
148 1 for(i=0;i<3;i++)
149 1
150 1 {
151 2 if(disp_p==0&&i==0)
152 2
153 2 {P0=table[10];P2=scan[0];delay_1ms(2);P2=0xff;}
154 2
155 2 else if(disp_p==1&&i==0)
156 2
157 2 {P0=table[11];P2=scan[0];delay_1ms(2);P2=0xff;}
158 2
159 2 else if(disp_p==2&&i==0)
160 2
161 2 {P0=table[12];P2=scan[0];delay_1ms(2);P2=0xff;}
162 2
163 2 else if(i<=3)
164 2
165 2 {P0=table[disp_buf[i-1]];P2=scan[i];delay_1ms(2);P2=0xff;}
166 2 }
167 1 }
168
169 /*******************************************
170
171 * 函数名称: main()
172
173 /********************************************/
174
175 void main()
176
177 {
178 1
179 1 oe=0; //使能TCS230
C51 COMPILER V8.05a CHENGXU 04/03/2011 00:11:32 PAGE 4
180 1 s0=1; s1=1; //选择输出比例因子100%
181 1 t0_init(); //定时计数初使化
182 1 while(1)
183 1 {
184 2 display();
185 2 }
186 1 }
187
188 /*******************************************
189
190 * 函数名称: c10ms_out()
191
192 * 函数功能: 定时中断0服务程序
193
194 修改颜色标志disp_tc(0:红 1:绿 2:蓝)
195
196 设置S0 S1 S2 选择滤波器
197
198 计算脉冲,读取色值
199
200 /********************************************/
201
202 void c10ms_out() interrupt 1
203
204 {
205 1
206 1 TR0=0; //关闭定时
207 1 TR1=0; //关闭计数
208 1 disp_tc+=1;//实现先检测绿色,再检测蓝色,然后检测红色,循环检测
209 1 if(disp_tc==100)
210 1 {
211 2 disp_tc=0;
212 2 if(disp_p==0)
213 2 {
214 3 disp_p+=1;
215 3 s2=1;s3=1; //选择滤波器为绿色
216 3 }
217 2 else if(disp_p==1)
218 2
219 2 {
220 3 disp_p+=1;
221 3
222 3 s2=1;s3=0; //选择滤波器为蓝色
223 3 }
224 2
225 2 else if(disp_p==2)
226 2
227 2 {
228 3 disp_p=0;
229 3 s2=0;s3=0; //选择滤波器为红色
230 3 }
231 2
232 2 }
233 1
234 1 if(disp_tc%10==0)
235 1
236 1 {
237 2
238 2 buf_cor=TH1*256+TL1; //计算这段时间内 TCS230 的输出脉冲数
239 2 feed_buf();
240 2 }
241 1
C51 COMPILER V8.05a CHENGXU 04/03/2011 00:11:32 PAGE 5
242 1 //重赋初值
243 1
244 1 TH0=0xB0;
245 1
246 1 TL0=0x3C;
247 1
248 1 TL1=0x00;
249 1
250 1 TH1=0x00;
251 1
252 1 TR0=1;
253 1
254 1 TR1=1;
255 1
256 1 }
257
258 /*************************************************************************
259 结束
260 **************************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 578 ----
CONSTANT SIZE = 14 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 34 ----
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 + -