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

📄 text2.lst

📁 tlc1543 1602液晶显示 +c语言
💻 LST
字号:
C51 COMPILER V8.02   TEXT2                                                                 04/27/2011 12:12:40 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE TEXT2
OBJECT MODULE PLACED IN Text2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text2.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg52.h>
   2          #include<math.h>
   3          #define uchar unsigned char
   4          #define uint unsigned int
   5          
   6          uchar code welcome[]={"  voltage!       "};
   7          uchar idata lcdtimer[16]={" 0.0000 V       "};
   8          uchar timecount;
   9          bit timeflag;
  10          sbit  e=P2^1;
  11          sbit rs=P2^0;
  12          
  13          
  14          sbit CS=P1^4;      //TLC1543与89c52的接口连接线路
  15          sbit DOUT=P1^3;
  16          sbit ADIN=P1^2;
  17          sbit CLOCK=P1^1;
  18          sbit EOC=P1^0;
  19          uint readTLC1543(uchar port);
  20          //void deley ();
  21          /*sbit sdo=p1^0;
  22          sbit addr=p1^1;
  23          sbit cs=p1^2;
  24          sbit clk=p1^3;
  25          sbit eoc=p1^4;*/
  26          //void delay();
  27          //void display();
  28          uint a; 
  29          void delay(uint del1)
  30          {
  31   1         uchar del2;
  32   1         for(;del1>0;del1--)
  33   1                      for(del2=100;del2>0;del2--);
  34   1      }
  35          
  36          //void delay(uint time);
  37          //uint a;               //a为全局变量
  38          
  39          /*void main()
  40          {
  41                  while(1)
  42                  {
  43                          a=readTLC1543(0x00);
  44                          display();
  45                  }
  46          }*/
  47          uint readTLC1543(uchar port)
  48          {
  49   1              uint i ,ad;
  50   1              uchar datah,datal;
  51   1              CLOCK=0;          //根据时序图分别设置CS,CLOCK,EOC
  52   1              CS=0;
  53   1              EOC=1;
  54   1              port<<=4;         //用port的值来选择是哪个AD芯片的哪个通道,实验板上接的是A0和A1,因此port的值可以选择0000或000
             -1
C51 COMPILER V8.02   TEXT2                                                                 04/27/2011 12:12:40 PAGE 2   

  55   1              for(i=0;i<4;i++)//把通道写入TLC1543芯片中
  56   1              {
  57   2                      ADIN=(bit)(port&0x80);
  58   2                      CLOCK=1;
  59   2                      CLOCK=0;  //只需要CLOCK一个下降沿就能写入,其他接口的电平不变化
  60   2                      port<<=1; //根据时序图,先写入MSB即最高位,需要左移,然后继续写下一位
  61   2              }
  62   1              for(i=0;i<6;i++)//填充6个CLOCK
  63   1              {
  64   2                      CLOCK=1;
  65   2                      CLOCK=0;
  66   2              }
  67   1              CS=1;
  68   1          delay(100);
  69   1              CS=0;    //等待AD转换
  70   1      
  71   1              for(i=0;i<2;i++)  //取D9和D8位,
  72   1              {
  73   2                      DOUT=1;
  74   2                      CLOCK=1;
  75   2                      datah<<=1;
  76   2                      if(DOUT)
  77   2                              datah|=0x01;
  78   2                      CLOCK=0;
  79   2              }       
  80   1              for(i=0;i<8;i++)//取D7~D0位
  81   1              {
  82   2                      DOUT=1;
  83   2                      CLOCK=1;
  84   2                      datal<<=1;
  85   2                      if(DOUT)
  86   2                              datal|=0x01;
  87   2                      CLOCK=0;
  88   2              }       
  89   1              EOC=0;
  90   1              CS=1;
  91   1              ad=(uint)datah;
  92   1              ad<<=8;
  93   1              ad|=datal;//处理高位和低位数据,同时把char型转化为了int型,此处对数值的处理算法,参考“温度传感器”
  94   1              ad=(ad*0.4887)*100;
  95   1              //ad=(float)(   ad*5/1023)*100000;
  96   1              return(ad);
  97   1      }
  98          /*void display()
  99          {
 100                  uint i,temp;
 101                  //uint shu0,shu1,shu2,shu3,shu4;
 102                  temp=a;
 103                  lcdtimer[2]=0x30+temp/10000;
 104              lcdtimer[3]=0x30+temp%10000/1000;
 105              lcdtimer[4]=0x30+temp%1000/100;
 106              lcdtimer[5]=0x30+temp%100/10;
 107              lcdtimer[6]=0x30+temp%10;
 108              disp_lcd(0xc0,lcdtimer);
 109          
 110          }       
 111          /*void delay(uint time)
 112          {
 113                  uint i;
 114                  for(i=time;i>0; i--)
 115                          {;}
 116          }*/                                          
