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

📄 0838.lst

📁 个人单片机入门程序集合 。很适合刚学单片机的人。用的是keil proteus
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.20   0838                                                                  07/19/2007 10:17:26 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE 0838
OBJECT MODULE PLACED IN 0838.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE 0838.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1                                           ///////////////////////////////////////////////////////////////////////////////////////////////
   2          //                                               
   3          //           H.C.H                            
   4          //           NNU(南京师范大学通信工程)                               
   5          //           TLC0838驱动程序TLC0838_II.c           
   6          //           uchar adc_tlc0838(uchar channel);
   7          //           函数说明:channel为通道的选择:0……CH0   1……CH1  2……CH2  3……CH3 
   8          //                         当error=0时,返回的值为有效值,当error=1时,返回值无效                       
             -        
   9          ///////////////////////////////////////////////////////////////////////////////////////////////
  10          
  11          #include<reg51.h>
  12          #include<intrins.h>
  13          #define uchar unsigned char
  14          #define uint unsigned int
  15          
  16          
  17          sbit CLK=P1^6;     //TLC0838---PIN16
  18          sbit DI=P1^5;      //TLC0838---PIN17
  19          sbit DO=P1^7;      //TLC0838---PIN14
  20          sbit CS=P1^4;      //TLC0838---PIN18
  21                             //SE接成低电平
  22          
  23          //1602 数据口定义
  24          #define lcd_bus P0                       
  25          
  26          //1602引脚定义
  27          sbit rs=P2^5;        
  28          sbit rw=P2^6;
  29          sbit e=P2^7;
  30          
  31          //ASCII码表
  32          /**********0---9**************/
  33          unsigned  int  code table[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
  34          /**********a---z**************/
  35          unsigned  int code table1[26]={0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,
  36                                         0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a};
  37          /***********A---Z*************/
  38          unsigned  int code table2[26]={0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,
  39                                         0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a};
  40          
  41          //基本变量定义
  42          //uchar cnt;
  43          unsigned int d[3];
  44          
  45          bit error=1;
  46          
  47          
  48          
  49          uint adc_tlc0838(uchar channel)
  50          {
  51   1          uchar t,i;
  52   1              uint Temp1=0,Temp2=0;
  53   1          if (channel==0)     t=0;
  54   1              else if(channel==1) t=1;
C51 COMPILER V7.20   0838                                                                  07/19/2007 10:17:26 PAGE 2   

  55   1              else if(channel==2) t=4;
  56   1              else if(channel==3) t=5;
  57   1              else if(channel==4) t=2;
  58   1              else if(channel==5) t=3;
  59   1              else if(channel==6) t=6;
  60   1              else if(channel==7) t=7;
  61   1         
  62   1          CS=1;
  63   1         _nop_();_nop_();_nop_();_nop_();
  64   1      
  65   1         
  66   1          CLK=0;
  67   1          CS=0;            //使AD通道打开
  68   1          DI = 1;          //Start bit=1
  69   1          CLK = 1;
  70   1          _nop_();
  71   1          _nop_();
  72   1      
  73   1          CLK=0;
  74   1          CS=0;          
  75   1          DI = 1;          
  76   1          CLK = 1;
  77   1          _nop_();
  78   1          _nop_();
  79   1      
  80   1      
  81   1          for(i=0;i<3;i++)
  82   1              {
  83   2            CLK = 0;
  84   2            _nop_();
  85   2            _nop_();
  86   2            if(t&1)DI=1;
  87   2                else DI=0;
  88   2                t=t>>1;       
  89   2            CLK = 1;
  90   2            _nop_();
  91   2            _nop_();
  92   2          }
  93   1      
  94   1      
  95   1          CLK=0;
  96   1          _nop_();
  97   1          _nop_();
  98   1          CLK=1;
  99   1          _nop_();
 100   1          _nop_();
 101   1      
 102   1      
 103   1           for(i=0;i<=6;i++)
 104   1               {
 105   2               CLK = 0;                  //时钟为低电平
 106   2               if(DO)
 107   2                       {                         //如果采集到的位为1
 108   3                 Temp1=Temp1+1;          //给临时存储Temp1加1
 109   3                 Temp1=Temp1<<1;
 110   3                       }         //临时存储器左移一位
 111   2               else
 112   2                 Temp1=Temp1<<1;          //如果采集到的数位为0,临时存储器左移一位
 113   2                       _nop_();
 114   2               _nop_();
 115   2               _nop_();
 116   2               _nop_();
C51 COMPILER V7.20   0838                                                                  07/19/2007 10:17:26 PAGE 3   

 117   2               CLK = 1;    
 118   2            }                             //时钟为高电平,完成一个时钟周期数据采集
 119   1             CLK = 0;
 120   1             if(DO)  Temp1=Temp1+1;
 121   1             if(DO)  Temp2=0x80;
 122   1      
 123   1             CLK = 1; 
 124   1                                            //采集数据校验          
 125   1             
 126   1             for(i=0;i<=6;i++)
 127   1               {
 128   2                 CLK=0;
 129   2                 if(DO){
 130   3                   Temp2=Temp2>>1;
 131   3                   Temp2=Temp2+0x80;  }
 132   2                 else
 133   2                   Temp2=Temp2>>1;
 134   2                 CLK = 1; 
 135   2               }
 136   1         CS = 1;
 137   1         if(Temp1==Temp2)             //判断数据采集是否有效
 138   1         {  
 139   2            error=0;
 140   2            return Temp1;
 141   2              }
 142   1         else
 143   1         {
 144   2           error=1;
 145   2           return 0;
 146   2         }
 147   1      }
 148          
 149          
 150          
 151          /*
 152          hexstoascii2(unsigned int hex)
 153          {
 154          d[0]=table[hex/10];
 155          hex=hex%10;
 156          d[1]=table[hex]; 
 157          }
 158          */
 159          
 160          hexstoascii3(unsigned int hex)
 161          {
 162   1      d[0]=table[hex/100];
 163   1      hex=hex%100;
 164   1      d[1]=table[hex/10];
 165   1      hex=hex%10;
 166   1      d[2]=table[hex];
 167   1      }
 168          
 169          
 170          
 171          /*********延时子程序**********/
 172          void delay(uchar dy)
 173          {
 174   1        while(--dy);
 175   1      } 
 176          
 177          /***********忙判断标志,返回一个位BF********************/
 178          bit lcd_busy(void)
C51 COMPILER V7.20   0838                                                                  07/19/2007 10:17:26 PAGE 4   

 179          {
 180   1              uchar busy_flag;
 181   1              rs=0;
 182   1              rw=1;
 183   1              _nop_();
 184   1              e=1;
 185   1              _nop_();
 186   1              lcd_bus=0xff;
 187   1              busy_flag=lcd_bus;       //e在高电平时读 
 188   1              e=0;
 189   1              return (bit)(busy_flag&0x80);    //BF=1; BUSY  返回一个位
 190   1      }
 191          
 192          
 193          /********写命令,有两个参数,一个是要写的命令控制字,
 194          第二个是用来控制是否进行忙标志的判断。
 195          busyflag=1;
 196          判断: 为0 
 197          ***************/
 198          void lcd_wrcmd(unsigned char lcdcmd)
 199          {
 200   1              while(lcd_busy());         //等待空闲
 201   1              lcd_bus=lcdcmd;
 202   1              rs=0;
 203   1              rw=0;
 204   1              _nop_();
 205   1              e=1;
 206   1              _nop_();
 207   1              _nop_();
 208   1              e=0;      //产生一个下沿          
 209   1      }
 210          
 211          
 212          
 213          /***************向液晶写数据******************/

⌨️ 快捷键说明

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