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

📄 11.lst

📁 很好的51单片机仿真模板。
💻 LST
字号:
C51 COMPILER V8.08   11                                                                    10/28/2008 16:04:45 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE 11
OBJECT MODULE PLACED IN 11.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 11.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          unsigned char sec;        //定义计数值,每过 1 秒,sec 加 1 
   6          unsigned int tcnt;        //定时中断次数 
   7          bit  write=0;             //写 24C08 的标志; 
   8          sbit sda=P2^0;            //IIC 接口 SDA 定义 
   9          sbit scl=P2^1;  //IIC 接口 SCL 定义 
  10          sbit dula=P2^6; 
  11          sbit wela=P2^7; 
  12          unsigned char j,k; 
  13          void delay(unsigned char i)   //延时程序 
  14          { 
  15   1              for(j=i;j>0;j--) 
  16   1              for(k=125;k>0;k--); 
  17   1      } 
  18          uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,   //数码管编码 
  19                    0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; 
  20          void display(uchar bai_c,uchar sh_c)      //显示程序 
  21          { 
  22   1              dula=0; 
  23   1              
  24   1              P0=table[bai_c];   //显示百位 
  25   1              dula=1;
  26   1              dula=0; 
  27   1              wela=0; 
  28   1              P0=0x7e; 
  29   1              wela=1; 
  30   1              wela=0; 
  31   1              delay(5); 
  32   1      
  33   1              P0=0;             //------------
  34   1              dula=1;           //该部分仿真必须要。
  35   1              dula=0;           //因为每次下一位的段选打开后,码值会先赋值给上一位,
  36   1              P0=0x7e;          //从而改变上一位的显示。然后再打开下一位的位选。
  37   1              wela=1;           //
  38   1              wela=0;           //------------
  39   1      
  40   1              dula=0; 
  41   1              P0=table[sh_c];    //显示十位 
  42   1              dula=1; 
  43   1              dula=0; 
  44   1              wela=0; 
  45   1              P0=0x7d; 
  46   1              wela=1; 
  47   1              wela=0; 
  48   1              delay(5);
  49   1                      
  50   1              P0=0;             //------------
  51   1              dula=1;           //该部分仿真必须要。
  52   1              dula=0;           //因为每次下一位的段选打开后,码值会先赋值给上一位,
  53   1              P0=0x7d;          //从而改变上一位的显示。然后再打开下一位的位选。
  54   1              wela=1;           //
  55   1              wela=0;           //------------ 
C51 COMPILER V8.08   11                                                                    10/28/2008 16:04:45 PAGE 2   

  56   1      } 
  57           
  58          /////////24C02 读写驱动程序//////////////////// 
  59          void delay1(unsigned char x)      //延时子函数 
  60          {  
  61   1              unsigned int i; 
  62   1              for(i=0;i<x;i++);
  63   1      } 
  64          void flash()                   //延时子函数 
  65          {  ;  ; } 
  66          void x24c08_init()       //24c02 初始化子程序 
  67          {       scl=1; 
  68   1              flash(); 
  69   1              sda=1; 
  70   1              flash();
  71   1      } 
  72          void start()           //启动 I2C 总线 
  73          {
  74   1              sda=1; 
  75   1              flash(); 
  76   1              scl=1; 
  77   1              flash(); 
  78   1              sda=0; 
  79   1              flash(); 
  80   1              //scl=0; 
  81   1              //flash();
  82   1      } 
  83          void stop()           //停止 I2C 总线 
  84          {
  85   1              sda=0; 
  86   1              flash(); 
  87   1              scl=1; 
  88   1              flash(); 
  89   1              sda=1; 
  90   1              flash();
  91   1      } 
  92          void writex(unsigned char j)    //写一个字节 
  93          {       unsigned char i,temp; 
  94   1              temp=j; 
  95   1              for (i=0;i<8;i++) 
  96   1              {       
  97   2                      temp=temp<<1; 
  98   2                      scl=0; 
  99   2                      flash(); 
 100   2                      sda=CY; 
 101   2                      flash(); 
 102   2                      scl=1; 
 103   2                      flash();
 104   2              } 
 105   1              scl=0; 
 106   1              flash(); 
 107   1              sda=1; 
 108   1              flash(); 
 109   1      } 
 110          unsigned char readx()         //读一个字节 
 111          { 
 112   1              unsigned char i,j,k=0; 
 113   1              scl=0; 
 114   1              flash(); 
 115   1              sda=1; 
 116   1              for (i=0;i<8;i++) 
 117   1              {  
C51 COMPILER V8.08   11                                                                    10/28/2008 16:04:45 PAGE 3   

 118   2                      flash(); 
 119   2                      scl=1; 
 120   2                      flash(); 
 121   2                      if (sda==1) j=1; 
 122   2                      else j=0; 
 123   2                      k=(k<<1)|j; 
 124   2                      scl=0;
 125   2              } 
 126   1              flash(); 
 127   1              return(k); 
 128   1      } 
 129          void clock()         //I2C总线应答子函数 
 130          { 
 131   1              unsigned char i=0; 
 132   1      
 133   1              sda=1;  //      仿真增加语句
 134   1              flash(); //     仿真增加语句
 135   1      
 136   1              scl=1; 
 137   1              flash(); 
 138   1              while ((sda==1)&&(i<255))i++; 
 139   1              scl=0; 
 140   1              flash(); 
 141   1      } 
 142          ////////从 24c02 的地址 address 中读取一个字节数据///// 
 143          unsigned char x24c08_read(unsigned char address) 
 144          { 
 145   1              unsigned char i; 
 146   1              start(); 
 147   1              writex(0xa0); 
 148   1              clock(); 
 149   1              writex(address); 
 150   1              clock(); 
 151   1              start(); 
 152   1              writex(0xa1); 
 153   1              clock(); 
 154   1              i=readx(); 
 155   1              stop(); 
 156   1              delay1(10); 
 157   1              return(i); 
 158   1      } 
 159          //////向 24c02 的 address 地址中写入一字节数据 info///// 
 160          void x24c08_write(unsigned char address,unsigned char info) 
 161          { 
 162   1              EA=0; 
 163   1              start(); 
 164   1              writex(0xa0); 
 165   1              clock(); 
 166   1              writex(address); 
 167   1              clock(); 
 168   1              writex(info); 
 169   1              clock(); 
 170   1              stop(); 
 171   1              EA=1; 
 172   1              delay1(50); 
 173   1      } 
 174          void t0(void) interrupt 1 using 0    //定时中断服务函数 
 175          { 
 176   1              TH0=(65536-50000)/256; //对 TH0 TL0 赋值 
 177   1              TL0=(65536-50000)%256; //重装计数初值 
 178   1              tcnt++;        //每过 250ust tcnt 加一 
 179   1              if(tcnt==20)  //计满 20 次(1 秒)时 
C51 COMPILER V8.08   11                                                                    10/28/2008 16:04:45 PAGE 4   

 180   1              { 
 181   2                      tcnt=0;   //重新再计 
 182   2                      sec++; 
 183   2                      write=1;  //1 秒写一次 24C02 
 184   2                      if(sec==100) //定时 100 秒,在从零开始计时 
 185   2                      {sec=0;} 
 186   2              } 
 187   1      } 
 188           
 189          void main()  //主函数 
 190          { 
 191   1              unsigned char i; 
 192   1              TMOD=0x01;       //定时器工作在方式 1  
 193   1              ET0=1;  
 194   1              EA=1;  //开中断 
 195   1              x24c08_init();        //初始化 24C08 
 196   1              sec=x24c08_read(2);   //读出保存的数据赋于 sec 
 197   1              TH0=(65536-50000)/256;  //对 TH0 TL0 赋值 
 198   1              TL0=(65536-50000)%256;  //使定时器 0.05 秒中断一次 
 199   1              TR0=1;              //启动定时器 
 200   1              while(1) 
 201   1              { 
 202   2                      i=10; 
 203   2                      while(i--) 
 204   2                      {       display(sec/10,sec%10); } 
 205   2                              if(write==1) //判断计时器是否计时一秒 
 206   2                              {
 207   3                                      write=0;               //清零 
 208   3                                      x24c08_write(2,sec);  //在 24c02 的地址 2 中写入数据 sec 
 209   3                              } 
 210   2                      }  
 211   1              } 


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    432    ----
   CONSTANT SIZE    =     16    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5    ----
   IDATA SIZE       =   ----    ----
   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 + -