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

📄 200926.lst

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


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

stmt level    source

   1          #include <reg52.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          
  13          #define Busy 0x80        //常量定义
  14          
  15          //==============================================
  16          sbit SDA=P1^7;            /*模拟I2C数据传送位*/
  17          sbit SCL=P1^6;            /*模拟I2C时钟控制位*/
  18          
  19                                                           /*状态标志*/
  20          bit ack;          /*应答标志位*/
  21          
  22          uchar SEG7[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};/*0~9的数码管段码*/
  23          
  24          uchar act[12]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x04,0x08,0x10,0x20};//12位数码管位码;  
  25          uchar  read_temp,tens,decile,units,tmp,tmprt; 
  26          bit flag_init;
  27          
  28          uchar MS,mon,day,hou,min,sec;
  29          uchar key;
  30          uchar discnt,tempb20,tempb21;
  31          uint cnt,time_cnt;
  32          uchar first;
  33          uchar temp1,temp2,temp;
  34          uchar btemp,btemp1,btemp2;
  35          sbit MSKEY=P0^5; /*功能键标志*/
  36          sbit MONKEY=P0^4;//月按键
  37          sbit DAYKEY=P0^3;//天按键
  38          sbit HOUKEY=P0^2;//时按键
  39          sbit MINKEY=P0^1;//分按键
  40          sbit DQ=P3^5;                   //温度测试端
  41          sbit TEST=P3^4;
  42          
  43          //sbit CHECKKEY=P3^0;//查询按键
  44          sbit CLK=P1^0;
  45          sbit  DATA=P1^1;
  46          
  47          void TIMERIni(void);
  48          void menu(void);
  49          void delay(uint k);
  50          void keyboard(void);
  51          void send164(uchar m);
  52          void dis_time(uchar m);
  53          void dis_adjtime(uchar m);
  54          uchar IRcvByte(uchar sla,uchar suba);
  55          bit ISendByte(uchar sla,uchar suba,uchar c);
C51 COMPILER V7.07   200926                                                                02/06/2009 15:01:06 PAGE 2   

  56          void Ack_I2c(bit a);
  57          uchar  RcvByte(void);
  58          void  SendByte(uchar c);
  59          void Stop_I2c(void);
  60          void Start_I2c(void);
  61          
  62          void gettempTS(void);
  63          void initTS(void);
  64          uchar readBTS(void);
  65          void writeBTS(uchar byte);
  66          void resetTS(void);
  67          bit readTS(void);
  68          void write1TS(void);
  69          void write0TS(void);
  70          void delay15us(void);
  71          void delay60us(void);
  72          void BDelay_uS(unsigned int tt);
  73          
  74          uchar convert_BCD(uchar i)
  75          { 
  76   1           uchar i1,i2;
  77   1               i1=i%10;
  78   1               i2=i/10; 
  79   1              i2=i2<<4;
  80   1               i=i2+i1;
  81   1               return i;
  82   1      }
  83          
  84          void menu(void)//扫描按键子函数
  85          {
  86   1              uchar i;
  87   1             if(key==SET)
  88   1                      {MS++; 
  89   2                        
  90   2                        if(MS==2)
  91   2                                      {  
  92   3                                         
  93   3                                                MS=0; first=0;
  94   3                                       
  95   3                                        }
  96   2                        }// 调整模式
  97   1             if(MS==1)
  98   1                       {    
  99   2                             switch(key)
 100   2                              { 
 101   3                                      case (MIN):
 102   3                                                                  {   ISendByte(PCF8583, 0X00,0x00); 
 103   4                                                                      min++;if(min>=60) min=0;
 104   4                                                                 i=convert_BCD(min);
 105   4                                                                 ISendByte(PCF8583, 0X03,i);
 106   4                                                                      }break;
 107   3                                          case (HOU):
 108   3                                                                {   ISendByte(PCF8583, 0X00,0x00); 
 109   4                                                                              hou++;if(hou>23) hou=0;
 110   4                                                                         i=convert_BCD(hou);
 111   4                                                                         ISendByte(PCF8583, 0X04, i);
 112   4                                                                } break;
 113   3                                       case(DAY):
 114   3                                                                 {   ISendByte(PCF8583, 0X00,0x00); 
 115   4                                                                      day++;if(day>31) day=1;
 116   4                                                                   i=convert_BCD(day);
 117   4                                                                  ISendByte(PCF8583, 0x05, i);
C51 COMPILER V7.07   200926                                                                02/06/2009 15:01:06 PAGE 3   

 118   4                                                                       }break;
 119   3                                      case(MON):
 120   3                                                              {   ISendByte(PCF8583, 0X00,0x00); 
 121   4                                                                      mon++;if(mon>12) mon=1;
 122   4                                                                  i=convert_BCD(mon);
 123   4                                                                  ISendByte(PCF8583, 0x06, i);
 124   4                                                                      }break;
 125   3                                              default:break;
 126   3                              }
 127   2              }
 128   1                 key=0;
 129   1                        
 130   1      }
 131          
 132          void delay(uint k)
 133          {
 134   1          uint i,j;
 135   1          for(i=0;i<k;i++)
 136   1                      {
 137   2                       for(j=0;j<1000;j++) ;
 138   2                     }
 139   1      }
 140          
 141          void keyboard(void)
 142          {   
 143   1          P0=0X3F;
 144   1           if((P0&0x02)==0)
 145   1               {  delay(5);
 146   2                   while((P0&0x02)==0);
 147   2                         key=MIN;
 148   2                }
 149   1               else 
 150   1                      if((P0&0x04)==0)
 151   1                          {  
 152   2                            delay(5);
 153   2                             while((P0&0x04)==0);
 154   2                              key=HOU;
 155   2                           } 
 156   1                         else 
 157   1                               if((P0&0x08)==0)
 158   1                                     {  
 159   2                                     delay(5);
 160   2                                     while((P0&0x08)==0);
 161   2                                       key=DAY;
 162   2                                      } 
 163   1                                       else
 164   1                                            if((P0&0x10)==0)
 165   1                                              {  
 166   2                                                 delay(5);
 167   2                                                 while((P0&0x10)==0);
 168   2                                                 key=MON;
 169   2                                               } 
 170   1                                                                else
 171   1                                                        if((P0&0x20)==0)
 172   1                                                         {  
 173   2                                                            delay(5);
 174   2                                                            while((P0&0x20)==0);
 175   2                                                             key=SET;
 176   2                                                           } 
 177   1      }
 178          
 179                  
