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

📄 23.lst

📁 单片机C语言程序设计实训100例
💻 LST
字号:
C51 COMPILER V8.08   23                                                                    08/13/2009 10:05:47 PAGE 1   


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

line level    source

   1          /***************   writer:shopping.w   ******************/
   2          #include <reg52.h>
   3          #include <intrins.h>
   4          #define uint unsigned int
   5          #define uchar unsigned char
   6          #define Delay4us() {_nop_();_nop_();_nop_();_nop_();}
   7          
   8          sbit LCD_RS = P2^0;
   9          sbit LCD_RW = P2^1;
  10          sbit LCD_EN = P2^2;
  11          sbit SCL    = P1^0;
  12          sbit SDA    = P1^1;
  13          
  14          uchar Recv_Buffer[4];
  15          uint Voltage[]={'0','0','0','0'};
  16          bit bdata IIC_ERROR;
  17          uchar LCD_Line_1[] = {"1- . V 2- . V"};
  18          uchar LCD_Line_2[] = {"3- . V 4- . V"};
  19          
  20          void Delay(uint ms)
  21          {
  22   1              uchar i;
  23   1              while(ms--)
  24   1              {
  25   2                      for(i=0;i<120;i++);
  26   2              }
  27   1      }
  28          
  29          bit LCD_Busy_Check()
  30          {
  31   1              bit Result;
  32   1              LCD_RS = 0;
  33   1              LCD_RW = 1;
  34   1              LCD_EN = 1;
  35   1              Delay4us();
  36   1              Result = (bit)(P0&0x80);
  37   1              LCD_EN = 0;
  38   1              return Result;
  39   1      }
  40          
  41          void LCD_Write_Command(uchar cmd)
  42          {
  43   1              while(LCD_Busy_Check());
  44   1              LCD_RS = 0;
  45   1              LCD_RW = 0;
  46   1              LCD_EN = 0;
  47   1              _nop_();
  48   1              _nop_();
  49   1              P0 = cmd;
  50   1              Delay4us();
  51   1              LCD_EN = 1;
  52   1              Delay4us();
  53   1              LCD_EN = 0;
  54   1      }
  55          
