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

📄 8583 b20.lst

📁 菜鸟板的时钟 第一次学51 师兄们帮小弟看看 还有很多要改进的地方
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.07   8583_B20                                                              02/05/2009 23:03:45 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE 8583_B20
OBJECT MODULE PLACED IN 8583 b20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 8583 b20.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg51.h>//加载头文件
   2          #include <intrins.H>//装载
   3          #define uchar unsigned char//变量类型的宏定义
   4          #define uint unsigned int//变量类型的宏定义
   5          #define  SET    5
   6          #define  MON   4
   7          #define  DAY    3
   8          #define  HOU    2
   9          #define  MIN    1
  10          #define  PCF8583  0XA0
  11          #define  _Nop()  _nop_()        /*定义空指令*/
  12          sbit SDA=P1^7;            /*模拟I2C数据传送位*/
  13          sbit SCL=P1^6;            /*模拟I2C时钟控制位*/
  14          
  15                                                           /*状态标志*/
  16          bit ack;          /*应答标志位*/
  17          
  18          uchar SEG7[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};/*0~9的数码管段码*/
  19          
  20          uchar act[12]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x04,0x08,0x10,0x20};//12位数码管位码;  
  21          uchar  read_temp,tens,decile,units,tmp,tmprt; 
  22          bit flag_init;
  23          
  24          uchar MS,mon,day,hou,min,sec,b20;
  25          uchar key;
  26          uchar discnt,tempb20,tempb21;
  27          uint cnt,time_cnt;
  28          uchar first;
  29          uchar temp1,temp2,temp;
  30          sbit MSKEY=P0^5; /*功能键标志*/
  31          sbit MONKEY=P0^4;//月按键
  32          sbit DAYKEY=P0^3;//天按键
  33          sbit HOUKEY=P0^2;//时按键
  34          sbit MINKEY=P0^1;//分按键
  35          sbit  DQ=P3^0;
  36          sbit TEST=P3^4;
  37          
  38          //sbit CHECKKEY=P3^0;//查询按键
  39          sbit CLK=P1^0;
  40          sbit  DATA=P1^1;
  41          
  42          void TIMERIni(void);
  43          void menu(void);
  44          void delay(uint k);
  45          void keyboard(void);
  46          void send164(uchar m);
  47          void dis_time(uchar m);
  48          void dis_adjtime(uchar m);
  49          uchar IRcvByte(uchar sla,uchar suba);
  50          bit ISendByte(uchar sla,uchar suba,uchar c);
  51          void Ack_I2c(bit a);
  52          uchar  RcvByte(void);
  53          void  SendByte(uchar c);
  54          void Stop_I2c(void);
  55          void Start_I2c(void);
C51 COMPILER V7.07   8583_B20                                                              02/05/2009 23:03:45 PAGE 2   

  56          
  57          
  58          
  59          
  60          uchar convert_BCD(uchar i)
  61          { 
  62   1           uchar i1,i2;
  63   1               i1=i%10;
  64   1               i2=i/10; 
  65   1              i2=i2<<4;
  66   1               i=i2+i1;
  67   1               return i;
  68   1      }
  69          
  70          void menu(void)//扫描按键子函数
  71          {
  72   1              uchar i;
  73   1             if(key==SET)
  74   1                      {MS++; 
  75   2                        
  76   2                        if(MS==2)
  77   2                                      {  
  78   3                                         
  79   3                                                MS=0; first=0;
  80   3                                       
  81   3                                        }
  82   2                        }// 调整模式
  83   1             if(MS==1)
  84   1                       {    
  85   2                             switch(key)
  86   2                              { 
  87   3                                      case (MIN):
  88   3                                                                  {   ISendByte(PCF8583, 0X00,0x00); 
  89   4                                                                      min++;if(min>=60) min=0;
  90   4                                                                 i=convert_BCD(min);
  91   4                                                                 ISendByte(PCF8583, 0X03,i);
  92   4                                                                      }break;
  93   3                                          case (HOU):
  94   3                                                                {   ISendByte(PCF8583, 0X00,0x00); 
  95   4                                                                              hou++;if(hou>23) hou=0;
  96   4                                                                         i=convert_BCD(hou);
  97   4                                                                         ISendByte(PCF8583, 0X04, i);
  98   4                                                                } break;
  99   3                                       case(DAY):
 100   3                                                                 {   ISendByte(PCF8583, 0X00,0x00); 
 101   4                                                                      day++;if(day>31) day=1;
 102   4                                                                   i=convert_BCD(day);
 103   4                                                                  ISendByte(PCF8583, 0x05, i);
 104   4                                                                       }break;
 105   3                                      case(MON):
 106   3                                                              {   ISendByte(PCF8583, 0X00,0x00); 
 107   4                                                                      mon++;if(mon>12) mon=1;
 108   4                                                                  i=convert_BCD(mon);
 109   4                                                                  ISendByte(PCF8583, 0x06, i);
 110   4                                                                      }break;
 111   3                                              default:break;
 112   3                              }
 113   2              }
 114   1                 key=0;
 115   1                        
 116   1      }
 117          
