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

📄 test.lst

📁 一个51单片机温度控制器,又一个示范如何在2051这样的小内存小ROM单片机上实现实时多任务小例子.使用时间片和状态机来完成任务的调度,而不是靠任务切换机制(这样小的资源是不足以支持RTOS的)
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.02b   TEST                                                                 01/25/2004 00:49:19 PAGE 1   


C51 COMPILER V7.02b, COMPILATION OF MODULE TEST
OBJECT MODULE PLACED IN test.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE test.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg51.h>
   2          
   3          code unsigned char* ver = "00000004";
   4          
   5          sbit CS0 = P3^0;
   6          sbit CS1 = P1^6;
   7          sbit CS2 = P1^5;
   8          sbit CS3 = P3^1;
   9          sbit CS4 = P1^3;
  10          sbit CS5 = P3^7;
  11          
  12          //#define DATA_PORT P1
  13          
  14          void out_cs_mask(bit n){
  15   1              CS0 = n;
  16   1              CS1 = n;
  17   1              CS2 = n;
  18   1              CS3 = n;
  19   1              CS4 = n;
  20   1              CS5 = n;
  21   1      }
  22          
  23          void out_cs(unsigned char cs, bit n){
  24   1              switch (cs){
  25   2                      case 0:                 CS0 = n;                        break;
  26   2                      case 1:                 CS1 = n;                        break;
  27   2                      case 2:                 CS2 = n;                        break;
  28   2                      case 3:                 CS3 = n;                        break;
  29   2                      case 4:                 CS4 = n;                        break;
  30   2                      case 5:                 CS5 = n;                        break;
  31   2              }
  32   1      }
  33          
  34          sbit CLK = P1^7;
  35          sbit DATA = P1^4;
  36          void spiout(unsigned char byte){
  37   1              unsigned char i;
  38   1              CLK = 0;
  39   1              for(i=0; i<8; i++){
  40   2                      if(byte & 1)
  41   2                              DATA = 1;
  42   2                      else
  43   2                              DATA = 0;
  44   2                      CLK = 1;
  45   2                      CLK = 0;
  46   2                      byte >>= 1;
  47   2              }
  48   1      }
  49          
  50          #define a +1
  51          #define b +2
  52          #define c +4
  53          #define d +8
  54          #define e +16
  55          #define f +32