C51 COMPILER V8.08   23                                                                    08/13/2009 10:05:47 PAGE 2   

  56          void LCD_Write_Data(uchar dat)
  57          {
  58   1              while(LCD_Busy_Check());
  59   1              LCD_RS = 1;
  60   1              LCD_RW = 0;
  61   1              LCD_EN = 0;
  62   1              P0 = dat;
  63   1              Delay4us();
  64   1              LCD_EN = 1;
  65   1              Delay4us();
  66   1              LCD_EN = 0;     
  67   1      }
  68          
  69          void LCD_Initialise()
  70          {
  71   1              LCD_Write_Command(0x38);Delay(5);
  72   1              LCD_Write_Command(0x0c);Delay(5);
  73   1              LCD_Write_Command(0x06);Delay(5);
  74   1              LCD_Write_Command(0x01);Delay(5);       
  75   1      }
  76          
  77          void LCD_Set_Position(uchar pos)
  78          {
  79   1              LCD_Write_Command(pos | 0x80);          
  80   1      }
  81          
  82          void LCD_Display_A_Line(uchar Line_Addr,uchar s[])
  83          {
  84   1              uchar i;
  85   1              LCD_Set_Position(Line_Addr);
  86   1              for(i=0;i<16;i++)
  87   1              {
  88   2                      LCD_Write_Data(s[i]);
  89   2              }
  90   1      }
  91          
  92          void Convert_To_Voltage(uchar val)
  93          {
  94   1              uchar Tmp;
  95   1              Voltage[2] = val/51+'0';
  96   1              Tmp = val%51*10;
  97   1              Voltage[1] = Tmp/51+'0';
  98   1              Tmp = Tmp%51*10;
  99   1              Voltage[0] = Tmp/51+'0';
 100   1      }
 101          
 102          void IIC_Start()
 103          {
 104   1              SDA = 1;
 105   1              SCL = 1;
 106   1              Delay4us();
 107   1              SDA = 0;
 108   1              Delay4us();
 109   1              SCL = 0;
 110   1      }
 111          
 112          void IIC_Stop()
 113          {
 114   1              SDA = 0;
 115   1              SCL = 1;
 116   1              Delay4us();
 117   1              SDA = 1;
C51 COMPILER V8.08   23                                                                    08/13/2009 10:05:47 PAGE 3   

 118   1              Delay4us();
 119   1              SCL = 0;
 120   1      }
 121          
 122          void Slave_ACK()
 123          {
 124   1              SDA = 0;
 125   1              SCL = 1;
 126   1              Delay4us();
 127   1              SCL = 0;
 128   1              SDA = 1;
 129   1      }
 130          
 131          void Slave_NOACK()
 132          {
 133   1              SDA = 1;
 134   1              SCL = 1;
 135   1              Delay4us();
 136   1              SCL = 0;
 137   1              SDA = 0;
 138   1      }
 139          
 140          void IIC_SendByte(uchar wd)
 141          {
 142   1              uchar i;
 143   1              for(i=0;i<8;i++)
 144   1              {
 145   2                      SDA=(bit)(wd&0x80);
 146   2                      _nop_();
 147   2                      _nop_();
 148   2                      SCL = 1;
 149   2                      Delay4us();
 150   2              }
 151   1              Delay4us();
 152   1              SDA = 1;
 153   1              SCL = 1;
 154   1              Delay4us();
 155   1      
 156   1              IIC_ERROR = SDA;
 157   1              SCL = 0;
 158   1              Delay4us();
 159   1      }
 160          
 161          uchar IIC_ReceiveByte()
 162          {
 163   1              uchar i,rd = 0x00;
 164   1              for(i=0;i<8;i++)
 165   1              {
 166   2                      SCL = 1;
 167   2                      rd <<= 1;
 168   2                      rd |= SDA;
 169   2                      Delay4us();
 170   2                      SCL = 0;
 171   2                      Delay4us();
 172   2              }
 173   1              SCL = 0;
 174   1              Delay4us();
 175   1              return rd;
 176   1      }
 177          
 178          void ADC_PCF8591(uchar CtrlByte)
 179          {
C51 COMPILER V8.08   23                                                                    08/13/2009 10:05:47 PAGE 4   

 180   1              uchar i;
 181   1              IIC_Start();
 182   1              IIC_SendByte(0x90);
 183   1              if(IIC_ERROR == 1) return;
 184   1              
 185   1              IIC_SendByte(CtrlByte);
 186   1              if(IIC_ERROR == 1) return;
 187   1      
 188   1              IIC_Start();
 189   1              IIC_SendByte(0x91);
 190   1              if(IIC_ERROR == 1) return;
 191   1              IIC_ReceiveByte();
 192   1              Slave_ACK();
 193   1              for(i=0;i<4;i++)
 194   1              {
 195   2                      Recv_Buffer[i++] = IIC_ReceiveByte();
 196   2                      Slave_ACK();
 197   2              }
 198   1              Slave_NOACK();
 199   1              IIC_Stop();
 200   1      }
 201          
 202          void DAC_PCF8591(uchar CtrlByte,uchar dat)
 203          {
 204   1              IIC_Start();
 205   1              Delay4us();
 206   1              IIC_SendByte(0x90);
 207   1              if(IIC_ERROR == 1) return;
 208   1              IIC_SendByte(CtrlByte);
 209   1              if(IIC_ERROR == 1) return;
 210   1              IIC_SendByte(dat);
 211   1              if(IIC_ERROR == 1) return;
 212   1              IIC_Stop();
 213   1              Delay4us();
 214   1              Delay4us();
 215   1      }
 216          
 217          void main()
 218          {
 219   1              LCD_Initialise();
 220   1              while(1)
 221   1              {
 222   2                      ADC_PCF8591(0x40);
 223   2                      Convert_To_Voltage(Recv_Buffer[0]);
 224   2                      LCD_Line_1[2]=Voltage[2];
 225   2                      LCD_Line_1[4]=Voltage[1];
 226   2                      LCD_Line_1[5]=Voltage[0];
 227   2                      Convert_To_Voltage(Recv_Buffer[1]);
 228   2                      LCD_Line_1[11]=Voltage[2];
 229   2                      LCD_Line_1[13]=Voltage[1];
 230   2                      LCD_Line_1[14]=Voltage[0];
 231   2                      Convert_To_Voltage(Recv_Buffer[2]);
 232   2                      LCD_Line_2[2]=Voltage[2];
 233   2                      LCD_Line_2[4]=Voltage[1];
 234   2                      LCD_Line_2[5]=Voltage[0];
 235   2                      Convert_To_Voltage(Recv_Buffer[3]);
 236   2                      LCD_Line_2[11]=Voltage[2];
 237   2                      LCD_Line_2[13]=Voltage[1];
 238   2                      LCD_Line_2[14]=Voltage[0];
 239   2                      
 240   2                      LCD_Display_A_Line(0x00,   LCD_Line_1); 
 241   2                      LCD_Display_A_Line(0x40,   LCD_Line_2); 
C51 COMPILER V8.08   23                                                                    08/13/2009 10:05:47 PAGE 5   

 242   2      
 243   2                      DAC_PCF8591(0x40,Recv_Buffer[0]);
 244   2              }       
 245   1      }
 246          
 247          
 248          
 249          
 250          
 251          
 252          
 253          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    591    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     40       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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