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

📄 main.lst

📁 lcd128*64驱动
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   MAIN                                                                  01/21/2008 21:07:40 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          /********************************************
   2          File: lcd.h
   3          Description:  LCD12864 驱动 ,采用串行方式,
   4          Author: [email]kassey@126.com[/email] July,22th,2005
   5          ********************************************/
   6          
   7          #include<reg52.h>
   8          #include <intrins.h>
   9          sbit SCLK =P1^3 ;  //E
  10          sbit SID =P1^4;    //RW
  11          sbit RST  =P1^2;   // low active 可以不用,也就是说,只用两条线和LCD通信
  12          #define ROW1 0x80
  13          #define ROW2 0x90
  14          #define ROW3 0x88
  15          #define ROW4 0x98
  16          #define  uchar unsigned char
  17          #define  uint unsigned int
  18          unsigned char code AC_TABLE[]={
  19          0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,      //第一行汉字位置
  20          0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,      //第二行汉字位置
  21          0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,      //第三行汉字位置
  22          0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,      //第四行汉字位置
  23          };
  24          
  25          
  26          /*****************************************
  27          Fucntion: delay10US(char x)
  28          Description: delay for 10 us
  29          Parameter: x
  30          Author: [email]kassey@126.com[/email]
  31          Date:   July,7th,2005
  32          *****************************************/
  33          
  34          
  35          void delay10US(uchar x)
  36          {
  37   1         uchar k;
  38   1      for(k=0;k<x;k++);
  39   1      
  40   1      }
  41          
  42          /*****************************************
  43          Fucntion: delay1MS(char x)
  44          Description: delay for 10 us
  45          Parameter:  x  delay for 1MS
  46          Author: [email]kassey@126.com[/email]
  47          Date:   July,7th,2005
  48          *****************************************/
  49          
  50          
  51          void delay1MS(uchar x)
  52          {  
  53   1         uchar k,j;
  54   1         x=x<<1;
  55   1      for(k=0;k<x;k++)
C51 COMPILER V7.06   MAIN                                                                  01/21/2008 21:07:40 PAGE 2   

  56   1        for(j=0;j<255;j++)_nop_();
  57   1      
  58   1      
  59   1      }
  60          
  61          void SendByteLCD(uchar WLCDData)
  62          {
  63   1      uchar i;
  64   1      for(i=0;i<8;i++)
  65   1      {
  66   2      if((WLCDData<<i)&0x80)SID=1;
  67   2      else SID=0;
  68   2      SCLK=0; ;
  69   2      SCLK=1 ;
  70   2      }
  71   1      }
  72          
  73          
  74          SPIWR(uchar Wdata,uchar RS)
  75          {
  76   1         SendByteLCD(0xf8+(RS<<1));
  77   1         SendByteLCD(Wdata&0xf0);
  78   1         SendByteLCD((Wdata<<4)&0xf0);
  79   1      
  80   1      }
  81          void SendCMD(uchar CMD)
  82          {
  83   1      SPIWR(CMD,0);
  84   1      delay10US(90);//8155来模拟串行通信,所以,加上8155的延时,
  85   1      
  86   1      }
  87          
  88           
  89          
  90          
  91          void SendData(uchar Data)
  92          {
  93   1      
  94   1      SPIWR(Data,1);
  95   1      }
  96          
  97          void LCDInit()
  98          {
  99   1      
 100   1      RST=0;
 101   1      delay1MS(50);
 102   1      RST=1;
 103   1      
 104   1      
 105   1           SendCMD(0x30);//功能设置,一次送8位数据,基本指令集
 106   1           SendCMD(0x0C);//0000,1100  整体显示,游标off,游标位置off
 107   1           SendCMD(0x01);//0000,0001 清DDRAM
 108   1           SendCMD(0x02);//0000,0010 DDRAM地址归位
 109   1           SendCMD(0x80);//1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC//     
 110   1        SendCMD(0x04);//点设定,显示字符/光标从左到右移位,DDRAM地址加 一//   
 111   1        SendCMD(0x0C);//显示设定,开显示,显示光标,当前显示位反白闪动
 112   1      
 113   1        
 114   1      }
 115          
 116           
 117          
C51 COMPILER V7.06   MAIN                                                                  01/21/2008 21:07:40 PAGE 3   

 118          /*****************************
 119          清文本区
 120          *****************************/
 121          void LcmClearTXT( void )
 122          {
 123   1           unsigned char i;
 124   1           SendCMD(0x30);      //8BitMCU,基本指令集合
 125   1           SendCMD(0x80);      //AC归起始位
 126   1           for(i=0;i<64;i++)
 127   1              SendData(0x20);
 128   1      }
 129          
 130          /*****************************
 131          发送字符串
 132          *****************************/
 133          void PutStr(unsigned char row,unsigned char col,unsigned char *puts)
 134          {
 135   1           SendCMD(0x30);      //8BitMCU,基本指令集合
 136   1           SendCMD(AC_TABLE[8*row+col]);      //起始位置
 137   1           while(*puts != '\0')      //判断字符串是否显示完毕
 138   1           {
 139   2                 if(col==8)            //判断换行
 140   2                 {            //若不判断,则自动从第一行到第三行
 141   3                       col=0;
 142   3                       row++;
 143   3                 }
 144   2                 if(row==4) row=0;      //一屏显示完,回到屏左上角
 145   2                 SendCMD(AC_TABLE[8*row+col]);
 146   2                 SendData(*puts);      //一个汉字要写两次
 147   2                 puts++;
 148   2                 SendData(*puts);
 149   2                 puts++;
 150   2                 col++;
 151   2           }
 152   1      }
 153          
 154          /*****************************
 155          绘图
 156          *****************************/
 157          void PutBMP(unsigned char *puts)
 158          {
 159   1           unsigned int x=0;
 160   1           unsigned char i,j;
 161   1           SendCMD(0x34);      //8Bit扩充指令集,即使是36H也要写两次
 162   1           SendCMD(0x36);      //绘图ON,基本指令集里面36H不能开绘图
 163   1           for(i=0;i<32;i++)            //12864实际为256x32
 164   1           {
 165   2                 SendCMD(0x80|i);      //行位置
 166   2                 SendCMD(0x80);      //列位置
 167   2                 for(j=0;j<32;j++)      //256/8=32 byte
 168   2                 {            //列位置每行自动增加
 169   3                       SendData(puts[x]);
 170   3                       x++;
 171   3                 }
 172   2           }
 173   1      }
 174          
 175           
 176          
 177          
 178          void  ClearScreen()
 179          {    uchar  i,j,x,y;
C51 COMPILER V7.06   MAIN                                                                  01/21/2008 21:07:40 PAGE 4   

 180   1           LCDInit();
 181   1         SendCMD(0x3e);// ;RE=1  扩展指令选择  G=1  开图形显示 
 182   1            x=0x80;
 183   1            y=0x80;

⌨️ 快捷键说明

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