C51 COMPILER V7.07   8583_B20                                                              02/05/2009 23:03:45 PAGE 3   

 118          void delay(uint k)
 119          {
 120   1          uint i,j;
 121   1          for(i=0;i<k;i++)
 122   1                      {
 123   2                       for(j=0;j<1000;j++) ;
 124   2                     }
 125   1      }
 126          
 127          void keyboard(void)
 128          {   
 129   1          P0=0X3F;
 130   1           if((P0&0x02)==0)
 131   1               {  delay(5);
 132   2                   while((P0&0x02)==0);
 133   2                         key=MIN;
 134   2                }
 135   1               else 
 136   1                      if((P0&0x04)==0)
 137   1                          {  
 138   2                            delay(5);
 139   2                             while((P0&0x04)==0);
 140   2                              key=HOU;
 141   2                           } 
 142   1                         else 
 143   1                               if((P0&0x08)==0)
 144   1                                     {  
 145   2                                     delay(5);
 146   2                                     while((P0&0x08)==0);
 147   2                                       key=DAY;
 148   2                                      } 
 149   1                                       else
 150   1                                            if((P0&0x10)==0)
 151   1                                              {  
 152   2                                                 delay(5);
 153   2                                                 while((P0&0x10)==0);
 154   2                                                 key=MON;
 155   2                                               } 
 156   1                                                                else
 157   1                                                        if((P0&0x20)==0)
 158   1                                                         {  
 159   2                                                            delay(5);
 160   2                                                            while((P0&0x20)==0);
 161   2                                                             key=SET;
 162   2                                                           } 
 163   1      }
 164          
 165                  
 166                  
 167          
 168          void time0(void) interrupt 1 
 169          {
 170   1              TH0=0xFa;TL0=0x24;
 171   1             discnt++;cnt++;
 172   1             if(discnt>=12)discnt=0;// 显示为12位数码管
 173   1             if(cnt>200)cnt=0;// 调整时的闪烁周期
 174   1             switch(MS)
 175   1               {
 176   2                  case 0:{dis_time(discnt);}break;// 显示走时
 177   2                  case 1:{dis_adjtime(discnt);}break;// 显示调时
 178   2                  default: break;
 179   2              }
C51 COMPILER V7.07   8583_B20                                                              02/05/2009 23:03:45 PAGE 4   

 180   1                 
 181   1                
 182   1      }
 183          
 184          void time1(void) interrupt 3    //50ms
 185          {
 186   1         TH1=0X3C;TL1=0XAF;
 187   1          time_cnt++;
 188   1              if(time_cnt>=20)   //  1秒钟计时时间到,读PCF8583的各寄存器的值
 189   1                      {   
 190   2                            time_cnt=0;
 191   2                            read_temp=1;
 192   2                               
 193   2                      }
 194   1      }
 195          ///////////////////////*18b20*////////////////////////
 196          void Delay_uS(unsigned int tt)   //延时时间为(tt*9+16)us.晶振为12MHz
 197          {
 198   1              while(tt--)
 199   1              ;
 200   1      }
 201          
 202          void Delay1mS(unsigned int tt)  //延时时间为tt ms.晶振为12MHz
 203          {
 204   1              unsigned char i;
 205   1              while(tt--)
 206   1              for(i=113;i>0;i--)
 207   1                      ;
 208   1      }
 209          
 210          
 211          void  DS18B20_init(void)
 212          {     uchar i;
 213   1          start:   //DQ=1;
 214   1                      //_nop_();
 215   1                         DQ=0;
 216   1                         Delay_uS(54);
 217   1                         DQ=1;
 218   1                         Delay_uS(4);
 219   1                         while(DQ)
 220   1                              {
 221   2                                  i++;
 222   2                                  if(i>200)
 223   2                                      {goto  start;
 224   3                                      }
 225   2                              }
 226   1                         DQ=1;
 227   1                         Delay_uS(25);
 228   1                          Delay_uS(25);
 229   1      }
 230          

⌨️ 快捷键说明

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