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

📄 text1.lst

📁 定标电压表程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.20   TEXT1                                                                 07/17/2007 07:26:06 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: E:\软件\keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg51.h>
   2          #include<intrins.h>
   3          #define uint unsigned int
   4          #define uchar unsigned char
   5          
   6          
   7          //数据口定义
   8          #define lcd1602_bus P3  
   9          #define key_bus P1               
  10          
  11          //引脚定义
  12          sbit rs_1602=P2^7;           
  13          sbit rw_1602=P2^6;
  14          sbit e_1602=P2^5;
  15          sbit cs_549=P0^2;
  16          sbit data_549=P0^3;
  17          sbit clk_549=P0^4;
  18          sbit SCL=P2^0;
  19          sbit SDA=P2^1;
  20          
  21          
  22          uchar state;
  23          uchar bdata adc_549; 
  24          sbit  adc_549low=adc_549^0; 
  25          uchar s; 
  26          uchar mea,m[2];
  27          uint in[2];
  28          
  29          uchar code table0[]="1.mea2.dis3.plo"; 
  30          uchar code table1[]="please measure";
  31          uchar code table2[]="complete";
  32          uchar code table3[]="in:";
  33          uchar code asc[]="0123456789";
  34          uchar code table4[]="display:";
  35          uchar code table[1]=".";
  36          
  37          
  38          void delay(uint t)             
  39          {
  40   1            uint i,j;
  41   1            for(i=0;i<t;i++)
  42   1                  for(j=0;j<10;j++);
  43   1      }
  44          //================IIC总线的操作子程序====================
  45          
  46          
  47          /*****************启动总线**********************/
  48          void IICStart(void)
  49          {
  50   1          SCL=0;                 
  51   1          SDA=1;SCL=1;SCL=1;SCL=1;SCL=1;
  52   1              SDA=0;SDA=0;SDA=0;SDA=0;SDA=0;
  53   1          SCL=0;SCL=0;SCL=0;
  54   1          SDA=1;                  
  55   1      }