C51 COMPILER V7.02b   TEST                                                                 01/25/2004 00:49:19 PAGE 2   

  56          #define g +64
  57          //code unsigned char font[16] = "\x6f\x41\x3b\x6b" "\x4d\x76\x77\xe4" "\xf7\xf6\x00\x00" "\x00\x00\x00\x00
             -";
  58          code unsigned char font[16] = {
  59                  a b c e f g,    //0
  60                  a g,                    //1
  61                  a b d e f,              //2
  62                  b a d g f,              //3
  63                  a c d g,                //4
  64                  b c d f g,              //5
  65                  b c d e f g,    //6
  66                  a b g,                  //7
  67                  a b c d e f g,  //8
  68                  a b c d f g,    //9
  69                  a b c d e g,    //A
  70                  c d e f g,              //B
  71                  b c e f,                //C
  72                  a d e f g,              //D
  73                  b c d e f,              //E
  74                  b c d e,                //F
  75          };
  76          #undef a
  77          #undef b
  78          #undef c
  79          #undef d
  80          #undef e
  81          #undef f
  82          #undef g
  83          
  84          #define DISP_WIDTH 6
  85          unsigned char disp_buff[DISP_WIDTH];
  86          
  87          unsigned char dot_pos = DISP_WIDTH;
  88          unsigned char disp_cs = 0;
  89          
  90          #define KEY_SET         4               //键值1 2 4 8 16...
  91          #define KEY_FUNC        64
  92          sbit OUT_PIN    = P3^5;
  93          unsigned char key_reg = 0x00;
  94          unsigned char key_cs = 0;
  95          sbit KEY_LINE = P1^2;
  96          
  97          void out_disp_buff(){
  98   1              unsigned char disp_data;
  99   1      
 100   1              out_cs_mask(1);
 101   1      
 102   1              //键盘扫描
 103   1              key_reg = 0;
 104   1              disp_data = 1<<key_cs;
 105   1              spiout(disp_data);
 106   1              if(KEY_LINE)
 107   1                      key_reg |= disp_data;
 108   1              else
 109   1                      key_reg &= ~disp_data;
 110   1              key_cs++;
 111   1              key_cs &= 7;
 112   1              disp_buff[4] = key_reg;
 113   1      
 114   1              disp_data = disp_buff[disp_cs];
 115   1              if (dot_pos == disp_cs)
 116   1                      disp_data |= 0x08;
C51 COMPILER V7.02b   TEST                                                                 01/25/2004 00:49:19 PAGE 3   

 117   1      
 118   1              if ((disp_cs & 1) == 1){
 119   2                      unsigned char d;
 120   2                      d = (disp_data & 0x80) >> 3;
 121   2                      d |= (disp_data & 0x40) >> 1;
 122   2                      d |= (disp_data & 0x20) << 1;
 123   2                      d |= (disp_data & 0x10) << 3;
 124   2                      d |= (disp_data & 0x8) >> 3;
 125   2                      d |= (disp_data & 0x4) >> 1;
 126   2                      d |= (disp_data & 0x2) << 1;
 127   2                      d |= (disp_data & 0x1) << 3;
 128   2                      disp_data = d;
 129   2              }
 130   1      
 131   1              //DATA_PORT = ~disp_data;
 132   1              spiout(disp_data);//~disp_data表示共阳驱动,disp_data是共阴驱动
 133   1              out_cs(disp_cs, 0);
 134   1              disp_cs++;
 135   1              if (disp_cs == DISP_WIDTH)
 136   1                      disp_cs = 0;
 137   1      }
 138          
 139          unsigned int disp_flash = 0;
 140          bit sys_wake_up = 0;
 141          
 142          unsigned int time;
 143          unsigned int timer_on;
 144          unsigned int timer_long;
 145          unsigned int time_ms= 0;
 146          unsigned char jiffies = 0;
 147          bit timer_isr_stop = 0;
 148          
 149          void timer_isr(void) interrupt 1 using 1{
 150   1              jiffies++;
 151   1              if (jiffies < 10)
 152   1                      return;
 153   1              jiffies = 0;
 154   1              sys_wake_up = 1;
 155   1              if(timer_isr_stop)
 156   1                      return;
 157   1              time_ms++;
 158   1              if(time_ms == 1000)//同步闪烁与字符跳变
 159   1                      disp_flash = 0;
 160   1      //      if (time_ms == 60000){//1000 == 1 Sec
 161   1              if (time_ms == 1000){//1000 == 1 Sec
 162   2                      time_ms = 0;
 163   2                      time++;
 164   2                      if(time == 1440)
 165   2                              time = 0;
 166   2              }
 167   1      }
 168          
 169          void timer_init(void){
 170   1              timer_on = 0;
 171   1              timer_long = 30;
 172   1              time = 0;
 173   1              TMOD=0x02;
 174   1      //      TH0=TL0=0x9b;//12M
 175   1      //      TH0=TL0=0x7a;//16M
 176   1      //      TH0=TL0=0x75;//16.59M
 177   1      //      TH0=TL0=0x72;//17M
 178   1      //      TH0=TL0=0x37;//24M
C51 COMPILER V7.02b   TEST                                                                 01/25/2004 00:49:19 PAGE 4   

 179   1              TH0=TL0=-200;//24M
 180   1              EA=1;
 181   1              ET0=1;
 182   1              TR0=1;
 183   1      }

⌨️ 快捷键说明

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