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

📄 19264.lst

📁 19264 LCD 自己加入了头文件(汉字字模)
💻 LST
字号:
C51 COMPILER V7.50   19264                                                                 02/19/2008 11:05:14 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 19264
OBJECT MODULE PLACED IN 19264.OBJ
COMPILER INVOKED BY: d:\Keil7.5\C51\BIN\C51.EXE 19264.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*************************************************************
   2          功能:        液晶(LCD)显示程序;
   3          LCD:         TRULY M19264-5A1  192*64点阵
   4          驱动器:    S6B0108/S6B0107或HD61202及相兼容驱动器
   5          MPU:        AT89S51
   6          开发环境:    KEIL C51
   7          作者:        纪长城
   8          日期:        2005年10月
   9          ************************************************************/
  10          #include <REGX52.H>
  11          #include <ZKDot.h>
  12          
  13          
  14          #define DISP_OFF 0X3E    //关闭显示
  15          #define DISP_ON 0X3F    //打开显示
  16          #define START_ROW 0xC0    //设置起始行  C0H-FFH 对应显示存储器的 0-64行
  17          #define FIRST_PAGE 0xB8    //设置页             B8-BF将DDRAM分为8个页面0-7
  18          #define START_YADD 0x40    //设置列             40H-7FH 对应0-63个 列单元地址
  19          
  20          /*----------------------------------------
  21          MPU端口定义
  22          ----------------------------------------*/
  23          #define LCD_PORT   P0
  24          #define LCD_RESET  P2_2
  25          #define LCD_CSA    P2_3
  26          #define LCD_CSB    P2_4
  27          #define LCD_RS     P2_5
  28          #define LCD_RW     P2_6
  29          #define LCD_E      P2_7
  30          
  31          /*------------------------------------------
  32          LCD的区选择程序:F为要选通的区,取值为0,1,2,
  33          对应选中三个区,取其它值选中第三个区
  34          --------------------------------------------*/
  35          void LCD_CSAB_SET(unsigned char block)
  36          {
  37   1          if(0==block)        //0 选择第一区
  38   1          {
  39   2              LCD_CSA=0;
  40   2              LCD_CSB=0;
  41   2          }
  42   1          else if(1==block)    //1 选择第二区
  43   1          {
  44   2              LCD_CSA=0;
  45   2              LCD_CSB=1;
  46   2          }
  47   1          else                //2 选择第三区
  48   1          {
  49   2              LCD_CSA=1;
  50   2              LCD_CSB=0;
  51   2          }
  52   1      }
  53          
  54          
  55          /*---------------------------------------
C51 COMPILER V7.50   19264                                                                 02/19/2008 11:05:14 PAGE 2   

  56          //延时子程序  
  57          ----------------------------------------*/
  58          void Delay_xMs(unsigned int xMs)
  59          {
  60   1          unsigned int i,j;
  61   1          for(i=0;i<xMs;i++)
  62   1              for(j=0;j<500;j++);
  63   1      }
  64          
  65          
  66          /*---------------------------------------
  67          向LCD中写入指令或指令,F=0 是指令,F=1是数据,bkock是选择写入哪个区
  68           ---------------------------------------*/
  69          void LCD_Write( unsigned char Com,bit F)
  70          {
  71   1          LCD_PORT     = Com;    //把数据输出
  72   1          LCD_RS        = F;    //确定是数据还是指令
  73   1          LCD_RW         = 0;
  74   1      
  75   1          LCD_E          = 1;
  76   1          LCD_E          = 0;    //电平下降沿数据写入控制器
  77   1      }
  78          
  79          /*----------------------------------------------
  80          坐标定位程序
  81          参数XPage  定位页    取值0--7    共8页
  82              Y       横向定位    取值0-191    共192列
  83          -----------------------------------------------*/
  84          void LCD_XY_SET(unsigned char X,unsigned char YPage)
  85          {
  86   1          if(X<64)        //在第一个区中
  87   1          {
  88   2              LCD_CSAB_SET(0);
  89   2              LCD_Write(FIRST_PAGE|YPage,0);
  90   2               LCD_Write(START_YADD|X,0);
  91   2          }
  92   1          else if(X<128)    //在第二个区中
  93   1          {
  94   2              LCD_CSAB_SET(1);
  95   2              LCD_Write(FIRST_PAGE|YPage,0);
  96   2              LCD_Write(START_YADD|X-64,0);
  97   2          }
  98   1          else if(X<192)    //在第三个区中
  99   1          {
 100   2              LCD_CSAB_SET(2);
 101   2              LCD_Write(FIRST_PAGE|YPage,0);
 102   2              LCD_Write(START_YADD|X-128,0);
 103   2          }
 104   1      }
 105          
 106          
 107          /*--------------------------------------------
 108          清除一行的子程序  H是要清的页,取值0-3
 109          --------------------------------------------*/
 110          void LCD_Clear_H(unsigned char H)
 111          {
 112   1          unsigned char i,j,k;
 113   1          for (k=0;k<2;k++)
 114   1              for (i=0;i<3;i++)
 115   1              {
 116   2                  LCD_XY_SET(i*64,H*2+k);
 117   2                  for(j=0;j<64;j++) LCD_Write(0x00,1);
C51 COMPILER V7.50   19264                                                                 02/19/2008 11:05:14 PAGE 3   

 118   2              }
 119   1      }
 120          
 121          /*----------------------------------------
 122          LCD初始化程序
 123          ----------------------------------------*/
 124          void LCD_Init(void)
 125          {
 126   1          unsigned char i;
 127   1          LCD_E    = 0;
 128   1          LCD_RW   = 1;
 129   1          LCD_RS   = 0;
 130   1      
 131   1          LCD_RESET= 0;    //液晶模块复位
 132   1          Delay_xMs(10);    //等待10mS
 133   1          LCD_RESET= 1;    //液晶结束复位电平
 134   1      
 135   1          LCD_CSAB_SET(0);
 136   1          LCD_Write(DISP_ON,0);    //模块1显示开
 137   1          LCD_CSAB_SET(1);
 138   1          LCD_Write(DISP_ON,0);    //模块2显示开
 139   1          LCD_CSAB_SET(2);
 140   1          LCD_Write(DISP_ON,0);    //模块3显示开
 141   1          for (i=0;i<4;i++) LCD_Clear_H(i);    //清屏
 142   1      }
 143          
 144          /*----------------------------------------
 145          读display RAM 
 146          ---------------------------------------* 
 147          unsigned char LCD_READ_RAM(unsigned char x,unsigned char y)
 148          {
 149              unsigned char temp;
 150              LCD_XY_SET(x,y);
 151              LCD_RW   = 1;    //设置为读数据
 152              LCD_RS   = 1;
 153              LCD_PORT =0XFF;    //设置总线为高电平(空)
 154              LCD_E    = 0;
 155              LCD_E    = 1;    
 156              temp     =LCD_PORT;    
 157              LCD_E     =0;
 158              return temp;
 159          }
 160          
 161          
 162          /*------------------------------------------
 163          设制起始行,参数line为要起始的行,取值范围0--63,block 为要设置的块
 164          -----------------------------------------*/    
 165          void LCD_LINE_SET(unsigned char line)
 166          {
 167   1          unsigned char i;
 168   1          for (i=0;i<3;i++)
 169   1          {
 170   2              LCD_CSAB_SET(i);
 171   2              LCD_Write(START_ROW|line,0);
 172   2          }
 173   1      }
 174          
 175          /*----------------------------------------------
 176          显示一个16*8的ASCII的程序  ,参数是ascii码值,x取值0-191,y取值0-3  只能显示四行
 177          ------------------------------------------------*
 178          bit LCD_PRINT_ASCII_1608(unsigned char ascii,unsigned char x,unsigned char y)
 179          {
C51 COMPILER V7.50   19264                                                                 02/19/2008 11:05:14 PAGE 4   

 180              unsigned char i,j;
 181              if((x+8)>191)return 1;
 182              for(j=0;j<2;j++)
 183                  for(i=j;i<16;i+=2)
 184                  {
 185                      LCD_XY_SET(x+(i>>1),y*2+j);   
 186                      LCD_Write(AsciiDotBig[(ascii-0x20)*16+i],1);
 187                  }
 188              return 0;
 189          }
 190          
 191          /*-------------------------------------------------
 192          查找汉字程序 参数是内码的高8位与低8位
 193           ---------------------------------------------------*/
 194          unsigned char  LCD_SEARCH_HZ16(unsigned char h,unsigned char l)
 195               {    
 196   1              unsigned char i;
 197   1              for(i=0;i<17;i++)
 198   1                  if(HZ[i].Index[0]==h&&HZ[i].Index[1]==l) return i;
 199   1          }
 200          
 201          /*----------------------------------------------------
 202          16点阵的汉字显示程序
 203          ----------------------------------------------------*/
 204          bit LCD_PRINT_HZ16(unsigned char wz,unsigned char x,unsigned char y)
 205              {
 206   1          unsigned char i,j;
 207   1      
 208   1          if((x+16)>192) return 1;
 209   1          for(j=0;j<2;j++)
 210   1                for(i=0;i<16;i++)
 211   1              {
 212   2                  LCD_XY_SET(x+i,y*2+j);
 213   2                  LCD_Write(HZ[wz].Msk[i+(16*j)],1);
 214   2              }
 215   1          return 0;
 216   1      }
 217          
 218          /*--------------------------------------------
 219          点操作函数,参数,X/Y,取值为192/64   F  0-1,0是画点,1是取消点
 220          ---------------------------------------*
 221          void LCD_POINT(unsigned char X,unsigned char Y,bit F)
 222          {
 223              unsigned char i,j,k;
 224              i=Y&&0xF8;//i是X/8的余数
 225              Y>>=3;    //x是X/8的商
 226              j=LCD_READ_RAM(X,Y);//空读操作
 227              j=LCD_READ_RAM(X,Y);//读出8位数据
 228              LCD_XY_SET(X,Y);
 229              k=1<<i;
 230              if(F)
 231                  {
 232                  k=~k;
 233                  LCD_Write(j&k,1);
 234                   }
 235               else
 236                   LCD_Write(j|k,1);
 237          }
 238          /*-----------------------------------------------
 239          显示图像的一个例子
 240          ---------------------------------------------*
 241          void LCD_TU(void)
C51 COMPILER V7.50   19264                                                                 02/19/2008 11:05:14 PAGE 5   

 242          {
 243          unsigned char i,j;
 244          for(i=0;i<6;i++)
 245              for(j=0;j<100;j++)
 246                  {
 247                  LCD_XY_SET(j,i);
 248                  LCD_Write(TP[i*100+j],1);
 249                    }
 250           }
 251          
 252          
 253          /*---------------------------------------------
 254          测试主函数
 255          -------------------------------------------------*/
 256          void main()
 257          {
 258   1              unsigned char i,m;
 259   1              unsigned char code c[]="南京普耕科技有限责任公司";
 260   1              LCD_Init();
 261   1              
 262   1      //      LCD_TU();
 263   1              
 264   1              for(i=0;i<24;i+=2) //24为12个汉字
 265   1                  {    
 266   2                  m=LCD_SEARCH_HZ16(c[i],c[i+1]);
 267   2                  LCD_PRINT_HZ16(m,i*8,3);
 268   2                  }
 269   1              
 270   1              
 271   1                  for(i=0;i<64;i++)
 272   1                  {
 273   2                              LCD_LINE_SET(i);
 274   2                          if(i==0)
 275   2                              Delay_xMs(500);    //等待
 276   2                          else
 277   2                              Delay_xMs(20);    //等待
 278   2                  }
 279   1                      while(1);
 280   1      
 281   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    495    ----
   CONSTANT SIZE    =    501    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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