C51 COMPILER V7.07   200926                                                                02/06/2009 15:01:06 PAGE 4   

 180                  
 181          
 182          void time0(void) interrupt 1 
 183          {
 184   1              TH0=0xf8;TL0=0x30;
 185   1             if(discnt>11)discnt=0;// 显示为12位数码管
 186   1             if(cnt>400)cnt=0;// 调整时的闪烁周期
 187   1             switch(MS)
 188   1               {
 189   2                  case 0:{dis_time(discnt);}break;// 显示走时
 190   2                  case 1:{dis_adjtime(discnt);}break;// 显示调时
 191   2                  default: break;
 192   2              }
 193   1                 discnt++;cnt++;
 194   1                
 195   1      }
 196          
 197          void time1(void) interrupt 3    //50ms
 198          {
 199   1         TH1=0X3C;TL1=0XAF;
 200   1          time_cnt++;
 201   1              if(time_cnt>=20)   //  1秒钟计时时间到,读PCF8583的各寄存器的值
 202   1                      {   
 203   2                            time_cnt=0;
 204   2                            read_temp=1;
 205   2                                  
 206   2                      }
 207   1      }
 208          ///////////////////////*18b20*////////////////////////
 209          void BDelay_uS(unsigned int tt)  //延时时间为(tt*9+16)us.晶振为12MHz
 210          {
 211   1              while(tt--)
 212   1              ;
 213   1      }
 214          
 215          void delay15us(void)
 216          {
 217   1      _Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();
 218   1      }
 219          void Delay1mS(unsigned int tt)  //延时时间为tt ms.晶振为12MHz
 220          {
 221   1              unsigned char i;
 222   1              while(tt--)
 223   1              for(i=113;i>0;i--)
 224   1                      ;
 225   1      }
 226          
 227          void  DS18B20_init(void)
 228          {     uint i;
 229   1          start:   DQ=1;
 230   1                      _Nop();
 231   1                         DQ=0;
 232   1                       for(i=0;i<8;i++){delay15us();delay15us();delay15us();delay15us();delay15us();}
 233   1      
 234   1                         DQ=1;
 235   1                       delay15us();delay15us(); //Delay_uS(4);
 236   1                         while(DQ)
 237   1                              {
 238   2                                  i++;
 239   2                                  if(i>2000)
 240   2                                      {goto  start;
 241   3                                      } 
C51 COMPILER V7.07   200926                                                                02/06/2009 15:01:06 PAGE 5   

⌨️ 快捷键说明

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