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

📄 demo.lst

📁 89C52单片机的底层代码,包括A/D,D/A转换,键盘,LED显示等
💻 LST
字号:
C51 COMPILER V7.09   DEMO                                                                  08/10/2005 00:08:22 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE DEMO
OBJECT MODULE PLACED IN demo.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE demo.c OPTIMIZE(2,SPEED) BROWSE INTVECTOR(0X8000) DEFINE(monitor51) DEBUG O
                    -BJECTEXTEND

line level    source

   1          #include <reg51.H>
   2          #include <absacc.h>
   3          #define  LCD_WR_COM XBYTE[0x4000]
   4          #define  LCD_RD_STA XBYTE[0x4001]
   5          #define  LCD_WR_DAT XBYTE[0x4002]
   6          #define  LCD_RD_DAT XBYTE[0x4003]
   7          
   8          char code cgram[]={0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,
   9                             0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00,
  10                             0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00};
  11          char code string1[]={0x44,0x50,0x2d,0x35,0x31,0x48};
  12          char code string2[]={0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10};//16
             -个空格
  13          char code string3[]={0x5a,0x4c,0x47,0x32,0x30,0x30,0x33,0x00,0x37,0x01,0x31,0x32,0x02};
  14          
  15          
  16          sbit CS=P1^0;
  17          sbit CLK=P1^1;
  18          sbit DIO=P1^2;
  19          sbit AD_OK=P3^2;
  20          char KeyCode;
  21          char dispbuff[8];
  22          char adconvert(char channel);
  23          char ReadKB();
  24          void sent(unsigned char sent_buf);
  25          void init_lcd(char mode);
  26          void test_LCD();
  27          void write_cgram();
  28          void Left_loop();
  29          void right_loop();
  30          void printf_lcd(char *p);
  31          void printf_lcdxy(char x,char y,char *p);
  32          void delay(unsigned char time);
  33          void display();
  34          char TICK;
  35          char ADresult;
  36          void Timer0() interrupt 1
  37          {
  38   1         TMOD=0x01;
  39   1         TH0=0x3c;
  40   1         if(TICK==5)
  41   1         {
  42   2          display();
  43   2              TICK=0;
  44   2          ADresult=adconvert(0);
  45   2              }
  46   1              TICK++;
  47   1      }
  48          void KeyBoard() interrupt 2
  49          {
  50   1         KeyCode=ReadKB();
  51   1      }
  52          main()
  53          {
C51 COMPILER V7.09   DEMO                                                                  08/10/2005 00:08:22 PAGE 2   

  54   1         char i;
  55   1         EX1=1;
  56   1         EA=1;
  57   1         CS=1;
  58   1         IT1=1;
  59   1         init_lcd(0);
  60   1         write_cgram();
  61   1         test_LCD();
  62   1         Left_loop();
  63   1         right_loop();
  64   1         TMOD=0x01;
  65   1         TH0=0x3c;
  66   1         TL0=0xb0;
  67   1         ET0=1;
  68   1         TR0=1;
  69   1         TICK=0;
  70   1        
  71   1         for (i=0;i<8;i++)
  72   1         { 
  73   2         dispbuff[i]=1+i;
  74   2         
  75   2         }
  76   1         while(1)
  77   1         {
  78   2            dispbuff[0]=KeyCode/16;
  79   2                dispbuff[1]=KeyCode%16;
  80   2                dispbuff[6]=(ADresult/16)&0x0f;
  81   2                dispbuff[7]=(ADresult%16)&0x0f;
  82   2                
  83   2         }
  84   1      
  85   1       }
  86          char ReadKB()
  87          {  char kb=0,i;
  88   1         CS=1;
  89   1         CLK=0;
  90   1         delay (50);
  91   1         sent(0x15);//发送读键盘指令
  92   1         delay(10);
  93   1         DIO=1;
  94   1         CLK=1;
  95   1         delay(50);
  96   1         for(i=0;i<8;i++)
  97   1        {CLK=0;
  98   2         kb=kb*2+(char)DIO;//读1位数据
  99   2         delay(10);
 100   2         CLK=1;
 101   2         delay(10);
 102   2         } 
 103   1         CS=1;
 104   1         return(kb);}
 105          void sent(unsigned char sent_buf)
 106          {
 107   1      char i;
 108   1      CLK=0;                            /*置SPI时钟线为低*/
 109   1      CS=0;                              /*置SPI片选线为低*/
 110   1      delay (50);                          /*延时50us*/
 111   1      
 112   1      for(i=0;i<8;i++)                      /*发送8位数据*/
 113   1      {
 114   2      sent_buf=sent_buf<<1;     /*从数据最高位开始,将要发发送的数据位移入进位位CY*/
 115   2      DIO=CY;                          /*数据位送数据线*/
C51 COMPILER V7.09   DEMO                                                                  08/10/2005 00:08:22 PAGE 3   

 116   2      CLK=1;                           /* 置SPI时钟线为高*/
 117   2      delay (10);                         /*延时10us*/
 118   2      CLK=0;                          /* 置SPI时钟线为低,发送完1位数据*/
 119   2      delay (10);/*延时10us*/
 120   2      }
 121   1      DIO=0;
 122   1      }
 123          void delay(unsigned char time)
 124          {
 125   1        unsigned char i;
 126   1        for(i=0;i<time;i++);
 127   1      
 128   1      }
 129          
 130          char adconvert(char channel)
 131          {
 132   1         char result;
 133   1         char xdata *adport;
 134   1         adport=0x0000+channel;  //AD转换通道选择
 135   1         *adport=0;   // 启动转换
 136   1         while(AD_OK==1);  //等待转换结束
 137   1         result=*adport; // 读转换结果
 138   1         return result;
 139   1      }       
 140          void display()
 141          {
 142   1       char i;
 143   1       for(i=0;i<8;i++)
 144   1         {
 145   2           CS=1;
 146   2               sent(0xc8+i);
 147   2               sent(dispbuff[i]);
 148   2               CS=1;
 149   2         }
 150   1      }
 151          void init_lcd(char mode)
 152          { 
 153   1        unsigned char i;
 154   1        i=mode;
 155   1      
 156   1        LCD_WR_COM=0x38;   //设置为8位数据总线,16*2,5*7点阵
 157   1          delay(255);
 158   1      
 159   1        LCD_WR_COM=0x01;//清屏幕
 160   1          delay(255);
 161   1      
 162   1        LCD_WR_COM=0x06;//光标移动,显示区不移动,读写操作后AC加1
 163   1          delay(255);
 164   1      
 165   1        LCD_WR_COM=0x0c;//开显示,关光标,不闪烁
 166   1          delay(255); 
 167   1      }
 168          
 169          
 170          void test_LCD()
 171          {
 172   1        char i;
 173   1      
 174   1        delay(255);
 175   1        LCD_WR_COM=0x84;//从第一行第5位开始
 176   1        for(i=0;i<6;i++)
 177   1         { 
C51 COMPILER V7.09   DEMO                                                                  08/10/2005 00:08:22 PAGE 4   

 178   2           delay(255);
 179   2           LCD_WR_DAT=string1[i];//DP-51H
 180   2         }
 181   1      
 182   1         delay(255);
 183   1         LCD_WR_COM=0xc2;//第二行第3位开始显示
 184   1          for(i=0;i<13;i++)
 185   1            { 
 186   2                 delay(255);
 187   2                 LCD_WR_DAT=string3[i];
 188   2                } 
 189   1      }
 190          
 191          void Left_loop()
 192                  {
 193   1                unsigned char i,j;
 194   1               
 195   1                delay(255);
 196   1                LCD_WR_COM=0x07;
 197   1                delay(255);
 198   1                LCD_WR_COM=0x8f;
 199   1                delay(255);
 200   1           for(i=0;i<16;i++)
 201   1             {
 202   2                  LCD_WR_DAT=string2[i];
 203   2             for(j=0;j<200;j++)
 204   2              delay(255);
 205   2                  }
 206   1              }
 207           void right_loop()
 208                  {
 209   1                unsigned char i,j;
 210   1                 
 211   1                delay(255);
 212   1                LCD_WR_COM=0x05;
 213   1                delay(255);
 214   1                LCD_WR_COM=0x80;
 215   1                delay(255);
 216   1           for(i=0;i<16;i++)
 217   1             {
 218   2                  LCD_WR_DAT=string2[i];
 219   2             for(j=0;j<200;j++)
 220   2              delay(255);
 221   2                  }
 222   1              }
 223          void write_cgram()
 224          {
 225   1         char i;
 226   1      
 227   1         LCD_WR_COM=0x40;
 228   1         
 229   1         for(i=0;i<24;i++)
 230   1         { 
 231   2           delay(255);
 232   2           LCD_WR_DAT=cgram[i]; 
 233   2         }
 234   1      }
 235          
 236          
 237          
 238          
 239          
C51 COMPILER V7.09   DEMO                                                                  08/10/2005 00:08:22 PAGE 5   

 240          
 241          
 242          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    863    ----
   CONSTANT SIZE    =     59    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11      20
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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