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

📄 main.lst

📁 驱动t6963系列的液晶显示器
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.10   MAIN                                                                  08/16/2007 20:42:55 PAGE 1   


C51 COMPILER V7.10, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\XingYan\KEIL\C51\Bin\c51.exe main.c DB SB OE ROM(LARGE) SMALL OT(6,SPEED) WL(2) RB(0)

line level    source

   1          
   2          #include <reg52.h>
   3          #include <intrins.h>
   4          #include <stdio.h>
   5          #include <absacc.h>
   6          
   7          #define uchar unsigned char
   8          #define uint unsigned int
   9          
  10          #define LCD_LENGTH  128 
  11          #define LCD_WIDTH  64
  12          
  13          #define Graphic            1
  14          #define TXT            0
  15          
  16          #define LCD_DATA  XBYTE[0x0000]
  17          #define LCD_Command  XBYTE[0x0100]         
  18          
  19          sbit P10=P1^0;
  20          
  21          sbit P20=P2^0;
  22          sbit P21=P2^1;
  23          sbit P22=P2^2;
  24          sbit P23=P2^3;
  25          sbit P24=P2^4;
  26          sbit P25=P2^5;
  27          sbit P26=P2^6;
  28          sbit P27=P2^7;
  29          
  30          /*************************** 是否处于忙态 ************************/
  31          
  32          void CheckRW(void)              //指令&数据读写状态,看是否处于忙态
  33          {
  34   1              while( (LCD_Command & 0x03) != 0x03) ;
  35   1      }
  36          
  37          void CheckAutoWrite(void)  //数据自动写状态,看是否处于忙态
  38          {
  39   1              while( (LCD_Command & 0x08) == 0);      
  40   1      }
  41          
  42          void CheckScreen(void)    //屏读屏拷贝是否出错
  43          {
  44   1              while( LCD_Command & 0x40 );            
  45   1      }
  46          
  47          
  48          /********************** 读写数据 ************************/
  49          void WriteData(uchar uData)     //写入
  50          {
  51   1              LCD_DATA = uData;       
  52   1      }
  53          
  54          uchar ReadData(void)  //读
  55          {
C51 COMPILER V7.10   MAIN                                                                  08/16/2007 20:42:55 PAGE 2   

  56   1              uchar uData;
  57   1              uData = LCD_DATA;
  58   1              return uData;
  59   1      }
  60          
  61          /************************ 设置命令操作 *****************/
  62          void Set_Com(uchar com)
  63          {
  64   1              CheckRW();
  65   1              LCD_Command = com;
  66   1      }
  67          
  68          void  Set_Com_1(uchar param1,uchar com) 
  69          {
  70   1              CheckRW();
  71   1              LCD_DATA =      param1;
  72   1              CheckRW();
  73   1              LCD_Command = com;
  74   1      }
  75          
  76          void Set_Com_2(uchar param1,uchar param2,uchar com)
  77          {
  78   1              CheckRW();
  79   1              LCD_DATA =      param1;
  80   1              CheckRW();
  81   1              LCD_DATA =      param2;
  82   1              CheckRW();
  83   1              LCD_Command = com;      
  84   1      }
  85          
  86          /******************** 延时子程序 **************/
  87          
  88          void Delay(uint time)
  89          {
  90   1           uchar us,usn;
  91   1           while(time!=0)                        //12M Crystal
  92   1           { 
  93   2                 usn = 2;
  94   2                 while(usn!=0)
  95   2                 {
  96   3                       us=0xf2;
  97   3                       while (us!=0){us--;};
  98   3                       usn--;
  99   3                 }
 100   2                 time--;
 101   2           }  
 102   1      }
 103          
 104          /************************* 初使化LCD ****************/ 
 105          
 106          void Init_LCD(void)
 107          {
 108   1         Set_Com_2(0x00,0x00,0x40);           //设置文本显示区首地址
 109   1         Set_Com_2(LCD_LENGTH/8,0x00,0x41);   //设置文本显示区宽度
 110   1         Set_Com_2(0x00,0x08,0x42);                           //设置图形显示区首地址0x0800    
 111   1         Set_Com_2(LCD_WIDTH/4,0x00,0x43);    //设置图形显示区宽度
 112   1         Set_Com(0xA7);                               //设置光标形状 8x8方块
 113   1         Set_Com(0x81);                                //显示方式设置 文本xor图形(异或)       
 114   1         Set_Com(0x9C);                                //显示开关设置 文本开,图形开,光标闪烁关                
 115   1      }
 116          
 117          /******************** 清屏操作 *******************************/
C51 COMPILER V7.10   MAIN                                                                  08/16/2007 20:42:55 PAGE 3   

 118          
 119          void Clear_LCD(uchar FillByte)  //使用FillByte清屏
 120          {
 121   1           uint i = 8192;                     
 122   1           if(FillByte)                               
 123   1           {                                          
 124   2                 i -= 2*1024; 
 125   2                 Set_Com_2(0x00,0x08,0x24);      //填充0xff时候要在图形区
 126   2           }
 127   1           else
 128   1                 Set_Com_2(0x00,0x00,0x24);
 129   1           Set_Com(0xB0);                                             //进入自动写
 130   1           while(i--)
 131   1           {
 132   2                 CheckAutoWrite();
 133   2                 WriteData( FillByte );
 134   2           }
 135   1           Set_Com(0xB2);  
 136   1      }
 137          
 138          /*********************** 设定显示地址 *****************/
 139          void LocateXY(uchar x,uchar y,uchar mode)                  //0为字符模式,1为图形模式                            
 140          {
 141   1           uint  temp;
 142   1           temp= LCD_LENGTH/8*y + x;
 143   1           if(mode)                        //mode=1为Graphic
 144   1           {                              //如果图形模式要加上图形区首地址0x0800
 145   2                 temp+=0x0800;
 146   2           }
 147   1           Set_Com_2(temp & 0xff,temp/256,0x24);
 148   1      }
 149          
 150          /*********************** 显示字符和字符串 ***************/
 151          void Show_Char(uchar x,uchar y,uchar CharByte)
 152          {
 153   1              LocateXY(x,y,TXT);
 154   1              Set_Com_1(CharByte,0xC4);       
 155   1      }
 156          
 157          void Show_String(uchar x,uchar y,uchar *str)
 158          {
 159   1           while(*str != 0)
 160   1           {
 161   2                 if(x> 29)            //自动换行
 162   2                 {
 163   3                       x=0;
 164   3                       y++;
 165   3                 }
 166   2                 Show_Char(x,y,*str);
 167   2                 ++x;
 168   2                 ++str;
 169   2           }  
 170   1      }
 171          
 172          /*********************** 显示点阵函数 ***************/
 173          void DisplayDots(uchar DotByte,uchar n)
 174          {
 175   1           uchar i,j;

⌨️ 快捷键说明

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