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

📄 lcd.lst

📁 C8051F020单片机的AD测试程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.02b   LCD                                                                  10/31/2005 16:30:55 PAGE 1   


C51 COMPILER V7.02b, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN .\output\lcd.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd.c DEBUG OBJECTEXTEND OBJECT(.\output\lcd.obj)

stmt level    source

   1          /************************************************************************************
   2          *  Copyright (c) 2004,西安铭朗电子科技有限责任公司
   3          *            All rights reserved.
   4          *
   5          * 文件名称: lcd.C
   6          * 文件标识: none
   7          * 适用器件: c8051f020
   8          * 
   9          * 摘 要: 本文件是LCD显示子程序;使用外部22.1184MHz晶振,将跳线器JP8短接,R44空闲
  10          * 
  11          * 当前版本:1.0
  12          * 作 者:卢 阳
  13          * 完成日期:2004年11月14日
  14          *
  15          * 历史版本:0.9 
  16          * 原作者 : 李林利
  17          * 完成日期:2004年1月1日
  18          *************************************************************************************/
  19          
  20          /************************************************************************************/
  21          // 引用外部头文件
  22          
  23          #include "c8051F020.h"
  24          #include "Const.h"
  25          #include "lcd.h"
  26          #include <intrins.h>
  27          
  28          /************************************************************************************/
  29          
  30          /************************************************************************************/
  31          // 全局变量
  32          /************************************************************************************/
  33          
  34          unsigned char col,row,cbyte;                    /*列x,行(页)y,输出数据*/
  35          bit xy;                                                                 /*画线方向标志:1水平*/
  36          unsigned int xdata addr;
  37          unsigned char xdata *tp;
  38          unsigned char xdata et;
  39          
  40          /***********************************************************************************
  41          * 函数名称:lcd_init;
  42          *
  43          * 函数功能描述:lcd_init;
  44          *              
  45          * 输入参数:none;
  46          *
  47          * 返回数据:none;
  48          *
  49          * 注意:    none;
  50          ************************************************************************************/
  51          
  52          void lcd_init(void)                                           
  53            {
  54   1      
  55   1              DISABLE_INTERRUPTS;//EA=0       
C51 COMPILER V7.02b   LCD                                                                  10/31/2005 16:30:55 PAGE 2   

  56   1      
  57   1              addr=0x980c;
  58   1      
  59   1              lcd_wrct(0xc0);
  60   1              lcd_wrct(0x40);         // COLOUM ADDRESS
  61   1              lcd_wrct(0xb8);         // ROW ADDRESS
  62   1              lcd_wrct(0x3f);
  63   1      
  64   1              ENABLE_INTERRUPTS;  //EA=1   
  65   1      
  66   1       }
  67          
  68          /***********************************************************************************
  69          * 函数名称:checkbusy;
  70          *
  71          * 函数功能描述: 判断LCD忙等待;
  72          *              
  73          * 输入参数:none;
  74          *
  75          * 返回数据:none;
  76          *
  77          * 注意:    none;
  78          ************************************************************************************/
  79          
  80          void checkbusy(void)
  81          {
  82   1              addr=0x980e;
  83   1      
  84   1              _nop_();_nop_();
  85   1          _nop_();_nop_();
  86   1      
  87   1              do
  88   1              {
  89   2                      tp=addr;
  90   2              }while((*tp&0x80)==0x80);
  91   1      
  92   1              addr=0x180f;
  93   1      }
  94          
  95          /***********************************************************************************
  96          * 函数名称:lcd_wrct;
  97          *
  98          * 函数功能描述: 向LCD写命令;
  99          *              
 100          * 输入参数:none;
 101          *
 102          * 返回数据:none;
 103          *
 104          * 注意:    none;
 105          ************************************************************************************/
 106          
 107          void lcd_wrct(unsigned char dd)
 108          {
 109   1              DISABLE_INTERRUPTS;     
 110   1      
 111   1              addr=0x980c;
 112   1          tp=addr;
 113   1              *tp=dd;
 114   1      
 115   1              addr=0x180c;
 116   1      
 117   1              _nop_();_nop_();
C51 COMPILER V7.02b   LCD                                                                  10/31/2005 16:30:55 PAGE 3   

 118   1          _nop_();_nop_();
 119   1      
 120   1              addr=0x180d;
 121   1      
 122   1              ENABLE_INTERRUPTS;
 123   1      }
 124          
 125          /***********************************************************************************
 126          * 函数名称:set_xy;
 127          *
 128          * 函数功能描述: LCD读写位置变换;
 129          *              
 130          * 输入参数:unsigned char类型坐标x,y;
 131          *
 132          * 返回数据:none;
 133          *
 134          * 注意:    none;
 135          ************************************************************************************/
 136          
 137          void set_xy(unsigned char x,unsigned char y)
 138          {
 139   1              DISABLE_INTERRUPTS;
 140   1        
 141   1          checkbusy();
 142   1      
 143   1              y&=0x07;
 144   1              y|=0xB8;
 145   1              lcd_wrct(y);
 146   1      
 147   1          x&=0x3F;
 148   1              x|=0x40;
 149   1              lcd_wrct(x);
 150   1      
 151   1              ENABLE_INTERRUPTS;
 152   1      }
 153          
 154          /***********************************************************************************
 155          * 函数名称:lcd_wrda;
 156          *
 157          * 函数功能描述:向LCD写数据;
 158          *              
 159          * 输入参数:unsigned char类型坐标x,y, unsigned char类型写入数据dd;
 160          *
 161          * 返回数据:none;
 162          *
 163          * 注意:    none;
 164          ************************************************************************************/
 165          
 166          void lcd_wrda(unsigned char x,unsigned char y,unsigned char dd)
 167            {
 168   1          
 169   1              DISABLE_INTERRUPTS;
 170   1              set_xy(x,y);
 171   1          checkbusy();
 172   1          if(x<64)
 173   1               {
 174   2                              addr=0x9805;
 175   2                              tp=0x9805;
 176   2                       }
 177   1          else
 178   1               {
 179   2                              addr=0x9809;
C51 COMPILER V7.02b   LCD                                                                  10/31/2005 16:30:55 PAGE 4   

 180   2                              tp=0x9809;
 181   2                       }
 182   1      
 183   1              *tp=dd;
 184   1      
 185   1              addr&=0x1fff;
 186   1      
 187   1              _nop_();_nop_();
 188   1              _nop_();_nop_();
 189   1      
 190   1              addr|=0x8000;
 191   1      
 192   1              ENABLE_INTERRUPTS;
 193   1        }
 194          
 195          /***********************************************************************************
 196          * 函数名称:lcd_rdda;
 197          *
 198          * 函数功能描述:从LCD中读数据;
 199          *              
 200          * 输入参数:unsigned char类型坐标x,y, 
 201          *
 202          * 返回数据:unsigned char类型读出数据;
 203          *
 204          * 注意:    none;
 205          ************************************************************************************/
 206          
 207          unsigned char lcd_rdda(unsigned char x,unsigned char y)
 208          {  
 209   1              unsigned char xdata readdata;
 210   1      
 211   1          set_xy(x,y);
 212   1          checkbusy();
 213   1          if(x<64)
 214   1               {
 215   2                              addr=0x9807;
 216   2                              tp=addr;
 217   2                              addr=0x1805;
 218   2                       }
 219   1          else
 220   1               {
 221   2                              addr=0x980b;
 222   2                              tp=addr;
 223   2                              addr=0x1809;
 224   2                       }
 225   1              readdata=*tp;
 226   1          checkbusy();
 227   1          if(x<64)
 228   1               {
 229   2                              addr=0x9807;
 230   2                              tp=addr;

⌨️ 快捷键说明

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