C51 COMPILER V7.20   TEXT1                                                                 07/17/2007 07:26:06 PAGE 2   

  56          
  57          /*****************停止IIC总线****************/
  58          void IICStop(void)
  59          {
  60   1          SCL=0;SDA=0;
  61   1          SCL=1;SCL=1;SCL=1;SCL=1;
  62   1          SDA=1;SDA=1;SDA=1;SDA=1;
  63   1          SCL=0;
  64   1      }
  65          
  66          /**************检查应答位*******************/
  67          bit IICRecAck(void)
  68          {
  69   1          SCL=0;
  70   1          SDA=1;
  71   1          SCL=1;SCL=1;SCL=1;SCL=1;SCL=1;
  72   1          CY=SDA;          //因为返回值总是放在CY中的
  73   1          SCL=0;
  74   1          return(CY);
  75   1      }
  76          
  77          /*****************不对IIC总线产生应答***************/
  78          void IICNoAck(void)
  79          {
  80   1          SDA=1;
  81   1          SCL=1;SCL=1;SCL=1;SCL=1;SCL=1;SCL=0;
  82   1      }
  83          
  84          /*******************向IIC总线写数据*********************/
  85          void IICSendByte(uchar sendbyte)
  86          {
  87   1          uchar j;
  88   1          for(j=8;j>0;j--)
  89   1         {
  90   2             SCL=0;
  91   2             sendbyte<<=1;        //无论C51怎样实现这个操作,始终会使CY=sendbyte^7;
  92   2             SDA=CY;
  93   2             SCL=1;
  94   2         }
  95   1         SCL=0;
  96   1      }
  97          
  98          /**********************从IIC总线上读数据子程序**********/
  99          uchar IICReceiveByte(void)
 100          {
 101   1          uchar receivebyte,ii;
 102   1          SCL=0;
 103   1          ii=8;
 104   1          while(ii--)
 105   1         {
 106   2             SCL=1;
 107   2             receivebyte=(receivebyte<<1)|SDA;
 108   2             SCL=0;
 109   2         }
 110   1         return(receivebyte);
 111   1      }
 112          
 113          
 114          /**************************************************************************************************
 115          *
 116          *IIC总线写函数
 117          *函数声明:bit IICWrite(uint address,uchar buf);
C51 COMPILER V7.20   TEXT1                                                                 07/17/2007 07:26:06 PAGE 3   

 118          *函数参数:address为AT24C64的地址,buf为要在这个地址写的数据
 119          *函数作用:往地址写一个字节的数据
 120          **************************************************************************************************/
 121          bit IICWrite(uint address,uchar buf)
 122          {      
 123   1             bit flag;
 124   1             flag=1;
 125   1             IICStart();
 126   1             IICSendByte(0xa0);
 127   1             if(IICRecAck())
 128   1             flag=0;
 129   1             IICSendByte((uchar)(address>>8));
 130   1             if(IICRecAck())
 131   1             flag=0;
 132   1             IICSendByte((uchar)address);
 133   1             if(IICRecAck())
 134   1             flag=0;
 135   1             IICSendByte(buf);
 136   1             if(IICRecAck())
 137   1                 flag=0;
 138   1             IICStop();
 139   1             delay(255);
 140   1             delay(255);
 141   1             delay(255);
 142   1             delay(255);
 143   1             return(flag);
 144   1      }
 145          
 146          uchar IICRead(uint address)
 147          {      uchar buf;
 148   1             IICStart();
 149   1             IICSendByte(0xa0);
 150   1             if(IICRecAck())
 151   1             buf=0xff;
 152   1             IICSendByte((uchar)(address>>8));
 153   1             if(IICRecAck())
 154   1             buf=0xff;
 155   1             IICSendByte((uchar)address);
 156   1             if(IICRecAck())
 157   1             buf=0xff;
 158   1             IICStart();
 159   1             IICSendByte(0xa1);
 160   1             if(IICRecAck())
 161   1             buf=0xff;
 162   1             buf=IICReceiveByte();
 163   1                                     //read last byte data
 164   1             IICNoAck();      
 165   1             IICStop();
 166   1                 delay(50);
 167   1             return(buf);
 168   1      }
 169          
 170          
 171          /**************adc_549convert*******************/
 172          uchar adc_549convert()
 173          {   unsigned char i;
 174   1          cs_549=1;
 175   1          cs_549=0;
 176   1          clk_549=0;
 177   1          for(i=0;i<8;i++)
 178   1          {   
 179   2                      data_549=1;
C51 COMPILER V7.20   TEXT1                                                                 07/17/2007 07:26:06 PAGE 4   

 180   2                  clk_549=1;
 181   2              adc_549low=data_549;  //read one bit
 182   2              clk_549=0;
 183   2              if(i<7) adc_549=adc_549<<1;//经八次左移adc初值可以不付
 184   2          }
 185   1          clk_549=0;
 186   1          cs_549=1;
 187   1          return(adc_549);
 188   1      }
 189          
 190          
 191          
 192          
 193          
 194          
 195          /***********忙判断标志,返回一个位BF********************/
 196          bit lcd1602_busy(void)
 197          {
 198   1              uchar busy_flag;
 199   1              rs_1602=0;
 200   1              rw_1602=1;
 201   1              _nop_();
 202   1              e_1602=1;
 203   1              _nop_();
 204   1              lcd1602_bus=0xff;
 205   1              busy_flag=lcd1602_bus;   //e在高电平时读 
 206   1              e_1602=0;
 207   1              return (bit)(busy_flag&0x80);    //BF=1; BUSY  返回一个位
 208   1      }
 209          
 210          /********写命令,有两个参数,一个是要写的命令控制字,
 211          第二个是用来控制是否进行忙标志的判断。
 212          busyflag=1;
 213          判断: 为0 
 214          ***************/
 215          void lcd1602_wrcmd(unsigned char lcdcmd)
 216          {
 217   1              while(lcd1602_busy());     //等待空闲
 218   1              lcd1602_bus=lcdcmd;
 219   1              rs_1602=0;
 220   1              rw_1602=0;
 221   1              _nop_();
 222   1              e_1602=1;
 223   1              _nop_();
 224   1              _nop_();
 225   1              e_1602=0;      //产生一个下沿     
 226   1      }
 227          
 228          
 229          
 230          /***************向液晶写数据******************/
 231          void lcd1602_wrdata(uchar lcddata)
 232          {
 233   1       while(lcd1602_busy());       //等待空闲
 234   1       lcd1602_bus=lcddata;             //在下沿的时候写数据
 235   1       rs_1602=1;
 236   1       rw_1602=0;
 237   1       _nop_();
 238   1       e_1602=1;
 239   1       _nop_();
 240   1       _nop_();
 241   1       e_1602=0;
C51 COMPILER V7.20   TEXT1                                                                 07/17/2007 07:26:06 PAGE 5   

 242   1       //lcd_bus=0xff;
 243   1      }
 244          
 245          
 246          /************液晶的清屏************/
 247          void lcd1602_clear(void)
 248          {
 249   1        lcd1602_wrcmd(0x01);     //液晶清屏控制字     并延时>40us
 250   1        delay(100);
 251   1      }
 252          
 253          /***********1602液晶的初始化***************/
 254          void lcd1602_init(void)
 255          {
 256   1        lcd1602_wrcmd(0x38);          //功能设置-----8位数据接口,两行显示,5*7点阵字符显示
 257   1        delay(100);
 258   1        lcd1602_wrcmd(0x0e);         //显示开关控制----显示开关开,光标开关关,闪烁开关关
 259   1        delay(100);
 260   1        lcd1602_wrcmd(0x06);         //输入方式设置,AC自增1, S=0;

⌨️ 快捷键说明

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