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

📄 6963a.lst

📁 t6963驱动,keilc51编译
💻 LST
字号:
C51 COMPILER V7.50   6963A                                                                 12/30/2008 12:27:16 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 6963A
OBJECT MODULE PLACED IN 6963a.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 6963a.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //液晶控制器T6963的C语言驱动程序
   2          //评:系转载,液晶控制器T6963的C语言驱动程序,T6963应用广泛,特别是240×128的液晶基本上都是用这个芯片。
   3          
   4          #include "absacc.h"
   5          #include "math.h"
   6          #include "ASCII816.h" //字符点阵库 0x20--0x7F
   7          #include "HZTable.h" //汉字点阵库(自做)
   8          #include "menu.h" //汉字点阵库(自做)
   9          
  10          //set following data by user according to LCD
  11          #define ComPort 0xB101
  12          #define DataPort 0xB000
  13          #define GraphAddr 0x0000 //head of graph
  14          
  15          //以8*8字符计算,显示屏横向、纵向可以显示的字符个数
  16          //以240*128为例:
  17          #define LineChar 30 //一行16个字符(8*8)
  18          #define ColumnChar 16 //总共16列
  19          
  20          
  21          //指令,数据 读写状态检查
  22          #define RWCheck() { unsigned char sta; do{ sta=XBYTE[ComPort] & 0x03; } while(sta!=0x03); }
  23          //数据自动读 状态检查
  24          #define AutoRCheck() { unsigned char sta; do{ sta=XBYTE[ComPort] & 0x04; } while(sta!=0x04); }
  25          //数据自动写 状态检查
  26          #define AutoWCheck() { unsigned char sta; do{ sta=XBYTE[ComPort] & 0x08; } while(sta!=0x08); }
  27          
  28          /*------输入/出函数,与T6963通讯------------------------------------------------*/
  29          /*------------------------------------------------------------------------*/
  30          
  31          // 向数据口发Data
  32          #define OutPortData(dat ) { RWCheck(); XBYTE[DataPort]=dat; }
  33          
  34          //写有 1 个参数命令
  35          #define OutPortCom1(command) { RWCheck(); XBYTE[ComPort]= command; }
  36          
  37          //写有 2 个参数命令
  38          #define OutPortCom2(dat, command) { OutPortData(dat); OutPortCom1(command); }
  39          
  40          //写有 3 个参数命令
  41          #define OutPortCom3(data1, data2, command) { OutPortData(data1); OutPortData(data2); OutPortCom1(command);
             -}
  42          
  43          
  44          unsigned char InPortData() { RWCheck(); return(XBYTE[DataPort]); }
  45          
  46          /*-----------------------------------------------------------------------------------*/
  47          //显示8*16字符
  48          //lin:行(0-7), column: 列(0-15)
  49          //ch:字符代码(标准ASCII码)
  50          void ShowChar(unsigned char lin,unsigned char column,unsigned char ch)
  51          {
  52   1      unsigned char i;
  53   1      unsigned char dat;
  54   1      unsigned int StartAddr;
C51 COMPILER V7.50   6963A                                                                 12/30/2008 12:27:16 PAGE 2   

  55   1      
  56   1      StartAddr=lin*LineChar +column; //定位起始行
  57   1      
  58   1      for(i=0;i<16;i++)
  59   1      {
  60   2      dat=ASCII816[ ch-0x20 ][i];
  61   2      OutPortCom3( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24); //set address
  62   2      OutPortCom2( dat, 0xc4);
  63   2      
  64   2      StartAddr=StartAddr + LineChar;
  65   2      }
  66   1      }
  67          
  68          /*----------------------------------------------------------------------------------------------*/
  69          //显示一个汉字(16*16点阵)
  70          //lin:行(0-7), column: 列(0-7)
  71          //hzcode: 汉字代码(自定义的)
  72          void ShowHZ(unsigned char lin,unsigned char column,unsigned int hzcode)
  73          {
  74   1      unsigned char i;
  75   1      unsigned int StartAddr;
  76   1      
  77   1      StartAddr=lin*LineChar + column; //定位起始行
  78   1      
  79   1      for(i=0;i<16;i++)
  80   1      {
  81   2      OutPortCom3( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24);
  82   2      OutPortCom2( HZTable[hzcode][i*2], 0xc0); //左半部 地址加一
  83   2      OutPortCom2( HZTable[hzcode][i*2+1], 0xc4); //右半部 字模地址加一
  84   2      
  85   2      StartAddr=StartAddr + LineChar;
  86   2      }
  87   1      }
  88          /////////////////////////////////////////////////////////////////////////////////////////////
  89          //显示一个汉字(16*16点阵)
  90          //lin:行(0-7), column: 列(0-7)
  91          //hzcode: 汉字代码(自定义的)
  92          void ShowHZD(unsigned char lin,unsigned char column,unsigned int hzcode)
  93          {
  94   1      unsigned char i,j;
  95   1      unsigned int StartAddr;
  96   1      
  97   1      StartAddr=lin*LineChar*16 +column; //定位起始行
  98   1      
  99   1      for(i=0;i<35;i++)
 100   1      {
 101   2      OutPortCom3( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24); //定位当前操作位置
 102   2      for(j=0;j<5;j++) OutPortCom2( HZTable[hzcode][i*5+j], 0xc0); //显示当前一行
 103   2      
 104   2      StartAddr=StartAddr + LineChar;
 105   2      }
 106   1      }
 107          
 108          ////////////////////////////////////////////////////////////////////////////////////////////
 109          /*-----------------------------------------------------------------------------------*/
 110          //显示一行字符串(汉字,字母混排,一行16字节)
 111          //lin:行
 112          //lineheadaddr: 此行汉字代码区首地址
 113          void ShowLine(unsigned char lin,unsigned char column,unsigned char linehead[])
 114          {
 115   1      unsigned char i,j;
 116   1      unsigned char byte;
C51 COMPILER V7.50   6963A                                                                 12/30/2008 12:27:16 PAGE 3   

 117   1      unsigned int hzcode;
 118   1      
 119   1      for( i= column,j=0; i< column+14 ; )
 120   1      { byte=linehead[j];
 121   2      if(byte < 0x80) //字母
 122   2      {
 123   3      ShowChar(lin, i , byte);
 124   3      i=i+1;j=j+1;
 125   3      }
 126   2      else // byte >= 0x80(汉字)
 127   2      {
 128   3      byte=byte & 0x7f; //最高位置0,即:减去0x8000
 129   3      hzcode=byte*256 + linehead[j+1]; //加低8位,组合成整型数地址
 130   3      ShowHZ( lin,i,hzcode);
 131   3      i=i+2;j=j+2;
 132   3      }
 133   2      }
 134   1      }
 135          
 136          /*-----------------------------------------------------------------------------------*/
 137          //显示一屏汉字
 138          //pageheadaddr:此屏汉字代码地址区首地址
 139          void ShowPage(unsigned char lin,unsigned char column1,unsigned char pagehead[][14])
 140          {
 141   1      unsigned char i;
 142   1      for(i=0;i< 4 ;i++)
 143   1      ShowLine((lin+i*20),column1,pagehead[i]); //1行8个汉字,16字节
 144   1      }
 145          
 146          /*----------------------------------------------------------------------------------------------------*/
 147          //反显一个字符
 148          //lin:行(0-7), column: 列(0-15)
 149          void ReverseShowChar(unsigned char lin,unsigned char column)
 150          {
 151   1      unsigned char i;
 152   1      unsigned char dat;
 153   1      unsigned int StartAddr;
 154   1      
 155   1      StartAddr=lin*LineChar +column; //定位起始行
 156   1      
 157   1      for(i=0;i<16;i++)
 158   1      {
 159   2      OutPortCom3( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24); //set address
 160   2      OutPortCom1( 0xc5 ); //数据一次读,地址不变
 161   2      dat=InPortData(); //读入数据
 162   2      dat=~dat; //取反
 163   2      OutPortCom2( dat, 0xc4); //送回
 164   2      
 165   2      StartAddr=StartAddr+ LineChar;
 166   2      }
 167   1      }
 168          
 169          
 170          /*----------------------------------------------------------------------------------------------------*/
 171          //反显一个汉字
 172          //lin:行(0-7), column: 列(0-15)
 173          void ReverseShowHZ(unsigned char lin,unsigned char column)
 174          {
 175   1      ReverseShowChar(lin,column);
 176   1      ReverseShowChar(lin,column+1);
 177   1      }
 178          /*----------------------------------------------------------------------------------------------------*/
