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

📄 lcd1.lst

📁 教你基础的lcd显示屏应用方法
💻 LST
字号:
C51 COMPILER V6.12  LCD1                                                                   09/10/2005 14:56:41 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE LCD1
OBJECT MODULE PLACED IN .\lcd1.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE .\lcd1.c DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg51.h>
   2          #include <intrins.h>       //内部函数,包含_nop_()空函数指令
   3          #define	uchar unsigned char
   4          #define uint unsigned int
   5          sbit	RS	= P2^5;       // 定义LCD模块控制引脚
   6          sbit	RW	= P2^6;
   7          sbit	E = P2^7;
   8          #define DataPort P0	     //定义LCD模块数据端口
   9          #define Busy	0x80     //忙标志,D7位为1说明忙
  10          uchar Xpos;		//列方向地址指针
  11          uchar Ypos;		//行方向地址指针
  12          
  13          //以下是短延时函数
  14          void Delay5Ms(void) {
  15   1      	uint i = 5552;
  16   1      	while(i--);
  17   1      }
  18          //以下是读忙状态函数
  19          // 功能:在正常读写操作之前检测LCD模块的忙状态, 
  20          //D7 = 0:LCD控制器空闲;D7 = 1:LCD控制器忙
  21          void CheckBusy( void ) 
  22          { 
  23   1      	DataPort = 0xff;           //P1口写1
  24   1      	RS=0;                     //选择指令寄存器
  25   1      RW=1;                    //选择读模式
  26   1      _nop_();                   
  27   1      E=1;                     //使能LCD
  28   1      _nop_();
  29   1      _nop_();
  30   1      	while( DataPort & Busy );//若D7=1,则DataPort&Busy=1,说明忙,等待
  31   1      	E=0;                   //若D7=0,说明不忙,令E=0
  32   1      }	
  33          //以下是写入IR寄存器命令函数
  34          //功能:向LCD模块写入命令字符CMD
  35          //若 AttribC = 1 检测忙信号,若 AttribC = 0 不检测忙信号
  36          void WriteIR(uchar CMD,uchar AttribC)
  37           {
  38   1      	if (AttribC) CheckBusy();//若AttribC =1,则检测忙信号,否则,顺序执行
  39   1      	RS = 0;                  //选择指令寄存器
  40   1      	RW = 0;                  //选择写模式
  41   1       _nop_();
  42   1      	DataPort = CMD;          //将命令送数据端口
  43   1      _nop_();
  44   1      	E = 1;                   //使能LCD
  45   1      _nop_();
  46   1      _nop_();
  47   1      E = 0;                  //禁止LCD
  48   1      }
  49          //以下是写入DDR寄存器函数
  50          //功能:在当前光标位置显示一个字符
  51          void WriteDDR( char c )
  52           {
  53   1      	CheckBusy();				//检测忙信号
  54   1      	RS = 1;                     //选择数据寄存器
  55   1      RW = 0;                     //选择写模式
C51 COMPILER V6.12  LCD1                                                                   09/10/2005 14:56:41 PAGE 2   

  56   1      _nop_();
  57   1          DataPort = c;           // 将显示字符送往数据口
  58   1      _nop_();
  59   1      	E = 1;                       //写使能
  60   1      _nop_();
  61   1      _nop_();
  62   1      E = 0;	                    //禁止LCD
  63   1      }
  64          //以下是光标定位函数
  65          void LcdPos(uchar Xpos,uchar Ypos)
  66          {
  67   1      uchar tmp;    //定义tmp为指令码
  68   1      	Xpos&=0x0f;	//16xx型液晶的范围是0~15
  69   1      	Ypos&=0x01;	//Y的范围是0~1
  70   1      	tmp=Xpos;
  71   1      	if(Ypos==1)           
  72   1      	tmp|=0xc0;           //若Ypos为1(显示第2行),地址码+0xc0
  73   1      	tmp|=0x80;          //若Ypos为0(显示第1行),地址码+0x80
  74   1      	WriteIR (tmp,0);
  75   1      }
  76          //以下是初始化函数
  77          //功能:向LCD模块写入不同命令,完成必要的初始化过程
  78          void LcdReset( void ) 
  79          {
  80   1         	WriteIR( 0x38, 0);  //功能设置指令,8位接口,显示2行,5×7字符
  81   1      	WriteIR( 0x38, 1);	//设置显示模式(以后均检测忙信号)
  82   1          WriteIR( 0x08, 1);	//显示开关控制指令,显示关闭
  83   1         	WriteIR( 0x01, 1);	//清屏指令,将DDRAM数据全部填入"空白"
  84   1      	WriteIR( 0x06, 1);	//输入方式设置指令,字符不动,光标自动右移一格
  85   1      	WriteIR( 0x0f, 1);	//显示开关控制指令,显示器开,光标开,光标闪烁
  86   1      }
  87          //以下是在指定行列显示字符函数
  88          void WriteChar(uchar Xpos,uchar Ypos,char c)
  89          {
  90   1      	   LcdPos(Xpos,Ypos);
  91   1      	  WriteDDR(c);
  92   1      }
  93          //以下是主函数
  94          void main(void)
  95          {
  96   1      LcdReset();          // LCD模块初始化
  97   1        Delay5Ms();          //延是等待复位
  98   1      WriteChar(0,1,'A');        //Xpos=0(第1列),Ypos=1(第2行),显示字符A
  99   1      for(;;)
 100   1      {;}
 101   1      }
 102          


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


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

⌨️ 快捷键说明

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