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

📄 main.lst

📁 51单片机C语言常用模块与综合系统设计实例精讲
💻 LST
字号:
C51 COMPILER V7.06   MAIN                                                                  10/29/2006 14:32:09 PAGE 1   


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

stmt level    source

   1          #include <stdio.h>
   2          #include <absacc.h>
   3          #include <./Atmel/at89x52.h>
   4          #define uchar       unsigned char 
   5          #define MWCMD(a)    XBYTE[0X40]=(a) //主控制器写命令
   6          #define MWDATA(a)   XBYTE[0X41]=(a) //主控制器写数据
   7          #define MRCMD       XBYTE[0X42] //主控制器读命令
   8          #define MRDATA      XBYTE[0X43]= //主控制器读数据
   9          #define SWCMD(a)    XBYTE[0X80]=(a) //从控制器写命令
  10          #define SWDATA(a)   XBYTE[0X81]=(a) //从控制器写数据
  11          #define SRCMD       XBYTE[0X82] //从控制器读命令
  12          #define SRDATA      XBYTE[0X83] //从控制器读数据
  13          #define BLIGHT_ON   P1_7=0   //背光开
  14          #define BLIGHT_OFF  P1_7=1   //背光关
  15          #define LCD_RST_ON  P1_6=0   //对液晶模块进行硬件复位
  16          #define LCD_RST_OFF P1_6=1   //对液晶模块进行硬件复位解除
  17          #define PWM_PORT    P1_5     //PWM模拟端口
  18          uchar code  NanJing[]={
  19                  /*--  文字:  南  --*/
  20                  /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  21                  0x20,0x20,0x27,0x24,0x24,0x26,0x2D,0xF4,0x24,0x25,0x26,0x24,0x24,0x67,0x20,0x00,
  22                  0x00,0x00,0xFE,0x20,0xA0,0xA0,0xA0,0xFE,0xA0,0xA0,0xA0,0xA4,0x22,0xFC,0x00,0x00,
  23                  
  24                  /*--  文字:  京  --*/
  25                  /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  26                  0x00,0x20,0x20,0x27,0x24,0x24,0xA4,0x64,0x24,0x24,0x24,0x27,0x60,0x20,0x00,0x00,
  27                  0x00,0x04,0x08,0x98,0xB0,0x82,0x81,0xFE,0x80,0x80,0xA0,0xB0,0x1C,0x08,0x00,0x00,
  28          };
  29          uchar code Asc12[]={
  30                  /*--  文字:  1  --*/
  31                  /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  32                  0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,
  33                  
  34                  /*--  文字:  2  --*/
  35                  /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  36                  0x00,0x0E,0x10,0x10,0x10,0x11,0x0E,0x00,0x00,0x0C,0x14,0x24,0x44,0x84,0x0C,0x00,
  37          };
  38          struct PIC {
  39                  uchar x;
  40                  uchar y;
  41                  uchar w;
  42                  uchar h;
  43                  uchar *dat;
  44          };
  45          void Init_Lcd(void);
  46          void drawbmp(struct PIC *p);
  47          void clearbmp(struct PIC *p);
  48          main(){
  49   1              struct PIC This;
  50   1              unsigned int i=0;
  51   1              IE=0X40;
  52   1              EA=1;       /* Enable interrupts */
  53   1              Init_Lcd();
  54   1              BLIGHT_ON;
  55   1              while(1){
C51 COMPILER V7.06   MAIN                                                                  10/29/2006 14:32:09 PAGE 2   

  56   2                      i++;
  57   2                      if(i==10000){
  58   3                              This.x=0;This.y=0;
  59   3                              This.w=16;This.h=16;
  60   3                              clearbmp(&This);
  61   3                              This.w=32;This.h=16;
  62   3                              This.dat=NanJing;               
  63   3                              drawbmp(&This);
  64   3                      }
  65   2                      else if(i==20000){
  66   3                              This.x=0;This.y=0;
  67   3                              This.w=32;This.h=16;
  68   3                              clearbmp(&This);
  69   3                              This.w=16;This.h=16;
  70   3                              This.dat=Asc12;
  71   3                              drawbmp(&This);
  72   3                      }
  73   2              }
  74   1      }
  75          void Init_Lcd(void){
  76   1              unsigned int i;
  77   1              LCD_RST_ON;//对LCD进行硬件复位
  78   1              for(i=0;i<500;i++){
  79   2              }
  80   1              LCD_RST_OFF;//解除硬件复位
  81   1              /***下面开始对LCD进行初始化**/
  82   1              /*MWCMD(0xae);SWCMD(0xae); //显示开关:关
  83   1          MWCMD(0xc0);SWCMD(0xc0); //显示起始在第一行
  84   1              MWCMD(0xa4);SWCMD(0xa4); //static driver 关
  85   1              MWCMD(0x00);SWCMD(0x00); //列地址设置为 0列
  86   1              MWCMD(0xbb);SWCMD(0xbb); //页地址设置为 0页
  87   1              MWCMD(0xa9);SWCMD(0xa9); //占空比选择
  88   1              MWCMD(0xa0);SWCMD(0xa0); //ADC选择 rightward
  89   1              MWCMD(0xee);SWCMD(0xee); //读修改写:关
  90   1              */
  91   1          /***在实际初始化中发现只采用以下几就可以完成初始化了,而用上面的初始化代码不行****/
  92   1          MWCMD(0xaf);SWCMD(0xaf);  //显示开关 :开
  93   1          MWCMD(0x00);SWCMD(0x00);  //列地址设置为 0列
  94   1          MWCMD(0xbb);SWCMD(0xbb);  //页地址设置为 0页
  95   1      }
  96          #define setpages(page)      SWCMD(0xb8+((page)&0x03))
  97          #define setcols(address)    SWCMD((address)&0x7f) //column
  98          #define setpagem(page)      MWCMD(0xb8+((page)&0x03))
  99          #define setcolm(address)    MWCMD((address)&0x7f)
 100          void drawbmp(struct PIC *p){//y must 0,8,16 or 24
 101   1          /*display a 8*8 bitmap */
 102   1          uchar i;
 103   1              uchar *buf;
 104   1              buf=p->dat;
 105   1          setpages(p->y/8);
 106   1          setpagem(p->y/8);
 107   1              if(p->h==8){
 108   2                  for(i=p->x;i<p->w+p->x;i++){
 109   3                              if(i<61){//是主控制器控制的列
 110   4                                      setcolm(i);
 111   4                                      MWDATA(*buf);
 112   4                              }
 113   3                              else{//是从控制器控制的列
 114   4                                      setcols(i-61);
 115   4                                      SWDATA(*buf);
 116   4                              }
 117   3                              buf++;
C51 COMPILER V7.06   MAIN                                                                  10/29/2006 14:32:09 PAGE 3   

 118   3                      }
 119   2              }
 120   1              else if(p->h==16){
 121   2                  for(i=p->x;i<p->w+p->x;i++){
 122   3                              if(i<61){//是主控制器控制的列
 123   4                                      setcolm(i);
 124   4                                      MWDATA(*buf);
 125   4                              }
 126   3                              else{//是从控制器控制的列
 127   4                                      setcols(i-61);
 128   4                                      SWDATA(*buf);
 129   4                              }
 130   3                              buf +=2;
 131   3                      }
 132   2                      buf=p->dat+1;
 133   2              setpages(p->y/8+1);
 134   2              setpagem(p->y/8+1);
 135   2                  for(i=p->x;i<p->w+p->x;i++){
 136   3                              if(i<61){//是主控制器控制的列
 137   4                                      setcolm(i);
 138   4                                      MWDATA(*buf);
 139   4                              }
 140   3                              else{//是从控制器控制的列
 141   4                                      setcols(i-61);
 142   4                                      SWDATA(*buf);
 143   4                              }
 144   3                              buf +=2;
 145   3                      }
 146   2          }
 147   1      }
 148          void clearbmp(struct PIC *p){//y must 0,8,16 or 24
 149   1          uchar i,j;
 150   1              uchar *buf;
 151   1              for(j=0;j<p->h/8;j++){
 152   2              setpages(p->y/8+j);
 153   2              setpagem(p->y/8+j);
 154   2                  for(i=p->x;i<p->w+p->x;i++){
 155   3                              if(i<61){//是主控制器控制的列
 156   4                                      setcolm(i);
 157   4                                      MWDATA(0);
 158   4                              }
 159   3                              else{//是从控制器控制的列
 160   4                                      setcols(i-61);
 161   4                                      SWDATA(0);
 162   4                              }
 163   3                              buf++;
 164   3                      }
 165   2              }
 166   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    739    ----
   CONSTANT SIZE    =     96    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      21
   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 + -