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

📄 lcd12864_driver.lst

📁 该程序是基于c8051f020的平台
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   LCD12864_DRIVER                                                       07/09/2007 08:18:06 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE LCD12864_DRIVER
OBJECT MODULE PLACED IN LCD12864_Driver.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD12864_Driver.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <c8051f020.h>
   2          #include <math.h>
   3          #include "delay.h"
   4          #include "LCD12864_Driver.h"
   5          
   6          #define uchar  unsigned char
   7          #define uint   unsigned int
   8          
   9          //初始化-----------------------------
  10          void Lcd_Ini(void)
  11          {
  12   1           RST=1;
  13   1           Delay(100,100);
  14   1           RST=0;       //复位
  15   1           Delay(100,100);
  16   1           RST=1;
  17   1           Delay(100,100);
  18   1      
  19   1           WR=1;RD=1;CD=1;
  20   1      
  21   1      
  22   1          // Clr_Char_Area() ;
  23   1           //Clr_Graph_Area();
  24   1      
  25   1           Send_cmd1(0x80); //设置显示方式: CGROM方式 文本与图形或显示
  26   1           Send_cmd3(0x00,0x00,0x21);    //光标位置
  27   1           Send_cmd1(0xa7);             //设置光标形状 cursor size 8x8                                          
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                                        
             -           
  28   1      
  29   1      
  30   1           Send_cmd3(0x00,0x00,0x40);    //文本区首地址设置
  31   1           Send_cmd3(0x10,0x00,0x41);    //字符宽度:16*16,可设置
  32   1           Send_cmd3(0x00,0x04,0x42);    //图形区首址设置
  33   1           Send_cmd3(0x10,0x00,0x43);    //宽度
  34   1      
  35   1           Send_cmd1(0x94);            //设置显示开关:启用文本显示 禁止图形显示
  36   1           // Send_cmd1(0x98);          //设置显示开关:禁止文本显示启用图形显示  /****显示汉字和动画时选用****/
  37   1          
  38   1           Send_cmd1(0x80);          //设置显示开关:启用文本显示 启用图形显示 
  39   1           //Send_cmd1(0x90);            //设置显示开关:禁止文本显示 禁止图形显示
  40   1      }
  41          
  42           
  43          void ShowChar(unsigned char lin,unsigned char column, uchar str[])
  44          {
  45   1        unsigned int i;        //定义字符显示个数变量
  46   1        unsigned int StartAddr; //起始地址变量
C51 COMPILER V8.02   LCD12864_DRIVER                                                       07/09/2007 08:18:06 PAGE 2   

  47   1        uchar temp;
  48   1       
  49   1        
  50   1        StartAddr=lin*16+column; //定位起始行
  51   1        Send_cmd3((unsigned char)StartAddr,0x00, 0x24); //set address
  52   1      
  53   1        Send_cmd1(0xb0);//自动写方式
  54   1        for(i=0;str[i]!=0;i++)
  55   1           {
  56   2               temp = str[i] - 0x20;  
  57   2               Send_data(temp);        //写字符
  58   2            }
  59   1        Send_cmd1(0xb2);//退出自动写
  60   1      
  61   1      }
  62          
  63           
  64          
  65          
  66          void ShowHZ(unsigned char lin,unsigned char column,uchar HZTable[],uchar HZ_num )
  67          {  unsigned char i,j;     //i为汉字点阵字节数变量,j为显示汉字个数变量
  68   1         unsigned int StartAddr; //定义起始地址变量
  69   1         unsigned int Abos_Addr;
  70   1         unsigned char tcolumn; //每个汉字显示的开始列地址
  71   1      
  72   1        // StartAddr = 0x0400;   // Send_cmd3(0x00,0x04,0x40);    与文本区首地址设置保持一致
  73   1      
  74   1         for(j=0;j<HZ_num;j++)
  75   1             {  tcolumn=column+j*2;
  76   2                StartAddr=lin*16 + tcolumn; //定位起始行
  77   2      
  78   2                for(i=0;i<32;i++)  //一个汉字共32字节,一次显示两字节,共显示16次
  79   2                  { Abos_Addr=StartAddr + 0x0400;
  80   3                    Send_cmd3((unsigned char)(Abos_Addr),(unsigned char)(Abos_Addr>>8), 0x24);
  81   3                    Send_cmd2( HZTable[j*32+i], 0xc0); //左半部 地址加一
  82   3                    Send_cmd2( HZTable[j*32+i+1], 0xc4); //右半部 字模地址加一
  83   3                                i++;
  84   3                    StartAddr=StartAddr + 16; //下一字节先地址
  85   3                   }
  86   2             }
  87   1      
  88   1      }
  89          
  90          
  91          void ShowPicture(unsigned char Startline,unsigned char Startcolumn,unsigned char LineWidth,unsigned char C
             -olumnWidth,unsigned char code * address,unsigned int StartAddr)
  92          {   unsigned char i,j; //i为列宽变量,j为行宽变量
  93   1          unsigned int StartAddr0;//定义起始地址变量
  94   1      
  95   1      //    StartAddr = 0x0400;   // Send_cmd3(0x00,0x04,0x40);    与文本区首地址设置保持一致
  96   1          StartAddr0=StartAddr + Startline*16 + Startcolumn; //定位起始位置
  97   1      
  98   1          for(i=0;i<ColumnWidth;i++) //汉字为16*16点阵,ColumnWidth为16,以像数计算
  99   1            {  Send_cmd3( (unsigned char)(StartAddr0), (unsigned char)(StartAddr0>>8),0x24); //set address
 100   2               
 101   2               for(j=0;j<LineWidth;j++) //LineWidth为2,以字节计算
 102   2                 {  //Send_cmd2( *(address+i*LineWidth+ j ), 0xc0); //写数据,地址增一
 103   3                    Send_cmd2( *(address+i*LineWidth+ j ), 0xc0); //写数据,地址增一
 104   3                 }
 105   2               StartAddr0=StartAddr0 + 16;  //图片下一个字节的地址
 106   2           }  
 107   1      }