C51 COMPILER V8.02   TEXT2                                                                 04/27/2011 12:12:40 PAGE 3   

 117          
 118          /*void delay(uint del1)
 119          {
 120             uchar del2;
 121             for(;del1>0;del1--)
 122                          for(del2=10;del2>0;del2--);
 123          }*/
 124          //液晶显示器判忙函数
 125          //*****************
 126          void busy()
 127          {
 128   1         uchar temp;
 129   1         temp=0x00;
 130   1         rs=0;
 131   1         //rw=1;
 132   1         while((temp&0x80)==0x80)
 133   1         {
 134   2           P0=0xff;
 135   2           e=1;
 136   2           temp=P0;
 137   2           e=0;
 138   2      
 139   2          }
 140   1      
 141   1      }
 142          //*************************
 143          //向液晶显示器写命令函数
 144          //***********************
 145          void write_com(uchar temp)
 146          {
 147   1         busy();
 148   1         rs=0;
 149   1         //rw=0;
 150   1         P0=temp;
 151   1         e=1;
 152   1         e=0;
 153   1      }
 154          //********************
 155          //向液晶显示器写数据函数
 156          //*********************
 157          void write_data(uchar num)
 158          {
 159   1         busy();
 160   1         rs=1;
 161   1         //rw=0;
 162   1         P0=num;
 163   1         e=1;
 164   1         e=0;
 165   1      }
 166          //*****************************
 167          //*******向液晶显示器写入显示数据函数
 168          //*********************
 169          void disp_lcd(uchar addr,uchar *temp1)
 170          {
 171   1            uchar i;
 172   1            write_com(addr);
 173   1            delay(100);
 174   1            for(i=0;i<16;i++)
 175   1            {
 176   2                  write_data(temp1[i]);
 177   2                              delay(100);
 178   2             }
C51 COMPILER V8.02   TEXT2                                                                 04/27/2011 12:12:40 PAGE 4   

 179   1      }
 180          //************************
 181          //液晶显示器初始化函数
 182          //***********************
 183          void lcd_ini()
 184          {
 185   1         char i;
 186   1         for(i=3;i>0;i--)
 187   1         {
 188   2            P0=0x30;
 189   2            rs=0;
 190   2            //rw=0;
 191   2            e=1;
 192   2            e=0;
 193   2            delay(100);
 194   2      
 195   2         }
 196   1         P0=0x38;
 197   1         rs=0;
 198   1         //rw=0;
 199   1         e=1;
 200   1         e=0;
 201   1         delay(100);
 202   1      }
 203          //****************
 204          //液晶显示器复位函数
 205          //***************
 206          void lcd_reset()
 207          {
 208   1        write_com(0x01);
 209   1        delay(100);
 210   1        write_com(0x06);
 211   1        delay(100);
 212   1        write_com(0x0c);
 213   1        delay(100);
 214   1      }
 215          //*********************
 216          //定时器、计时器中断函数
 217          //*********************
 218          void timer0() interrupt 1
 219          {
 220   1        TH0=0xdc;
 221   1        TL0=0x23;
 222   1        if(--timecount==0)
 223   1        {
 224   2           timecount=100;
 225   2           timeflag=1;
 226   2        }
 227   1      }
 228          
 229          void main()
 230          {
 231   1         lcd_ini();
 232   1         lcd_reset();
 233   1         disp_lcd(0x80,welcome);
 234   1         disp_lcd(0xc0,lcdtimer);
 235   1         TMOD=0x01;
 236   1         TH0=0xdc;
 237   1         TL0=0x23;
 238   1         TR0=1;
 239   1         IE=0x82;
 240   1         timeflag=0;
C51 COMPILER V8.02   TEXT2                                                                 04/27/2011 12:12:40 PAGE 5   

 241   1         timecount=100;
 242   1      
 243   1        
 244   1        /* while(1)
 245   1         {
 246   1           if(timeflag==1)
 247   1           {
 248   1            timeflag=0;
 249   1             lcdtimer[11]+=1;
 250   1             if(lcdtimer[11]>=0x3a)
 251   1             {
 252   1                              lcdtimer[11]=0x30;
 253   1                              lcdtimer[10]+=1;
 254   1                              if(lcdtimer[10]>=0x36)
 255   1                              {
 256   1                                      lcdtimer[10]=0x30;
 257   1                                      lcdtimer[8]+=1;
 258   1                                      if(lcdtimer[8]>=0x3a)
 259   1                                      {
 260   1                                              lcdtimer[8]=0x30;
 261   1                                              lcdtimer[7]+=1;
 262   1                                              if(lcdtimer[7]>=0x36)
 263   1                                              {
 264   1                                                      lcdtimer[7]=0x30;
 265   1                                              }
 266   1                                      }
 267   1                              }
 268   1             }
 269   1             disp_lcd(0xc0,lcdtimer);
 270   1                 
 271   1          }
 272   1        
 273   1         }*/
 274   1        while(1)
 275   1              {
 276   2                      uint temp;
 277   2                      a=readTLC1543(0x00);
 278   2                      temp=a;
 279   2                  lcdtimer[1]=0x30+temp/10000;
 280   2              lcdtimer[3]=0x30+temp%10000/1000;
 281   2              lcdtimer[4]=0x30+temp%1000/100;
 282   2              lcdtimer[5]=0x30+temp%100/10;
 283   2              lcdtimer[6]=0x30+temp%10;
 284   2              disp_lcd(0xc0,lcdtimer);                
 285   2      
 286   2              }
 287   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    534    ----
   CONSTANT SIZE    =     18    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3       7
   IDATA SIZE       =     16    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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