C51 COMPILER V7.50   6963A                                                                 12/30/2008 12:27:16 PAGE 4   

 179          //反显一行汉字
 180          //lin:行(0-7)
 181          void ReverseShowLine(unsigned char lin)
 182          {
 183   1      unsigned char column;
 184   1      for(column=0; column< ColumnChar; column++) ReverseShowChar(lin,column);
 185   1      }
 186          
 187          
 188          //////////////////////////////////////////////////////////////////////////////////////
 189          void ShowPicture(unsigned char Startline,unsigned char Startcolumn,unsigned char LineWidth,unsigned char C
             -olumnWidth,unsigned int address)
 190          {
 191   1      unsigned char i,j;
 192   1      unsigned int StartAddr;
 193   1      
 194   1      StartAddr=Startline*LineChar + Startcolumn; //定位起始位置
 195   1      
 196   1      for(i=0;i<ColumnWidth;i++)
 197   1      {
 198   2      
 199   2      OutPortCom3( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24); //set address
 200   2      for(j=0;j<LineWidth;j++)
 201   2      {
 202   3      OutPortCom2( CBYTE[address + i*LineWidth+ j ], 0xc0);
 203   3      }
 204   2      StartAddr=StartAddr + LineChar;
 205   2      }
 206   1      }
 207          
 208          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -//////////////////////////////
 209          /////////////////////////////////////////////////////////////////////////////
 210          //图形函数,用于描点画图
 211          //---------------------------------------------------------------------------
 212          //在指定位置显示一个点
 213          //如果显示屏超过了256*256,请修改这个函数 PointX,PointY的类型
 214          //Mode 1:显示 0:清除该点
 215          Pixel(unsigned char PointX,unsigned char PointY, bit Mode)
 216          {
 217   1      unsigned int StartAddr=0;
 218   1      unsigned char dat;
 219   1      
 220   1      StartAddr=PointX*LineChar + PointY/8;
 221   1      dat=0xf0+7-PointY%8;
 222   1      if(Mode) dat=dat|0x08;
 223   1      
 224   1      OutPortCom3( (unsigned char)(StartAddr),(unsigned char)(StartAddr>>8),0x24 ); //设置该点所在单元地址
 225   1      OutPortCom1(dat);
 226   1      }
 227          
 228          //-------------------------------------------------------------------------------
 229          //划线函数
 230          void Line( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, bit Mode)
 231          {
 232   1      unsigned char x,y;
 233   1      double k,b;
 234   1      
 235   1      if( abs(y1-y2) <= abs(x1-x2) ) // |k|<=1
 236   1      {
 237   2      k=(float)(y2-y1) / (float)(x2-x1) ;
 238   2      b=y1-k*x1;
C51 COMPILER V7.50   6963A                                                                 12/30/2008 12:27:16 PAGE 5   

 239   2      
 240   2      if( x1 <= x2 )
 241   2      {
 242   3      for(x=x1;x<=x2;x++)
 243   3      {
 244   4      y=k*x+b;
 245   4      Pixel(x, y, Mode);
 246   4      }
 247   3      }
 248   2      else
 249   2      {
 250   3      for(x=x2;x<=x1;x++)
 251   3      { y=k*x+b;
 252   4      Pixel(x, y, Mode);
 253   4      }
 254   3      }
 255   2      }
 256   1      else // abs(y1-y2) > abs(x1-x2) |K|>1
 257   1      {
 258   2      k=(float)(x2-x1) / (float)(y2-y1) ;
 259   2      b=x1-k*y1;
 260   2      
 261   2      if( y1 <= y2 )
 262   2      {
 263   3      for(y=y1;y<=y2;y++)
 264   3      { x=k*y+b;
 265   4      Pixel( x , y,Mode );
 266   4      }
 267   3      }
 268   2      else
 269   2      {
 270   3      for(y=y2;y<=y1;y++)
 271   3      { x=k*y+b;
 272   4      Pixel( x , y,Mode );
 273   4      }
 274   3      }
 275   2      }
 276   1      }
 277          
 278          /*---------------------------------------------------------------------------------------------------*/
 279          void ClearScreen()
 280          {
 281   1      
 282   1      unsigned int i;
 283   1      ///////// 清显示 RAM 区 0000h--2000h (8k)
 284   1      OutPortCom3(0x00,0x00,0x24); //设置指针地址0000H
 285   1      
 286   1      OutPortCom1(0xb0); //设置自动写状态
 287   1      for(i=0x00;i<0x2000;i++) OutPortData(0x00); // data=0;
 288   1      OutPortCom1(0xb2); // 自动写结束
 289   1      }
 290          
 291          //初始化LCD
 292          //需要手动设置
 293          void InitLCD()
 294          {
 295   1      OutPortCom3( 0x00,0x00,0x42 ); //设置图形显示区域首地址GraphAddr
 296   1      OutPortCom3( 30,0x00,0x43 ); //设置图形显示区域宽度 : LineChar
 297   1      
 298   1      // OutPortCom3( 0x00,0x00,0x42 ); //设置图形显示区域首地址GraphAddr
 299   1      // OutPortCom3( 0x10,0x00,0x43); //设置图形显示区域宽度:10H
 300   1      
C51 COMPILER V7.50   6963A                                                                 12/30/2008 12:27:16 PAGE 6   

 301   1      OutPortCom1(0xa7); //设置光标形状 cursor size 8x8
 302   1      OutPortCom1(0x80); //设置显示方式: CGROM方式 文本\图形 "或"
 303   1      OutPortCom1(0x98); //设置显示开关: 1001 1100 图形
 304   1      
 305   1      ClearScreen();
 306   1      }
 307          
 308          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1818    ----
   CONSTANT SIZE    =   1712    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      53
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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