📄 lcd1602.lst
字号:
C51 COMPILER V7.50 LCD1602 07/21/2006 13:18:55 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LCD1602
OBJECT MODULE PLACED IN LCD1602.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE LCD1602.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*===================================================================
2
3 ====================================================================*/
4 #include <absacc.h>
5 #include <REG51F.H>
6 #include<intrins.h>
7 #include<LCD1602a.h>
8 #define Busy 0x80
9 sbit RW=PinRW;
10 sbit RS=PinRS;
11 sbit Elcm=PinElcm;
12
13 void WaitForEnable( void );
14 void LcdWriteData( char dataW );
15 void LcdWriteCommand( Uchar CMD,Uchar AttribC );
16 void LcdReset( void );
17 void DispOneChar(Uchar x,Uchar y,Uchar Wdata);
18 void ePutstr(Uchar x,Uchar y, Uchar code *ptr);
19
20 /*=======================================================
21 显示字符串
22 =======================================================*/
23 void ePutstr(Uchar x,Uchar y, Uchar code *ptr) {
24 1 Uchar i=0;
25 1 while (ptr[i]!=SIGN){
26 2 DispOneChar(x+i,y,ptr[i]);
27 2 i++;
28 2 if ( x == 16 ){
29 3 x = 11; y ^= 1;
30 3 }
31 2 }
32 1 }
33
34 /*=======================================================
35 演示一行连续字符串,配合上位程序演示移动字串
36 =======================================================*/
37 /*void Display( Uchar dd ) {
38
39 Uchar i;
40
41 for (i=0;i<16;i++) {
42 DispOneChar(i,1,dd++);
43 dd &= 0x7f;
44 if (dd<32) dd=32;
45 }
46 }*/
47 /*=======================================================
48 显示光标定位
49 =======================================================*/
50 void LocateXY( char posx,char posy) {
51 1
52 1 Uchar temp;
53 1
54 1 temp = posx & 0xf;
55 1 posy &= 0x1;
C51 COMPILER V7.50 LCD1602 07/21/2006 13:18:55 PAGE 2
56 1 if ( posy )temp |= 0x40;
57 1 temp |= 0x80;
58 1 LcdWriteCommand(temp,0);
59 1 }
60
61 /*=======================================================
62 按指定位置显示数出一个字符
63 =======================================================*/
64 void DispOneChar(Uchar x,Uchar y,Uchar Wdata) {
65 1
66 1 LocateXY( x, y ); // 定位显示地址
67 1 LcdWriteData( Wdata ); // 写字符
68 1 }
69
70 /*=======================================================
71 初始化程序, 必须按照产品资料介绍的初始化过程进行
72 =======================================================*/
73 void LcdReset( void ) {
74 1
75 1 LcdWriteCommand( 0x38, 0); // 显示模式设置(不检测忙信号)
76 1 Delay5ms();
77 1 LcdWriteCommand( 0x38, 0); // 共三次
78 1 Delay5ms();
79 1 LcdWriteCommand( 0x38, 0);
80 1 Delay5ms();
81 1
82 1 LcdWriteCommand( 0x38, 1); // 显示模式设置(以后均检测忙信号)
83 1 LcdWriteCommand( 0x08, 1); // 显示关闭
84 1 LcdWriteCommand( 0x01, 1); // 显示清屏
85 1 LcdWriteCommand( 0x06, 1); // 显示光标移动设置
86 1 LcdWriteCommand( 0x0c, 1); // 显示开及光标设置
87 1 }
88
89 /*=======================================================
90 写控制字符子程序: E=1 RS=0 RW=0
91 =======================================================*/
92 void LcdWriteCommand2( Uchar CMD,Uchar AttribC ) {
93 1
94 1 if (AttribC) WaitForEnable(); // 检测忙信号
95 1
96 1 RS = 0; RW = 0; _nop_();
97 1
98 1 DataPort = CMD; _nop_(); // 送控制字子程序
99 1
100 1 Elcm = 1;_nop_();_nop_();Elcm = 0; // 操作允许脉冲信号
101 1 }
102 void LcdWriteCommand(Uchar CMD ,Uchar AttribC){
103 1 if(AttribC)
104 1 while(RLCDCMD>=0x80);
105 1 WLCDCMD=CMD;
106 1 }
107 /*=======================================================
108 当前位置写字符子程序: E =1 RS=1 RW=0
109 =======================================================*/
110 void LcdWriteData2( char dataW ) {
111 1
112 1 WaitForEnable(); // 检测忙信号
113 1
114 1 RS = 1; RW = 0; _nop_();
115 1
116 1 DataPort = dataW; _nop_();
117 1
C51 COMPILER V7.50 LCD1602 07/21/2006 13:18:55 PAGE 3
118 1 Elcm = 1; _nop_(); _nop_(); Elcm = 0; // 操作允许脉冲信号
119 1
120 1 }
121 void LcdWriteData(char dataW){
122 1 while(RLCDCMD>=0x80);
123 1 WLCDDATA=dataW;
124 1 }
125
126 /*=======================================================
127 正常读写操作之前必须检测LCD控制器状态: CS=1 RS=0 RW=1
128 DB7: 0 LCD控制器空闲; 1 LCD控制器忙
129 ========================================================*/
130 void WaitForEnable( void ) {
131 1
132 1 DataPort = 0xff;
133 1
134 1 RS =0; RW = 1; _nop_(); Elcm = 1; _nop_(); _nop_();
135 1
136 1 while( DataPort & Busy );
137 1
138 1 Elcm = 0;
139 1 }
140
141
142
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 241 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 8
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 + -