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

📄 c21-2.lst

📁 C51单片机模拟I2C传输协议进行数据的读取写入
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   C21_2                                                                 09/23/2008 23:35:30 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE C21_2
OBJECT MODULE PLACED IN C21-2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE C21-2.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 STATUS_KEY 0xdf
   6          #define INC_KEY 0xfb
   7          #define DEC_KEY 0xf7
   8          #define OK_KEY 0xef
   9          #define ON 0
  10          #define OFF 1
  11          uchar code SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  12          uchar code ACT[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
  13          sbit SDA=P3^7;
  14          sbit SCL=P3^6;
  15          sbit OUT=P1^0;
  16          uchar cnt1,cnt2,sec,min,hour,status;
  17          uchar set1_m,set1_h,set2_m,set2_h;
  18          uchar bdata com_data;
  19          sbit mos_bit=com_data^7;
  20          sbit low_bit=com_data^0;
  21          bit set1_flag,set2_flag;
  22          //==============================================================================
  23          void pout(void);
  24          uchar scan_key(void);
  25          uchar rd_2401(char a);
  26          void wr_2401(char a,uchar b);
  27          void ic_delay(uint n);
  28          void delay(uint k);
  29          //==============================================================================
  30          void initial(void)
  31          {
  32   1        uchar rd_val;
  33   1        rd_val=rd_2401(100);
  34   1        if(rd_val==88)
  35   1        {
  36   2           set1_m=rd_2401(80);ic_delay(250);
  37   2           set1_h=rd_2401(81);ic_delay(250);
  38   2           set2_m=rd_2401(90);ic_delay(250);
  39   2           set2_h=rd_2401(90);ic_delay(250);
  40   2           set1_flag=rd_2401(70);ic_delay(250);
  41   2           set2_flag=rd_2401(71);ic_delay(250);
  42   2        }
  43   1        TMOD=0x11;
  44   1        TH0=-(50000/256);
  45   1        TL0=-(50000%256);
  46   1        TR0=1;ET0=1;
  47   1        TH1=-(1000/256);
  48   1        TH1=-(1000%256);
  49   1        TR1=1;ET1=1;EA=1;
  50   1      }
  51          //===============================================================================
  52          void main(void)
  53          {
  54   1        uchar key_val;
  55   1        initial();
C51 COMPILER V7.06   C21_2                                                                 09/23/2008 23:35:30 PAGE 2   

  56   1        for(;;)
  57   1        {
  58   2          pout();
  59   2          key_val=scan_key();
  60   2          if(key_val==STATUS_KEY)
  61   2          {
  62   3            status++;
  63   3            if(status==5)
  64   3            {
  65   4               status=0;
  66   4               EA=0;
  67   4               wr_2401(80,set1_m);ic_delay(250);
  68   4               wr_2401(81,set1_h);ic_delay(250);
  69   4               wr_2401(90,set2_m);ic_delay(250);
  70   4               wr_2401(91,set2_h);ic_delay(250);
  71   4               wr_2401(70,set1_flag);ic_delay(250);
  72   4               wr_2401(71,set2_flag);ic_delay(250);
  73   4               wr_2401(100,88);ic_delay(250);
  74   4               EA=1;
  75   4            }
  76   3            delay(300);
  77   3          }  
  78   2      /********************************************************************************/
  79   2         if(key_val==INC_KEY)
  80   2         {
  81   3           switch(status)
  82   3           {
  83   4             case 1:if(set1_m<59)set1_m++;delay(300);break;
  84   4             case 2:if(set1_h<23)set1_h++;delay(300);break;
  85   4             case 3:if(set2_m<59)set2_m++;delay(300);break;
  86   4             case 4:if(set2_h<23)set2_h++;delay(300);break;
  87   4             default:break;
  88   4           }
  89   3         }
  90   2      /********************************************************************************/
  91   2         if(key_val==DEC_KEY)
  92   2         {
  93   3           switch(status)
  94   3           {
  95   4             case 1:if(set1_m>0)set1_m--;delay(300);break;
  96   4             case 2:if(set1_h>0)set1_h--;delay(300);break;
  97   4             case 3:if(set2_m>0)set2_m--;delay(300);break;
  98   4             case 4:if(set2_h>0)set2_h--;delay(300);break;
  99   4             default:break;
 100   4           }
 101   3         }
 102   2      /********************************************************************************/
 103   2         if(key_val==OK_KEY)
 104   2         {
 105   3           if((status==1)||(status==2))set1_flag=~set1_flag;delay(300);
 106   3           if((status==3)||(status==4))set2_flag=~set2_flag;delay(300);
 107   3         }
 108   2        }
 109   1      }
 110          //================================================================================
 111          uchar scan_key(void)
 112          {
 113   1        uchar temp;
 114   1        P3=0xff;
 115   1        temp=P3;
 116   1        if(temp!=0xff)
 117   1        {
C51 COMPILER V7.06   C21_2                                                                 09/23/2008 23:35:30 PAGE 3   

 118   2          delay(30);
 119   2          temp=P3;
 120   2          if(temp!=0xff)
 121   2          return temp;
 122   2        }
 123   1        return 0;
 124   1      }
 125          //=================================================================================
 126          void pout(void)
 127          {
 128   1        if(set1_flag)
 129   1        {
 130   2         if((min==set1_m)&&(hour==set1_h))OUT=ON;
 131   2              else OUT=OFF;
 132   2        }
 133   1        if(set2_flag)
 134   1        {
 135   2         if((min==set2_m)&&(hour==set2_h))OUT=ON;
 136   2              else OUT=OFF;
 137   2        }
 138   1      }
 139          //=================================================================================
 140          void serve1(void) interrupt 1
 141          {
 142   1        TH0=-(50000/256);
 143   1        TL0=-(50000%256);
 144   1        cnt1++;
 145   1        if(cnt1>=20){sec++;cnt1=0;}
 146   1        if(sec>=60){min++;sec=0;}
 147   1        if(min>=60){hour++;min=0;}
 148   1        if(hour>=24)hour=0;
 149   1      }
 150          //================================================================================
 151          void delay(uint k)
 152          {
 153   1        uint i,j;
 154   1        for(i=0;i<k;i++)
 155   1        {
 156   2          for(j=0;j<121;j++)
 157   2          {;}
 158   2        }
 159   1      }
 160          //=================================================================================
 161          void serve_2(void) interrupt 3
 162          {
 163   1        static bit bit_flag;
 164   1        TH1=-(1000/256); 
 165   1        TL1=-(1000%256);
 166   1        cnt2++;
 167   1        if(status==0){if(cnt2>5)cnt2=0;}
 168   1        else {if(cnt2>29)cnt2=0;}
 169   1        if(status==0)
 170   1        {
 171   2          switch(cnt2)
 172   2          {
 173   3            case 0:P0=SEG7[sec%10];P2=ACT[0];break;
 174   3            case 1:P0=SEG7[sec/10];P2=ACT[1];break;
 175   3            case 2:P0=SEG7[min%10];P2=ACT[2];break;
 176   3            case 3:P0=SEG7[min/10];P2=ACT[3];break;
 177   3            case 4:P0=SEG7[hour%10];P2=ACT[4];break;
 178   3            case 5:P0=SEG7[hour/10];P2=ACT[5];break;
 179   3            default:break;
C51 COMPILER V7.06   C21_2                                                                 09/23/2008 23:35:30 PAGE 4   

 180   3          }
 181   2        }

⌨️ 快捷键说明

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