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

📄 main.lst

📁 自己做的单片机Proteus仿真实例
💻 LST
字号:
C51 COMPILER V8.02   MAIN                                                                  05/09/2012 00:03:48 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: E:\IDEsoftware\Keil uVision3\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /***********http://hi.baidu.com/echoas**************
   2          程序:LCD12864显示图片原理
   3          内容:显示国旗和人物头像
   4          软件:keil uVision4
   5          学习板:HOT-51
   6          作者:大海橡树
   7          整理日期:2010-11-18 21:00
   8          修改:无
   9          
  10          备注:有什么错误的地方,欢迎网友们到空间留言
  11          
  12                                                  O(∩_∩)O~
  13          
  14          *************http://hi.baidu.com/echoas************/ 
  15          #include<AT89X52.h>
  16          #include"BMP.h"
  17          #include"BMP1.h"
  18          #include"BMP2.h"
  19          #define uchar unsigned char
  20          #define uint  unsigned int
  21          
  22          sbit RS=P2^5;
  23          sbit RW=P2^6;
  24          sbit EN=P2^7;           //LCD三个控制端 
  25          
  26          void delay(uint i) //延时函数 
  27          {
  28   1              while(--i);
  29   1      }
  30          
  31          void read_busy()//读忙函数。每次读写都要进行读忙操作 
  32          {
  33   1              RS=0;
  34   1              RW=1;
  35   1              EN=1;
  36   1              while(P0 & 0x80);//最高位为BF位 DB7---BF 
  37   1              EN=0;
  38   1      }
  39          
  40          void write_LCD_command(uchar value)//写指令函数 
  41          {
  42   1              read_busy();
  43   1              RS=0;
  44   1              RW=0;
  45   1              EN=1;           //EN从1---0锁存数据 
  46   1              P0=value;
  47   1              delay(200);     
  48   1              EN=0;
  49   1      } 
  50          
  51          void write_LCD_data(uchar value)//写数据函数 
  52          {
  53   1              read_busy();
  54   1              RS=1;
  55   1              RW=0;
C51 COMPILER V8.02   MAIN                                                                  05/09/2012 00:03:48 PAGE 2   

  56   1              EN=1;           //EN从1---0锁存数据 
  57   1              P0=value;
  58   1              delay(200);
  59   1              EN=0;
  60   1      } 
  61          /***********************************************
  62          函数:显示图片初始化
  63          说明:与显示汉字的不一样(基本指令--0x30),显示图
  64          片的指令是扩充指令---0x36 
  65          ***********************************************/ 
  66          void init_BMP()  
  67          {
  68   1              write_LCD_command(0x36);//CL=1--8位。扩充指令(RE=1),绘图打开(G=1)
  69   1              delay(100);     //适当延时 
  70   1              write_LCD_command(0x36);
  71   1              delay(37);
  72   1              write_LCD_command(0x3E); //8位(CL=1),扩充指令(RE=1),绘图打开(G=1) 
  73   1              delay(100);
  74   1              write_LCD_command(0x01);//清屏指令 
  75   1              delay(100);
  76   1      }
  77          /**********************************************
  78          函数:显示图片
  79          说明:要先设定垂直地址再设定水平地址(连续写入两
  80          个字节的资料来完成垂直于水平的坐标地址) 
  81          0x80---0x87:显示上半部分
  82          0x88---0x8F:显示下半部分 
  83          只需设定显示的第一个位置,指针会自动加1 
  84          **********************************************/ 
  85          void display_BMP(uchar *address)        
  86          {
  87   1              uchar i,j;
  88   1              for(i=0;i<32;i++)               
  89   1              {
  90   2                      write_LCD_command(0x80+i);//先送垂直地址 
  91   2                      write_LCD_command(0x80);  //再送水平地址 ----显示图片的上半部分 
  92   2                      for(j=0;j<16;j++)
  93   2                      {
  94   3                              write_LCD_data(*address);
  95   3                              address++;
  96   3                      }
  97   2              }
  98   1              
  99   1              for(i=0;i<32;i++)
 100   1              {
 101   2                      write_LCD_command(0x80+i);      //先送垂直地址
 102   2                      write_LCD_command(0x88);        //显示图片的下半部分 
 103   2                      for(j=0;j<16;j++)
 104   2                      {
 105   3                              write_LCD_data(*address);
 106   3                              address++;                      //指针地址指向下个位置 
 107   3                      }
 108   2              }
 109   1      }
 110          
 111          void clear_BMP_RAM()//清除图片显示RAM区的数据,与清屏指令write_LCD_command(0x01)不同 
 112          {
 113   1              uchar i,j;
 114   1              for(i=0;i<32;i++)
 115   1              {
 116   2                      write_LCD_command(0x80+i);
 117   2                      write_LCD_command(0x80);
C51 COMPILER V8.02   MAIN                                                                  05/09/2012 00:03:48 PAGE 3   

 118   2                      for(j=0;j<16;j++)
 119   2                      {
 120   3                              write_LCD_data(0);//清0 
 121   3                      }
 122   2              }
 123   1              
 124   1              for(i=0;i<32;i++)
 125   1              {
 126   2                      write_LCD_command(0x80+i);
 127   2                      write_LCD_command(0x88);
 128   2                      for(j=0;j<16;j++)
 129   2                      {
 130   3                              write_LCD_data(0);//清0
 131   3                      }
 132   2              }       
 133   1      }
 134          
 135          void main()
 136          {
 137   1              while(1)
 138   1              {
 139   2                      init_BMP();
 140   2                      display_BMP(table);//显示国旗 
 141   2                      delay(50000); 
 142   2                      delay(50000);
 143   2                      delay(50000);
 144   2                      delay(50000);
 145   2                      clear_BMP_RAM();//清除RAM区 
 146   2                      display_BMP(table1);//显示人物头像 
 147   2                      delay(50000); 
 148   2                      delay(50000);
 149   2                      delay(50000);
 150   2                      delay(50000);
 151   2                      clear_BMP_RAM();//清除RAM区 
 152   2                      display_BMP(table2);//显示人物头像 
 153   2                      delay(50000); 
 154   2                      delay(50000);
 155   2                      delay(50000);
 156   2                      delay(50000);
 157   2              }
 158   1      }


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