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

📄 main.lst

📁 颜色传感器资料
💻 LST
字号:
C51 COMPILER V9.01   MAIN                                                                  06/13/2011 18:30:30 PAGE 1   


C51 COMPILER V9.01, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN Main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2           * TCS3200模块
   3           * 
   4           * 用途:TCS3200颜色测试,读取RGB值,LCD1602显示R,G,B值
   5           * 
   6           * 作者                                 日期                            备注
   7           * Huafeng Lin                  2010/12/10                      新增
   8           * Huafeng Lin                  2010/12/11                      修改
   9           * 
  10           */
  11          
  12          //接线说明:
  13          //模块S2-----单片机P1.1
  14          //模块S3-----单片机P1.0
  15          //模块OUT----单片机P3.5(计数器1输入)
  16          //模块VCC----单片机VCC
  17          //模块GND----单片机GND
  18          
  19          #include<REG52.H>       
  20          #include<math.h>       //Keil library  
  21          #include<stdio.h>      //Keil library   
  22          #include<INTRINS.H>
  23          
  24          #define uchar unsigned char
  25          #define uint  unsigned int      
  26          #define DataPort P2        //LCD1602 数据端口
  27                  
  28          sbit    LCM_RS=P0^2;   //LCD1602 控制端口               
  29          sbit    LCM_RW=P0^1;   //LCD1602 控制端口       
  30          sbit    LCM_EN=P0^0;   //LCD1602 控制端口
  31          
  32          /**引脚定义**/  
  33          sbit s2=P1^1;        //TCS3200 S2 
  34          sbit s3=P1^0;        //TCS3200 S3
  35                               //TCS3200 S0 模块内部默认上拉
  36                               //TCS3200 S1 模块内部默认上拉
  37                               //TCS3200 OE 模块内部接地
  38          sbit test_pin=P1^2;  //用示波器看这个引脚,可知道定时器中断频率
  39          //变量、常量定义
  40          uchar ge,shi,bai ;
  41          uchar rp=3,gp=3,bp=6; //定义比例因子,具体环境可以修改
  42          uchar count;          //颜色标志位(0:红 1:绿 2:蓝)
  43          
  44          //显示数组
  45          uchar disp_R[3];  //红
  46          uchar disp_G[3];  //绿
  47          uchar disp_B[3];  //蓝
  48          
  49          //********定义函数*****************************
  50          void    delay(unsigned int k);
  51          void    InitLcd();
  52          void    WriteDataLCM(uchar dataW);
  53          void    WriteCommandLCM(uchar CMD,uchar Attribc);
  54          void    DisplayOneChar(uchar X,uchar Y,uchar DData);
  55          
C51 COMPILER V9.01   MAIN                                                                  06/13/2011 18:30:30 PAGE 2   

  56          //*********LCD1602初始化**********************
  57          void InitLcd()                          
  58          {                       
  59   1              WriteCommandLCM(0x38,1);        
  60   1              WriteCommandLCM(0x08,1);        
  61   1              WriteCommandLCM(0x01,1);
  62   1              WriteCommandLCM(0x06,1);        
  63   1              WriteCommandLCM(0x0c,1);
  64   1      }
  65          
  66          //**********检测忙信号************************
  67          void WaitForEnable(void)        
  68          {                                       
  69   1              DataPort=0xff;          
  70   1              LCM_RS=0;LCM_RW=1;_nop_();
  71   1              LCM_EN=1;_nop_();_nop_();
  72   1              while(DataPort&0x80);   
  73   1              LCM_EN=0;                               
  74   1      }
  75                                                  
  76          //**********写命令至LCD***********************
  77          void WriteCommandLCM(uchar CMD,uchar Attribc)
  78          {                                       
  79   1              if(Attribc)WaitForEnable();     
  80   1              LCM_RS=0;LCM_RW=0;_nop_();
  81   1              DataPort=CMD;_nop_();   
  82   1              LCM_EN=1;_nop_();_nop_();LCM_EN=0;
  83   1      }       
  84                                          
  85          //**********写数据至LCD************************
  86          void WriteDataLCM(uchar dataW)
  87          {                                       
  88   1              WaitForEnable();                
  89   1              LCM_RS=1;LCM_RW=0;_nop_();
  90   1              DataPort=dataW;_nop_(); 
  91   1              LCM_EN=1;_nop_();_nop_();LCM_EN=0;
  92   1      }
  93                                                  
  94          //*********写一个字符数据到指定的目标***********
  95          void DisplayOneChar(uchar X,uchar Y,uchar DData)
  96          {                                               
  97   1              Y&=1;                                           
  98   1              X&=15;                                          
  99   1              if(Y)X|=0x40;                                   
 100   1              X|=0x80;                        
 101   1              WriteCommandLCM(X,0);           
 102   1              WriteDataLCM(DData);            
 103   1      }
 104          
 105          //**********延时函数***************
 106          void delay(unsigned int k)      
 107          {                                               
 108   1              unsigned int i,j;                               
 109   1              for(i=0;i<k;i++)
 110   1              {                       
 111   2                      for(j=0;j<121;j++)                      
 112   2                      {;}
 113   2              }                                               
 114   1      }                                                           
 115          
 116          /*******************************************
 117          * 函数名称: t0_init()
C51 COMPILER V9.01   MAIN                                                                  06/13/2011 18:30:30 PAGE 3   

 118          * 函数功能: 定时器0初始化
 119          * 入口参数: 无
 120          * 出口参数: 无
 121          /********************************************/
 122          void t0_init()
 123          {
 124   1              TMOD=0x51;        //T1计数 T0定时 工作方式1
 125   1              
 126   1              TH1=0x00;        //计数初值
 127   1              TL1=0x00;
 128   1              
 129   1              TH0=0xE0;
 130   1              TL0=0x00;        //11。0592M 晶振10ms
 131   1              EA=1;            //开中断
 132   1              
 133   1              ET0=1;        
 134   1              TR0=1;           //启动
 135   1              TR1=1;
 136   1      }
 137          
 138          //*********************************************
 139          //数值转换出个十百千的ASCII码
 140          //*********************************************
 141          void conversion(uint temp_data)  
 142          {  
 143   1          bai=temp_data/100+0x30 ;
 144   1          temp_data=temp_data%100;   //取余运算
 145   1          shi=temp_data/10+0x30 ;
 146   1          ge=temp_data%10+0x30;      //取余运算
 147   1      }
 148          
 149          /*******************************************
 150          * 函数名称: main()
 151          /********************************************/
 152          void main()
 153          {
 154   1              delay(10); 
 155   1              InitLcd();      //lcd初始化
 156   1              s2=0;           //初始设定S2引脚
 157   1              s3=0;           //初始设定S3引脚
 158   1              t0_init();      //定时计数初使

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -