iicled.lst

来自「VB环境下的串口通讯设计」· LST 代码 · 共 555 行 · 第 1/2 页

LST
555
字号
C51 COMPILER V8.05a   IICLED                                                               01/08/2008 18:30:43 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE IICLED
OBJECT MODULE PLACED IN IICLED.OBJ
COMPILER INVOKED BY: C:\Keilc51\C51\BIN\C51.EXE IICLED.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /************************************************/
   2          #include <REG52.H>
   3          #include <intrins.h>
   4          #define uchar unsigned char
   5          #define uint unsigned int
   6          #define ulong unsigned long
   7          #define int8 unsigned char
   8          #define int16 unsigned int
   9          #define int32 unsigned long 
  10          sbit SCLK=P3^5;
  11          sbit IO=P3^6;
  12          sbit RESET=P3^7;
  13          sbit I2C_SDA= P1^5;
  14          sbit I2C_SCK= P1^4;
  15          sbit I2C_WP= P1^3;
  16          
  17          //============================
  18          sbit LED1=P3^4;
  19          sbit LED2=P1^6;
  20          sbit GRE=P1^7;
  21          sbit s1=P0^3;
  22          sbit s2=P2^3;
  23          sbit SCK=P2^4;
  24          sbit RCK=P2^5;
  25          sbit nG=P2^6;
  26          sbit SER=P2^7;
  27          uchar xdata tab[16][6];
  28          uchar count;
  29          uchar l;
  30          uint m;
  31          
  32          
  33          bdata uchar temp;//位于位寻址区的temp变量,
  34          sbit  bit0=temp^0;//发送数据或命令时用到,通过右移操作将数据或命令放到IO线上
  35          sbit  bit7=temp^7;//接收数据时用到,接收到的数据始终存入最高位,然后右移
  36          void McuInit(void);
  37          void Timer_Int();
  38          void tab_time(uchar hh,uchar hl,uchar mh,uchar ml);
  39          uchar read_time(uchar com);
  40          //===============================================
  41          /* 列选择*/
  42          void lay(int8 n)
  43          {
  44   1              int8 i;
  45   1              i=n;
  46   1              s1=0;
  47   1              s2=0;
  48   1              if(n<8)
  49   1              {
  50   2                      //_nop_();
  51   2                      P0=(P0&0xf8)|(~i);
  52   2              }
  53   1              else
  54   1              {       i=i-7;
  55   2                      i=i&0x07;
C51 COMPILER V8.05a   IICLED                                                               01/08/2008 18:30:43 PAGE 2   

  56   2                      i=i|0xf0;                 //保护nG位
  57   2                      P2=(P2&0xf8)|(~i);
  58   2              }
  59   1      
  60   1      }               
  61          /*延时*/
  62          void delay(int8 N)
  63          {
  64   1              int8 i,j,k;
  65   1              for(i=0;i<100;i++)
  66   1                      for(j=0;j<10;j++)
  67   1                              for(k=0;k<N;k++);       
  68   1      
  69   1      }
  70          /*发送字节,移位发送*/
  71          void WriteByte(int8 val)
  72          {
  73   1              int8 i,m;
  74   1              m=~val;
  75   1              for (i = 8; i > 0; i --)
  76   1              {
  77   2              SCK = 0;//拉低74HC595时钟
  78   2              SER = m&0x01;//发送74HC595一位串行数据
  79   2              SCK = 1;//拉高74HC595时钟
  80   2                      m=m>>1;
  81   2              _nop_();//延时
  82   2        }
  83   1        SER = 1;//释放数据总线
  84   1      }
  85          
  86          /*发送字*/
  87          void display(int8 n )
  88          {
  89   1              int8 i;
  90   1              for(i=0;i<6;i++)
  91   1              WriteByte(tab[n][i]);
  92   1          RCK=0;      //保存并行数据
  93   1          _nop_();
  94   1          RCK=1;
  95   1      }
  96          
  97          void delays(int8 n)
  98          {       n=n;
  99   1              m=m+0x1;
 100   1              LED1=m&0x800;
 101   1              GRE=~LED1;
 102   1              LED2=m&0x1000;
 103   1      }
 104          
 105          void XianShiX(void)
 106          {
 107   1              /**/display(0);//行0
 108   1                      lay(14);   //列
 109   1                      delays(1); //短延时
 110   1              /**/display(1);//行1
 111   1                      lay(13);
 112   1                      delays(1);
 113   1              /**/display(2);//行2
 114   1                      lay(12);
 115   1                      delays(1);
 116   1              /**/display(3);//行3
 117   1                      lay(11);
C51 COMPILER V8.05a   IICLED                                                               01/08/2008 18:30:43 PAGE 3   

 118   1                      delays(1);
 119   1              /**/display(4);//行4
 120   1                      lay(10);
 121   1                      delays(1);
 122   1              /**/display(5);//行5
 123   1                      lay(9);
 124   1                      delays(1);
 125   1              /**/display(6);//行6
 126   1                      lay(8);
 127   1                      delays(1);
 128   1      
 129   1              ///**/Timer_Int();
 130   1              /**/display(7);//行7
 131   1                      lay(15);
 132   1                      delays(1);
 133   1              /**/display(8);//行8
 134   1                      lay(7);
 135   1                      delays(1);
 136   1              /**/display(9);//行9
 137   1                      lay(6);
 138   1                      delays(1);
 139   1              /**/display(10);//行10
 140   1                      lay(5);
 141   1                      delays(1);
 142   1              /**/display(11);//行11
 143   1                      lay(4);
 144   1                      delays(1);
 145   1              /**/display(12); //行12
 146   1                      lay(0);
 147   1                      delays(1);
 148   1              /**/display(13); //行13
 149   1                      lay(1);
 150   1                      delays(1);
 151   1              /**/display(14); //行14
 152   1                      lay(2);
 153   1                      delays(1);
 154   1              /**/display(15);  //行15
 155   1                      lay(3);
 156   1                      delays(1);
 157   1      }
 158          //=============================
 159          //延时10US
 160          //内部调用函数
 161          void  Delay_10_uS(void)
 162          {
 163   1           char i=2;
 164   1           while(i--);
 165   1      }
 166          
 167          
 168          
 169          //开始位
 170          //内部调用函数
 171          bit I2C_Start(void)
 172          {
 173   1           Delay_10_uS();
 174   1           I2C_SDA =1;
 175   1           Delay_10_uS();
 176   1           I2C_SCK =1;
 177   1           Delay_10_uS();
 178   1           if ( I2C_SDA == 0) return 0;
 179   1           if ( I2C_SCK == 0) return 0;
C51 COMPILER V8.05a   IICLED                                                               01/08/2008 18:30:43 PAGE 4   

 180   1           I2C_SDA = 0;
 181   1           Delay_10_uS();
 182   1           I2C_SCK = 0;
 183   1           Delay_10_uS();
 184   1           return 1;
 185   1      }
 186          
 187          //停止位
 188          //内部调用函数
 189          void  I2C_Stop(void)
 190          {
 191   1           Delay_10_uS();
 192   1           I2C_SDA = 0;
 193   1           Delay_10_uS();
 194   1           I2C_SCK = 1;
 195   1           Delay_10_uS();
 196   1           I2C_SDA = 1;
 197   1           Delay_10_uS();
 198   1      }
 199          
 200          
 201          //读数据后拉高应答信号
 202          //内部调用函数
 203          void I2C_Nack(void)
 204          {
 205   1           Delay_10_uS();
 206   1           I2C_SDA=1;
 207   1           Delay_10_uS();
 208   1           I2C_SCK=1;
 209   1           Delay_10_uS();
 210   1           I2C_SCK=0;
 211   1           Delay_10_uS();
 212   1      }
 213          
 214          //写单字节数据
 215          //内部调用函数
 216          bit I2C_Send_Byte( uchar d)
 217          {
 218   1           uchar i = 8;
 219   1           bit bit_ack;
 220   1           while( i-- )
 221   1           {
 222   2                Delay_10_uS();
 223   2                if ( d &0x80 )   I2C_SDA =1;
 224   2                else             I2C_SDA =0;
 225   2                Delay_10_uS();
 226   2                I2C_SCK = 1;
 227   2                Delay_10_uS();
 228   2                I2C_SCK = 0;
 229   2                d = d << 1;
 230   2           }
 231   1           Delay_10_uS();
 232   1           I2C_SDA = 1;
 233   1           Delay_10_uS();
 234   1           I2C_SCK = 1;
 235   1           Delay_10_uS();
 236   1           bit_ack = I2C_SDA;
 237   1           I2C_SCK =0;
 238   1           Delay_10_uS();
 239   1           return bit_ack;
 240   1      }
 241          
C51 COMPILER V8.05a   IICLED                                                               01/08/2008 18:30:43 PAGE 5   

 242          //接收单字节数据
 243          //内部调用函数
 244          uchar I2C_Receive_Byte(void)
 245          {
 246   1           uchar i = 8, d;
 247   1           Delay_10_uS();
 248   1           I2C_SDA = 1;
 249   1           while ( i--)
 250   1           {
 251   2                d = d << 1;
 252   2                Delay_10_uS();
 253   2                I2C_SCK =1;
 254   2                if ( I2C_SDA ) d++;
 255   2                Delay_10_uS();
 256   2                I2C_SCK =0;
 257   2           }
 258   1           return d;
 259   1      }
 260          
 261          

⌨️ 快捷键说明

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