C51 COMPILER V8.02   LCD12864_DRIVER                                                       07/09/2007 08:18:06 PAGE 3   

 108          
 109          
 110          //清理字符区-----------------------------------
 111          
 112          void Clr_Char_Area(void)
 113          {
 114   1          uint i;
 115   1          Send_cmd3(0x00,0x00,0x24);
 116   1          Send_cmd1(0xb0);                  //自动写设置
 117   1          for (i=0;i<128;i++)
 118   1             {
 119   2                // Autowr_check();
 120   2                 Send_data(0x00);
 121   2      
 122   2             }
 123   1          Send_cmd1(0xb3);                  //自动读/写结束
 124   1      
 125   1          Send_cmd3(0x00,0x00,0x24);
 126   1      }
 127          
 128          
 129          //=========================================
 130           //清理图形区
 131          void Clr_Graph_Area(void)
 132          {
 133   1          uint i;
 134   1          Send_cmd3(0x00,0x04,0x24);            //地址指针位置
 135   1          Send_cmd1(0xb0);                   //自动读设置
 136   1          for (i=0;i<1024;i++) 
 137   1            {
 138   2                // Autowr_check();
 139   2                 Send_data(0x00);
 140   2                
 141   2            }                    
 142   1          Send_cmd1(0xb3);                   //自动读/写结束
 143   1          Send_cmd3(0x00,0x04,0x24);
 144   1      }    
 145          
 146          
 147          void Locat_Dot(uchar x_loc, uchar y_loc)
 148          {
 149   1           uint StartAddr;//定义起始地址变量   volatile
 150   1           uchar dot_data,ori_data, move;
 151   1           uchar Line,Column;
 152   1      
 153   1          y_loc = 63 - y_loc ;
 154   1          Column = x_loc/8;  
 155   1          Line = y_loc;
 156   1      
 157   1          StartAddr = 0x0400;   // Send_cmd3(0x00,0x04,0x40);    与文本区首地址设置保持一致
 158   1          StartAddr =StartAddr +  Line*16 + Column;
 159   1          Send_cmd3( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8),0x24);
 160   1          
 161   1           Send_cmd1(0xc5);     // 数据读,地址不变
 162   1           Delay(5,4);         // 本来读端口数据时,要把端口配为漏极,且向端口写“1”Data_Port=0XFF; 但在函数Sen
             -d_cmd(0xc5);里面已经包括了该句
 163   1           CD=0;CE=0;RD=0;WR=1; 
 164   1           ori_data=Data_Port;
 165   1           Delay(10,5);
 166   1           CD=1;RD=1;CE=1;  
 167   1           
 168   1          move = x_loc%8;  dot_data = 0x80>>move;
C51 COMPILER V8.02   LCD12864_DRIVER                                                       07/09/2007 08:18:06 PAGE 4   

 169   1          dot_data = dot_data | ori_data;
 170   1          Send_cmd2(dot_data, 0xc4);   // 地址不变
 171   1      
 172   1      }
 173          
 174          
 175          void Line(uchar x1,uchar y1,uchar x2,uchar y2)
 176          {   char i;
 177   1          //y1 = 64 - y1 ;
 178   1          //y2 = 64 - y2 ;
 179   1      
 180   1          char x,y;
 181   1              float y_add;
 182   1              x=x2-x1;
 183   1              y=y2-y1;
 184   1              if(x==0)
 185   1            {      
 186   2                       if(y>0)
 187   2                        {

⌨️ 快捷键说明

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