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

📄 main.lst

📁 自己做的单片机Proteus仿真实例
💻 LST
字号:
C51 COMPILER V8.02   MAIN                                                                  05/08/2012 23:42:32 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          程序:LCD12664液晶显示原理
   3          内容:显示动画——飞翔的鸽子
   4          学习板:Proteus仿真图
   5          液晶:Proteus元件库—AMPIRE128X64(无字库) 
   6          LCD控制器:KS0108,详细操作见PDF文档 
   7          软件:keil uVision4 
   8          作者:大海橡树
   9          整理日期:2010-12-08
  10          修改:无 
  11          
  12          备注:有什么错误的地方,欢迎网友们到空间留言
  13          
  14                                                  O(∩_∩)O~
  15          ******http://hi.baidu.com/echoas*****/
  16          #include <AT89X52.h>
  17          #include <intrins.h>
  18          #include"BMP1.h"
  19          #include"BMP2.h"
  20          #include"BMP3.h"
  21          #include"BMP4.h"
  22          #include"BMP5.h"
  23          #include"BMP6.h"
  24          #define uchar unsigned char
  25          #define uint  unsigned int
  26          
  27          #define LCD_databus P0 //LCD12864的8位数据口 
  28          
  29          sbit RS=P2^2;   //RS为0---命令;1----数据 
  30          sbit RW=P2^1;   //RW为1---写;0---读 
  31          sbit EN=P2^0;   //使能端 
  32          sbit CS1=P2^4;  //片选1低电平有效,控制左半屏 
  33          sbit CS2=P2^3;  //片选1低电平有效,控制右半屏 
  34          void delay(uint i)
  35          {
  36   1              while(--i);
  37   1      }
  38                  
  39          void Read_busy()//读“忙”函数-----数据线的最高位DB71则busy             
  40          {
  41   1              P0=0x00;
  42   1              RS=0;  
  43   1              RW=1; 
  44   1              EN=1;
  45   1              while(P0 & 0x80);
  46   1              EN=0;
  47   1      }
  48          
  49          void write_LCD_command(uchar value)//写命令函数 
  50          {
  51   1         Read_busy(); //对LCD的每次读写都要读忙 
  52   1         RS=0;                //选择命令 
  53   1         RW=0;                //读操作 
  54   1         LCD_databus=value;
  55   1         EN=1;                //EN由1----0锁存有效数据 
C51 COMPILER V8.02   MAIN                                                                  05/08/2012 23:42:32 PAGE 2   

  56   1         delay(2);
  57   1         EN=0;
  58   1      }
  59          
  60          void write_LCD_data(uchar value)//写数据函数    
  61          {
  62   1         Read_busy();
  63   1         RS=1;                        //选择数据 
  64   1         RW=0;        
  65   1         LCD_databus=value;
  66   1         EN=1;                        //EN由1----0锁存有效数据 
  67   1         delay(2);
  68   1         EN=0;
  69   1      }
  70          
  71          void Set_page(uchar page)//设置“页”LCD12864共8页,一页是8行点阵点     
  72          {
  73   1        page=0xb8|page;               //页的首地址为0xB8
  74   1        write_LCD_command(page);
  75   1      }
  76          
  77          void Set_line(uchar startline)  //设置显示的起始行         
  78          {
  79   1        startline=0xC0|startline;     //起始行地址为0xC0 
  80   1        write_LCD_command(startline); //设置从哪行开始:共0--63;一般从0 行开始显示
  81   1      }
  82          
  83          void Set_column(uchar column)   //设置显示的列  
  84          {
  85   1        column=column & 0x3f;                 //列的最大值为64
  86   1        column= 0x40|column;          //列的首地址为0x40 
  87   1        write_LCD_command(column);//规定显示的列的位置 
  88   1      }
  89          
  90          void SetOnOff(uchar onoff)      //显示开关函数:0x3E是关显示,0x3F是开显示   
  91          {
  92   1              onoff=0x3e|onoff; //0011 111x,onoff只能为0或者1
  93   1              write_LCD_command(onoff);
  94   1      }
  95          
  96          void SelectScreen(uchar screen) //选择屏幕 
  97          {                                                
  98   1         switch(screen)
  99   1         { 
 100   2               case 0: CS1=0;CS2=0;break; //全屏     
 101   2           case 1: CS1=0;CS2=1;break;//左半屏        
 102   2           case 2: CS1=1;CS2=0;break;//右半屏       
 103   2           default:break; 
 104   2         }
 105   1      }
 106          
 107          void ClearScreen(uchar screen)  //清屏函数  
 108          {       
 109   1           uchar i,j;
 110   1           SelectScreen(screen);              //0--全屏;1---左半屏;2---右半屏 
 111   1               for(i=0;i<8;i++)                       //控制页数0-7,共8页
 112   1               {
 113   2              Set_page(i);
 114   2                      Set_column(0);
 115   2              for(j=0;j<64;j++)          //控制列数0-63,共64列
 116   2                      {
 117   3                write_LCD_data(0x00); //写入0,地址指针自加1 
C51 COMPILER V8.02   MAIN                                                                  05/08/2012 23:42:32 PAGE 3   

 118   3              }
 119   2           }                                   
 120   1      }
 121          
 122          void InitLCD()  //LCD的初始化  
 123          { 
 124   1              Read_busy();
 125   1              SelectScreen(0);
 126   1              SetOnOff(0); //关显示
 127   1              SelectScreen(0);
 128   1              SetOnOff(1); //开显示
 129   1              SelectScreen(0);
 130   1              ClearScreen(0);//清屏
 131   1              Set_line(0); //开始行:0
 132   1      }
 133          
 134          void Display(uchar ss,uchar page,uchar column,uchar *p)
 135          {
 136   1              uchar i;
 137   1              SelectScreen(ss);
 138   1              Set_page(page);         //写上半页
 139   1              Set_column(column); //控制列
 140   1              for(i=0;i<16;i++)       //控制16列的数据输出
 141   1              {
 142   2                      write_LCD_data(p[i]); //汉字的上半部分 
 143   2              }
 144   1              Set_page(page+1);       //写下半页
 145   1              Set_column(column);     //控制列
 146   1          for(i=0;i<16;i++)   //控制16列的数据输出
 147   1              {
 148   2                      write_LCD_data(p[i+16]);        //汉字的下半部分 
 149   2              }
 150   1      }
 151          
 152          void display_BMP(uchar a[][64])//显示图形的左边部分 
 153          {
 154   1              uchar i,j;
 155   1              
 156   1              for(j=0;j<8;j++)
 157   1              {       
 158   2                      SelectScreen(1);
 159   2                      Set_page(j);
 160   2                      Set_column(0);
 161   2                      for(i=0;i<64;i++)
 162   2                      {
 163   3                              write_LCD_data(a[2*j][i]);//每隔一行取一次数组中的数据
 164   3                      }
 165   2                      SelectScreen(2);
 166   2                      Set_page(j);
 167   2                      Set_column(0);
 168   2                      for(i=0;i<64;i++)
 169   2                      {
 170   3                              write_LCD_data(a[2*j+1][i]);//每隔一行取一次数组中的数据
 171   3                      }       
 172   2              }       
 173   1      }
 174          
 175          void main()
 176          {  
 177   1              InitLCD();                      //初始12864  
 178   1              ClearScreen(0);         //清屏
 179   1              Set_line(0);            //显示开始
C51 COMPILER V8.02   MAIN                                                                  05/08/2012 23:42:32 PAGE 4   

 180   1              while(1)
 181   1              {
 182   2                      display_BMP(table1);
 183   2                      display_BMP(table2);
 184   2                      display_BMP(table3);
 185   2                      display_BMP(table4);
 186   2                      display_BMP(table5);
 187   2                      display_BMP(table6);
 188   2              }               
 189   1                      
 190   1      }
 191          


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