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

📄 ts12864.lst

📁 TS12864液晶驱动
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   TS12864                                                               07/26/2008 19:16:15 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE TS12864
OBJECT MODULE PLACED IN ts12864.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe ts12864.c DB OE BR

line level    source

   1          /*****************************************************************
   2           *      Copyright (C) 2008, 华中科技大学电工电子科技创新中心
   3           *      All Rights Reserved.
   4           *      
   5           *      文件名:         TS12864A-1图形点阵LCD驱动程序(C8051版)
   6           *      文件描述:       此版本专门用于《智能教学楼能源管理系统》的液晶驱动。
   7           *      资源占用:      8根数据线 5根控制线
   8                          
   9           *      当前版本:       1.0
  10           *      作者:           梁威魄(lwpo2008@yahoo.com.cn)
  11           *      完成日期:       2008年3月20日 星期四
  12           *****************************************************************/
  13           
  14          /*****************************************************************
  15           *      头文件声明
  16           *****************************************************************/
  17          
  18           #include "TS12864.h"
  19          
  20          /*****************************************************************
  21          函数功能:对LCD的忙状态进行检测,对TS12864A-1来说不是必要
  22          参数说明:空
  23          ******************************************************************/
  24          void LcdBusy(void)
  25          {
  26   1              unsigned char temp;
  27   1              temp=SFRPAGE;
  28   1              SFRPAGE= CONFIG_PAGE;
  29   1      
  30   1              data_ora=0xff;                                  //清除端口上数据
  31   1              p_rs=0;                                                 //进入忙状态
  32   1              _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); 
  33   1              p_rw=1;                                                 //进入检测忙状态
  34   1              _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); 
  35   1              p_e=1;  
  36   1              _nop_(); _nop_(); _nop_();_nop_(); _nop_(); 
  37   1              p_bf=1;
  38   1              _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); 
  39   1              p_bf=p_res=1;
  40   1              while(p_bf||p_res==1);                  //检测忙状态和复位状态
  41   1              p_e=0;
  42   1              _nop_(); _nop_();
  43   1      
  44   1              SFRPAGE=temp;
  45   1      }
  46          
  47          /*****************************************************************
  48          函数功能:写数据。此函数所有写入液晶的函数均使用此函数。
  49          参数说明:command:DATA时写数据,COMM时写指令;data_comm内容
  50          ******************************************************************/
  51          void WriteLcd(unsigned command,unsigned data_comm)
  52          {
  53   1              unsigned char temp;
  54   1              temp=SFRPAGE;
  55   1              SFRPAGE= CONFIG_PAGE;
C51 COMPILER V8.02   TS12864                                                               07/26/2008 19:16:15 PAGE 2   

  56   1      
  57   1              LcdBusy();                              //检测忙命令
  58   1              p_rw=0;                                 //由于是写数据或者指令,所以RW为0;
  59   1              p_rs=command;                   //给定写入命令,数据(DATA)或者指令(COMM)
  60   1              data_ora=data_comm;             //给写入内容
  61   1              p_e=1;                                  //给下降沿
  62   1              _nop_(); _nop_(); _nop_(); _nop_();
  63   1              _nop_(); _nop_(); _nop_(); _nop_();
  64   1              _nop_(); _nop_(); _nop_(); _nop_();
  65   1              p_e=0;                                  //锁存数据
  66   1              _nop_(); _nop_(); _nop_(); _nop_();
  67   1              _nop_(); _nop_(); _nop_(); _nop_();
  68   1              _nop_(); _nop_(); _nop_(); _nop_();
  69   1      
  70   1              SFRPAGE=temp;
  71   1      }
  72          /*****************************************************************
  73          函数功能:读数据。此函数所有读取液晶的函数均使用此函数。
  74          参数说明:返回值为8位无符号字符
  75          ******************************************************************/
  76          /*unsigned char ReadLcd(void)
  77          {
  78                  unsigned char temp;
  79                  temp=SFRPAGE;
  80                  SFRPAGE= CONFIG_PAGE;
  81          
  82                  unsigned char readData;
  83                  LcdBusy ();
  84                  p_rw=1; _nop_(); _nop_(); _nop_(); _nop_();
  85          
  86                  p_rs=1; _nop_(); _nop_(); _nop_(); _nop_();
  87          
  88                  p_e=1;
  89                  _nop_(); _nop_(); _nop_(); _nop_();
  90                  _nop_(); _nop_(); _nop_(); _nop_();
  91                  _nop_(); _nop_(); _nop_(); _nop_();
  92          
  93                  readData=data_ora;              //读取数据
  94          
  95                  p_e=0;
  96                  _nop_(); _nop_(); _nop_(); _nop_();
  97                  _nop_(); _nop_(); _nop_(); _nop_();
  98                  _nop_(); _nop_(); _nop_(); _nop_();
  99          
 100                  SFRPAGE=temp;
 101          
 102                  return readData;
 103          }*/
 104          /*****************************************************************
 105          函数功能:设置x,y的位置。从此位置开始显示
 106          参数说明:x(行,取值0~7),y(列,取值0~15)为定位坐标
 107          ******************************************************************/
 108          void SetXY(unsigned char x,unsigned char y) 
 109          {
 110   1              unsigned char temp;
 111   1              temp=SFRPAGE;
 112   1              SFRPAGE= CONFIG_PAGE;
 113   1      
 114   1              if (x>=64)                              //如果显示列数超过液晶左半屏幕
 115   1              {                                               //支持的行数
 116   2                      p_csa=0;                        //则,
 117   2                      p_csb=1;                        //选择右半屏幕
C51 COMPILER V8.02   TS12864                                                               07/26/2008 19:16:15 PAGE 3   

 118   2              }
 119   1              else                                    //否则
 120   1              {                                               //就
 121   2                      p_csa=1;                        //选择左半屏幕
 122   2                      p_csb=0;
 123   2              }
 124   1              WriteLcd(COMM,LOCATION_X | x);  //设置x的位置
 125   1      
 126   1              WriteLcd(COMM,LOCATION_Y | y);  //设置y的位置
 127   1      
 128   1              data_ora=0xff;                  //清除端口上的数据
 129   1      
 130   1              SFRPAGE=temp;
 131   1      }
 132          
 133          /*****************************************************************
 134          函数功能:数据显示。
 135          参数说明:x(行,取值0~127),y(列,取值0~7)为定位坐标。dd为显示点阵
 136          ******************************************************************/
 137          void Display(unsigned char x,unsigned char y,unsigned char dd) 
 138          {
 139   1              unsigned char temp;
 140   1              temp=SFRPAGE;
 141   1              SFRPAGE= CONFIG_PAGE;
 142   1      
 143   1              SetXY(x,y);                                     //设置显示位置
 144   1              WriteLcd(DATA,dd);                      //写入数据
 145   1              data_ora=0xff;                          //清除端口上的数据
 146   1      
 147   1              SFRPAGE=temp;
 148   1      }
 149          
 150          /*****************************************************************
 151          函数功能:清屏幕
 152          参数说明:LCD_CLEAR     0x00 涂白屏幕指令;LCD_BLACK    0xFF 涂黑屏幕指令
 153          ******************************************************************/
 154          void ClearLcd(unsigned char state)
 155          {
 156   1              unsigned char i,j;
 157   1              for(j=0;j<128;j++)                                      //进行列数选择
 158   1              {       
 159   2                      for (i=0;i<8;i++)                       //进行行数选择
 160   2                      {
 161   3                              Display(j,i,state);             //将选择的点清除。
 162   3                      }
 163   2              }
 164   1      }
 165          
 166          /*****************************************************************
 167          函数功能:画矩形,可以用来显示进度条
 168          参数说明:x:y:矩形起始坐标;row:line:矩形结束坐标;state表示显示状态
 169          ******************************************************************/
 170          /*void Rect(unsigned char x,unsigned char y,unsigned char row,unsigned char line,unsigned char state)
 171          {
 172                  unsigned char i,j;
 173                  for(i=x;i<row;i++)
 174                  {
 175                          for(j=y;j<line;j++)
 176                          {
 177                                  Display(i,j,state);
 178                          }
 179                  }
C51 COMPILER V8.02   TS12864                                                               07/26/2008 19:16:15 PAGE 4   

 180          }*/
 181          /*****************************************************************
 182          函数功能:显示任意一点
 183          参数说明:x:y:点阵坐标x:0~128;y:0~64
 184          ******************************************************************/
 185          /*void ShowDot(unsigned char x,unsigned char y)
 186          {
 187                  unsigned char page,ram,dot=0x01;
 188          
 189                  page=y/8;
 190                  SetXY(x,page);
 191                  y%=8;
 192                  ram=ReadLcd();
 193                  ram=ReadLcd();                          //datasheet要求读两次

⌨️ 快捷键说明

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