📄 chengxu.lst
字号:
C51 COMPILER V8.05a CHENGXU 04/11/2012 16:53:31 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 实现功能:实现功能:对颜色传感器输出RGB
6 使用芯片:AT89S52 或者 STC89C52
7 得出数据后可到http://www.59178.com/tools/sejie.asp查询数据是否正确
8 晶振:12MHZ
9 编译环境:Keil
10 作者:zhangxinchunleo
11 网站:www.ourhc.cn
12 淘宝店:汇诚科技 http://shop36330473.taobao.com
13 【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
14
15 /*********************************************************************/
16
17 #include <reg52.h>
18 #define uchar unsigned char
19 #define uint unsigned int
20 //==============LCD1602接口连接方法=====================
21 /*-----------------------------------------------------
22 |DB0-----P0.0 | DB4-----P0.4 | RW-------P2.3 |
23 |DB1-----P0.1 | DB5-----P0.5 | RS-------P2.4 |
24 |DB2-----P0.2 | DB6-----P0.6 | E--------P2.2 |
25 |DB3-----P0.3 | DB7-----P0.7 |
26 ---------------------------------------------------*/
27 //================================================*/
28 #define LCM_Data P0 //LCD1602数据接口
29 #define Busy 0x80 //用于检测LCM状态字中的Busy标识
30 sbit LCM_RW = P2^3; //读写控制输入端,LCD1602的第五脚
31 sbit LCM_RS = P2^4; //寄存器选择输入端,LCD1602的第四脚
32 sbit LCM_E = P2^2; //使能信号输入端,LCD1602的第6脚
33
34 //=================颜色传感模块连接=====================
35 /*-----------------------------------------------------
36 |EO-----GND
37 |S0-----VCC | S2-----P2.0 | OUT-------P3.5
38 |S1-----VCC | S3-----P2.1 |
39 ---------------------------------------------------*/
40 sbit tcs230_s2=P2^0;//TCS230 S2接单片机P2.0
41 sbit tcs230_s3=P2^1;//TCS230 S3接单片机P2.1
42 sbit tcs230_en=P3^0; //TCS230 EN(E0)接GND
43 //**************函数声明***************************************
44 void WriteDataLCM (uchar WDLCM);//LCD模块写数据
45 void WriteCommandLCM (uchar WCLCM,BuysC); //LCD模块写指令
46 uchar ReadStatusLCM(void);//读LCD模块的忙标
47 void DisplayOneChar(uchar X,uchar Y,uchar ASCII);//在第X+1行的第Y+1位置显示一个字符
48 void LCMInit(void);//LCD初始
49 void DelayMs(uint Ms);//1MS基准延时程序
50 void baipingheng();//白平衡子程序
51 void celiang();//实际颜色程序
52 uint ryz,gyz,byz;//分别定义红色因子 绿色因子 蓝色因子
53 uint rb,gb,bb;//RGB值
54 uchar tab1[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
55 //***********************主程序******************************
C51 COMPILER V8.05a CHENGXU 04/11/2012 16:53:31 PAGE 2
56 main()
57 {
58 1 TMOD=0x51;//设定T0以工作方式1定时10毫秒
59 1 LCMInit();//LCD初始
60 1 baipingheng();//上电时先白平衡一次
61 1 while(1)
62 1 {
63 2 celiang();//颜色测试
64 2 DisplayOneChar(0, 0,'R');//以十进制显示RGB中红色的分值
65 2 DisplayOneChar(0, 1, rb/100+0x30); //显示百位数据
66 2 DisplayOneChar(0, 2, rb/10%10+0x30);//显示十位数据
67 2 DisplayOneChar(0, 3, rb%10+0x30);//显示个位数据
68 2 DisplayOneChar(0, 5,'G');//以十进制显示RGB中绿色的分值
69 2 DisplayOneChar(0, 6, gb/100+0x30); //显示百位数据
70 2 DisplayOneChar(0, 7, gb/10%10+0x30);
71 2 DisplayOneChar(0, 8, gb%10+0x30);
72 2 DisplayOneChar(0, 10,'B');//以十进制显示RGB中蓝色的分值
73 2 DisplayOneChar(0, 11, bb/100+0x30);
74 2 DisplayOneChar(0, 12, bb/10%10+0x30);
75 2 DisplayOneChar(0, 13, bb%10+0x30);
76 2 //*****在LCD1602的第二行以16进制显示RGB*******************
77 2 DisplayOneChar(1, 1, tab1[rb/16]);
78 2 DisplayOneChar(1, 2, tab1[rb%16]);
79 2 DisplayOneChar(1, 3, 'H');
80 2 DisplayOneChar(1, 6, tab1[gb/16]);
81 2 DisplayOneChar(1, 7, tab1[rb%16]);
82 2 DisplayOneChar(1, 8, 'H');
83 2 DisplayOneChar(1, 11,tab1[bb/16]);
84 2 DisplayOneChar(1, 12,tab1[bb%16]);
85 2 DisplayOneChar(1, 13,'H');
86 2 DelayMs(250);//每隔0.25秒测试一次颜色
87 2 }
88 1 }
89 //******************************************************
90 //白平衡子程序
91 void celiang()
92 {
93 1 //*********求R值************************************
94 1 TH0=(65536-10000)/256;
95 1 TL0=(65536-10000)%256;
96 1 TH1=0;
97 1 TL1=0;
98 1 tcs230_s2=0;
99 1 tcs230_s3=0;//选择红色滤光器
100 1 tcs230_en=0;
101 1 TR0=1;//10毫秒开始计时
102 1 TR1=1;//开始计数
103 1 while(TF0==0);//等待定时器溢出
104 1 TF0=0;//清楚定时器0溢出标志
105 1 TR0=0;//关闭定时0
106 1 TR1=0;
107 1 rb=(unsigned long)(TH1*256+TL1)*255/ryz;
108 1 if(rb>255)rb=255;//判断RGB值是否合法
109 1 //***********求B值**************************************
110 1 TH0=(65536-10000)/256;
111 1 TL0=(65536-10000)%256;
112 1 TH1=0;
113 1 TL1=0;
114 1 tcs230_s2=0;
115 1 tcs230_s3=1;//选择蓝色滤光器
116 1 TR0=1;//10毫秒开始计时
117 1 TR1=1;//开始计数
C51 COMPILER V8.05a CHENGXU 04/11/2012 16:53:31 PAGE 3
118 1 while(TF0==0);//等待定时器溢出
119 1 TF0=0;//清楚定时器0溢出标志
120 1 TR0=0;//关闭定时0
121 1 TR1=0;
122 1 bb=(unsigned long)(TH1*256+TL1)*255/byz;
123 1 if(bb>255)bb=255;//判断RGB值是否合法
124 1 //***********求G值**************************************
125 1 TH0=(65536-10000)/256;
126 1 TL0=(65536-10000)%256;
127 1 TH1=0;
128 1 TL1=0;
129 1 tcs230_s2=1;
130 1 tcs230_s3=1;//选择绿色滤光器
131 1 TR0=1;//10毫秒开始计时
132 1 TR1=1;//开始计数
133 1 while(TF0==0);//等待定时器溢出
134 1 TF0=0;//清楚定时器0溢出标志
135 1 TR0=0;//关闭定时0
136 1 TR1=0;
137 1 tcs230_en=1;
138 1 gb=(unsigned long)(TH1*256+TL1)*255/gyz;
139 1 if(gb>255)gb=255;//判断RGB值是否合法
140 1 }
141 //******************************************************
142 //白平衡子程序
143 void baipingheng()
144 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -