⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chengxu.lst

📁 TCS230颜色识别传感器应用学习资料
💻 LST
📖 第 1 页 / 共 2 页
字号:
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 + -