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

📄 chengxu.lst

📁 TCS230颜色识别传感器应用学习资料
💻 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 + -