📄 lcd1602.lst
字号:
C51 COMPILER V7.50 LCD1602 07/26/2005 09:03:10 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LCD1602
OBJECT MODULE PLACED IN LCD1602.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD1602.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /***************************************/
2 /* CopyRight 2005 LiuYong *
3 /****************************************
4 文件名称:LCD1602.C
5 文件版本:V1.0
6 创建人员:LiuYong
7 创建日期:2005.5.30
8 功能描述:完成LCD的显示
9 相关硬件:at89s52兼容单片机,晶体11.0592M,LCD为1602
10 修改记录:
11 ***************************************/
12 #include <regx52.H>
13 #include <intrins.h>
14 #include "delay.h"
15 #define uchar unsigned char
16
17 #define LCDDB P0 //LCD数据总线
18 //LCD EN
19 sbit LCDE =P1^4;
20 //LCD WR
21 sbit LCDWR =P3^6;
22 //LCD RD
23 sbit LCDRS =P3^7;
24 //busy flag
25 sbit LCDBUSY =P0^7;
26
27 /*************************************************
28 * 函数名称:void LcdCheckBusy(void)
29 * 创建日期:2005.6.3
30 * 功能描述:确保LCD为不忙的状态
31 * 入口参数:无
32 * 返回值: 无
33 * 修改日志:
34 *************************************************/
35 void LcdCheckBusy(void)
36 {
37 1 LCDDB=0XFF;//必须
38 1 LCDRS=0;
39 1 LCDWR=1;
40 1 LCDE=1;
41 1 _nop_();
42 1 while(LCDBUSY)
43 1 {
44 2 _nop_();
45 2 }
46 1 LCDE=0;
47 1 }
48 /*************************************************
49 * 函数名称:void LcdWtInstruct(uchar ucInstruct)
50 * 创建日期:2005.6.3
51 * 功能描述:写指令码到IR寄存器
52 * 入口参数: ucInstruct:指令码,是否检查忙的标志,若为1检查,为0不检查
53 * 返回值: 无
54 * 修改日志:
55 *************************************************/
C51 COMPILER V7.50 LCD1602 07/26/2005 09:03:10 PAGE 2
56 void LcdWtInstruct(uchar ucInstruct,bit bIfChkBsy)
57 {
58 1 if(bIfChkBsy)
59 1 {
60 2 LcdCheckBusy(); //检查LCD是否忙
61 2 }
62 1 LCDE=0;
63 1 LCDRS=0;
64 1 LCDWR=0;
65 1 _nop_(); //liuyong add 6.13
66 1 LCDE=1;
67 1 LCDDB=ucInstruct;
68 1 //LCDE=1;
69 1 _nop_(); //liuyong add 6.13
70 1 _nop_(); //liuyong add 6.13
71 1 LCDE=0;
72 1 }
73 /*************************************************
74 * 函数名称:void LcdWtData(uchar ucLcdData)
75 * 创建日期:2005.6.3
76 * 功能描述:向LCD写数据
77 * 入口参数:ucLcdData:写入的数据
78 * 返回值: 无
79 * 修改日志:
80 *************************************************/
81 void LcdWtData(uchar ucLcdData)
82 {
83 1 LcdCheckBusy(); //检查LCD是否忙
84 1 LCDE=0;
85 1 LCDRS=1;
86 1 LCDWR=0;
87 1 LCDE=1;
88 1 LCDDB=ucLcdData;
89 1 LCDE=0;
90 1 LCDRS=0; //liuyong 0612
91 1 LCDWR=1;//liuyong 0612
92 1 }
93
94 /*************************************************
95 * 函数名称:void LcdInit(void)
96 * 创建日期:2005.6.3
97 * 功能描述:初始化LCD的一些配置
98 * 入口参数:无
99 * 返回值: 无
100 * 修改日志:2005.6.24.LcdWtInstruct(0x3c,1);由原来的38改为3c,增加某些字符的显示
101 *************************************************/
102 void LcdInit(void)
103 {
104 1 /********************************************************
105 1 6号指令:功能设置命令,0B 0B 1B DLB NB FB *B *B ,
106 1 DL:高电平时为4位总线,低电平时为8位总线
107 1 N:低电平时为单行显示,高电平时双行显示
108 1 F: 低电平时显示5x7的点阵字符,高电平时显示
109 1 5x10的点阵字符 指令
110 1 ***********************************************************/
111 1 //LcdWtInstruct(0x38,1); //设置16*12显示,5*7点阵,8位数据接口
112 1 LcdWtInstruct(0x3c,1); //设置16*12显示,5*10点阵,8位数据接口
113 1
114 1 //关显示
115 1 LcdWtInstruct(0x08,1);
116 1
117 1 //指令1:清显示,指令码01H,光标复位到地址00H位置
C51 COMPILER V7.50 LCD1602 07/26/2005 09:03:10 PAGE 3
118 1 LcdWtInstruct(0x01,1);
119 1
120 1 /********************************************************
121 1 3号指令:光标和显示模式设置,0B 0B 0B 0B 0B 1B I/DB SB ,
122 1 I/D:光标移动方向,高电平右移,低电平左移
123 1 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效
124 1 ***********************************************************/
125 1 LcdWtInstruct(0x06,1); //屏幕上的光标和文字右移
126 1
127 1 /********************************************************
128 1 4号指令:显示开关控制,0B 0B 0B 0B 1B DB CB BB ,
129 1 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示
130 1 C:控制光标的开与关,高电平表示有光标,低电平表示无光标
131 1 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁
132 1 ***********************************************************/
133 1 LcdWtInstruct(0x0c,1); //开显示、不显示光标,光标不闪烁
134 1 }
135
136 /*************************************************
137 * 函数名称:void LcdDisplay(uchar *pDis,uchar ucLine)
138 * 创建日期:2005.6.3
139 * 功能描述:显示字符串
140 * 入口参数: *pDis:要显示的字符串,x:x坐标,取值范围是0到15;y: y坐标取0或1
141 ucAdr:字符串显示所在的地址ucNo:写入字符的个数,
142 共32个字符,第一行16个,第二行16个
143 * 返回值: 无
144 * 修改日志:
145 *************************************************/
146 void LcdDisplay(uchar *pDis,uchar x,uchar y,uchar ucNo)
147 {
148 1 uchar i=0;
149 1 uchar ucAdr;
150 1 if(y)
151 1 {
152 2 ucAdr=0xc0;
153 2 }
154 1 else
155 1 {
156 2 ucAdr=0x80;
157 2 }
158 1 LcdWtInstruct(ucAdr+x,1); //写入显示的数据地址指针
159 1 for(i=0;i<ucNo;i++)
160 1 {
161 2 LcdWtData(*(pDis+i));
162 2 }
163 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 152 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 6
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -