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

📄 1620.lst

📁 串行数码管驱动集成芯片MAX7219的驱动和LCD12864液晶驱动
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.08   1620                                                                  11/26/2007 15:21:05 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE 1620
OBJECT MODULE PLACED IN C:\1620.obj
COMPILER INVOKED BY: C:\Program Files\Keil51\C51\BIN\C51.EXE 1620.c BROWSE DEBUG OBJECTEXTEND OBJECT(C:\1620.obj)

line level    source

   1          
   2          
   3          /*****************************************************
   4          
   5          TS1620-1的控制器为HD47780,其引脚功能如下:
   6          Pin  1    2    3     4   5    6   7~17      15     16
   7          功能 GND VDD   VO   RS   RW   E   DB0~7     BL+    BL-
   8          说明:
   9          1 GND:电源地。
  10          2 VDD:电源正 +5V DC。
  11          3 VO:LCD偏压信号,用来对调整对比度,一般接10K电位器/电阻到地。
  12          4 RS:数据/命令选择,用来选择DB0~7输入的是显示数据还是控制字信息
  13          5 RW:读写选择.
  14          6 E: 使能端,控制DB0~7的数据/命令的写入或者读取,上升或下降沿有效。
  15          7-14 DB0~7:数据I/O,可选择8位数据或者4位数据(分两次传输)。
  16          15 BL+:背光电源正输入 +5V DV。
  17          16 BL-:背光电源地。
  18          
  19          *连线图:
  20          * DB0---DPROT.0 DB4---DPROT.4 RS-------------P2.5
  21          * DB1---DPROT.1 DB5---DPROT.5 RW-------------P2.6
  22          * DB2---DPROT.2 DB6---DPROT.6 E--------------P2.7
  23          * DB3---DPROT.3 DB7---DPROT.7 VLCD 接10K 可调电阻到GND*
  24          
  25          1基本操作时序:
  26          1.1读状态:输入:RS=L, RW=H, E=H                     输出:D0~D7=状态字
  27          1.2写指令:输入:RS=L, RW=L, D0~D7=指令码,E=高脉冲  输出:无
  28          1.3读数据:输入:RS=H, RW=H, E=H                     输出:D0~D7=数据
  29          1.4写数据:输入:RS=H, RW=L, D0~D7=数据,E=高脉冲    输出:无
  30          
  31          2基本指令:
  32          指令及编码        功能  
  33                     01H    显示清屏: 1.数据指针清零2.所有显示清零
  34                     02H    显示回车: 1.数据指针清零
  35          0011 1000  38H    显示模式设置: 16X2显示,5X7点阵,8位数据接口
  36          
  37          3显示开/关及光标设置指令
  38          指令及编码        功能
  39          000001 NS         N=1当读或写一个字符后地址指针加一,且光标加一
  40                            N=0当读或写一个字符后地址指针减一,且光标减一
  41                            S=1当写一个字符,整屏显示左移((N=1)或右移(N=0)
  42                            S=0当写一个字符,整屏显示不移动 
  43          000001 00  04H    当写一个字符后光标减一,整屏显示不移动
  44          000001 01  05H    当写一个字符,整屏显示右移
  45          000001 10  06H    当写一个字符后光标加一, 整屏显示不移动
  46          000001 11  07H    当写一个字符,整屏显示左移
  47          
  48          00001 DCB          D=1开显示;  D=0关显示
  49                             C=1显示光标;C=0不显示光标
  50                             B=1光标闪烁;B=0光标不闪烁            
  51          00001 000  08H    关显示; 不显光标; 光标不闪
  52          00001 001  09H    关显示; 不显光标; 光标闪烁
  53          00001 010  0AH    关显示; 显示光标; 光标不闪
  54          00001 011  0BH    关显示; 显示光标; 光标闪烁
  55          00001 100  0CH    开显示; 不显光标; 光标不闪
C51 COMPILER V7.08   1620                                                                  11/26/2007 15:21:05 PAGE 2   

  56          00001 101  0DH    开显示; 不显光标; 光标闪烁
  57          00001 110  0EH    开显示; 显示光标; 光标不闪
  58          00001 111  0FH    开显示; 显示光标; 光标闪烁 
  59           
  60          1xxxx xxx  80H+ 地址码  设置数据地址指针
  61                     0-27H        第一行
  62                     40H-67H      第二行
  63          **************************************************************/
  64          
  65          
  66          /***********************************************
  67          .modle name:        头文件包含
  68          .description:
  69          ************************************************/
  70          #include<reg51.h>
  71          #include<absacc.h>
  72          #include <intrins.h>
  73          
  74          /***********************************************
  75          .modle name:       macros
  76          .description:      宏定义
  77          ************************************************/
  78          #define DPORT P0
  79          
  80          /***********************************************
  81          .modle name:        函数原型声明
  82          .description:
  83          ************************************************/
  84          unsigned Xpos; //列方向地址指针
  85          unsigned Ypos; //行方向地址指针
  86          void LcdWcn(unsigned);
  87          void LcdWc(unsigned);
  88          void WriteChar(unsigned);
  89          void LcdPos();
  90          void LcdWd(unsigned);
  91          void LcdWdn(unsigned);
  92          void posclear(unsigned char Xpos1);
  93          void mDelay(unsigned long Delay);
  94          
  95          /***********************************************
  96          .modle name:        变量定义
  97          .description:
  98          ************************************************/
  99          sbit RS = P2^5;
 100          sbit RW = P2^6;
 101          sbit E  = P2^7;
 102          sbit BacklightP  = P3^0;
 103          sbit BacklightN  = P3^1;
 104          unsigned char TimerReg;
 105          unsigned char Second;//秒
 106          unsigned char Minute;//分
 107          unsigned char Hour;  //小时
 108          unsigned int dischar[]={'0','1','2','3','4','5','6','7','8','9'};
 109          
 110          /***********************************************
 111          .modle name:        函数定义
 112          .description:
 113          ************************************************/
 114          
 115          
 116          /***********************************************
 117          .modle name:  mDelay     
C51 COMPILER V7.08   1620                                                                  11/26/2007 15:21:05 PAGE 3   

 118          .description: 延迟函数
 119          ************************************************/
 120          void mDelay(unsigned long Delay)
 121          { 
 122   1       int i;
 123   1       for(;Delay>0;Delay--)
 124   1       { 
 125   2        for(i=100;i>0;i--)
 126   2        {;}
 127   2       }
 128   1      }
 129          
 130          /***********************************************
 131          .modle name:  WriteChar   
 132          .description: 在指定的行与列显示,不会自动右移
 133                        需要自动右移显示用 LcdWd()
 134          
 135          ************************************************/
 136          
 137          void WriteChar(unsigned c)
 138          { 
 139   1       LcdPos();//位置调整,目的是超过十时显示位置变化
 140   1       LcdWd(c);
 141   1      }
 142          
 143          /***********************************************
 144          .modle name:  WaitIdle
 145          .description: 正常读写操作之前检测LCD控制器是否忙,
 146                        确保STA7==0.
 147          ************************************************/
 148          
 149          void WaitIdle()
 150          { 
 151   1       unsigned tmp;
 152   1       DPORT=0xff;//每次检测状态时都初始化为高电平,如下时序分析。
 153   1       /*         1      2        3        4
 154   1       DPORT^7 _______       ___________         ________  
 155   1                      |      |         |         |      |         
 156   1             0 ----------------------------------------------------
 157   1                      |      |         |         |      |
 158   1       BF      ______________                    ________
 159   1                      |      |         |         |      |
 160   1             0 -----------------------------------------------------
 161   1                      |      |         |         |      |
 162   1       temp    _______                           ________
 163   1                      |      |         |         |                                 
 164   1             0 -----------------------------------------------------
 165   1        
 166   1        。必须DPORT^7为高时,temp 才能反应BF的真实状态(组合1和3)*/
 167   1      
 168   1       RS=0;//command
 169   1       RW=1;//read         
 170   1       E=1;//Enable  BF此时才出现到总线。
 171   1       _nop_();
 172   1      
 173   1       for(;;)//循环:等到BF==0为止
 174   1       { 
 175   2        tmp=DPORT;//读取BF
 176   2        tmp&=0x80;//最高位为BF
 177   2        if(tmp==0)//BF为低电平时,允许进行操作,并跳出循环
 178   2         break;
 179   2       }
C51 COMPILER V7.08   1620                                                                  11/26/2007 15:21:05 PAGE 4   

 180   1      
 181   1       E=0;//关闭, 以后每次读写都要设置为允许
 182   1      }
 183          
 184          /***********************************************
 185          .modle name:  LcdWdn
 186          .description:不检测忙的写数据子程序
 187          ************************************************/
 188          void LcdWdn(unsigned c)
 189          {
 190   1       RS=1;//data 
 191   1       RW=0;//write
 192   1       DPORT=c; //写入待写字符
 193   1       E=1;//使能
 194   1       _nop_();//wait
 195   1       E=0;
 196   1      }
 197          
 198          /***********************************************
 199          .modle name:  LcdWd
 200          .description: 带忙检测的写数据子程序
 201          
 202          ************************************************/
 203          
 204          void LcdWd(unsigned c)
 205          { 
 206   1       WaitIdle();
 207   1       LcdWdn(c);
 208   1      }
 209          
 210          /***********************************************
 211          .modle name:  LcdWcn
 212          .description: 不检测忙信号的写命令控制字子程序
 213                        初始化重复写入38H时不需检测忙信号
 214          ************************************************/
 215          void LcdWcn(unsigned c)
 216          { 
 217   1       RS=0;//select command register
 218   1       RW=0;//write
 219   1       DPORT=c;//command 
 220   1       mDelay(10);
 221   1       E=1;//ennable 
 222   1       _nop_();//wait
 223   1       E=0;
 224   1      }
 225          
 226          /***********************************************
 227          .modle name:  LcdWc
 228          .description: 检测忙信号的写命令控制字子程序
 229          
 230          ************************************************/
 231          void LcdWc(unsigned c)
 232          { 
 233   1       WaitIdle();

⌨️ 快捷键说明

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