📄 yj.lst
字号:
C51 COMPILER V7.20 YJ 04/11/2007 06:09:09 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE YJ
OBJECT MODULE PLACED IN yj.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE yj.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*======YB-51-A单片机通用实验板液晶屏显示演示程序===========================*/
2 /*======程序来源:远博科技 0371-6949037 13949105551 13603453895=======================*/
3 /*===================================================================
4
5 [注]:AT89C51的晶振频率为11.0592MHz
6 ====================================================================*/
7
8 /* ACM1602A (16x2)接线图
9 =====================================================================
10 连接线图: ACM-------51 ACM-------51 ACM--------51
11 DB0-----P0.0 DB4-----P0.4 RS-------P1_0
12 DB1-----P0.1 DB5-----P0.5 RW-------P1_1
13 DB2-----P0.2 DB6-----P0.6 E--------P1_2
14 DB3-----P0.3 DB7-----P0.7 BLA------P1_3
15
16 VLCD接1K电阻到GND
17
18 ====================================================================*/
19 /*阅读本程序之前,请参考光盘上带的LCD1602的工作原理(长沙太阳人科技公司提供)*/
20
21 #include <REGX51.H>
22
23 #include <Delay.h>
24 #include <stdio.h>
25 #include <Intrins.h>
26 #define uchar unsigned char
27 #define uint unsigned int
28 // 1602连线
29 #define RS P1_0 //数据/命令选择
30 #define RW P1_1 //读/写选择
31 #define Elcm P1_2 //使能信号
32 #define BLA P1_3 //液晶显示屏背光
33
34 #define DataPort P0 // 数据端口
35 #define Busy 0x80
36 void WaitForEnable( void );
37 void LcdWriteData( char dataW );
38 void LcdWriteCommand( uchar CMD,uchar AttribC ) ;
39 void LcdReset( void ) ;
40 void DispOneChar(uchar x,uchar y,uchar Wdata) ;
41 void ePutstr(uchar x,uchar y, uchar code *ptr) ;
42 //code char examp[]="Wellcom to Ybkj 0371-6949037";
43
44
45 //void main(void) {
46 // DelayMs(2000); //延时使液晶屏复位
47 // BLA=0; //打开液晶显示屏背光
48 // LcdReset(); //液晶屏初始化
49 // ePutstr(0,0,examp); // 液晶屏显示一个预定字符串
50 // while(1); //无限循环。
51 // }
52 //
53
54 /*=======================================================
55 液晶屏上显示字符串
C51 COMPILER V7.20 YJ 04/11/2007 06:09:09 PAGE 2
56 =======================================================*/
57 void ePutstr(uchar x,uchar y, uchar code *ptr) {
58 1 uchar i,l=0;
59 1 while (*ptr++ >0){l++;}; //统计字符的个数
60 1 ptr=ptr-(l+1); //使指针重新指向首个字符
61 1 for (i=0;i<l;i++) { DispOneChar(x++,y,*ptr++);
62 2 if ( x == 31 ) { x = 0; y ^= 0; }
63 2 }
64 1 }
65
66
67 /*=======================================================
68 显示光标定位
69 =======================================================*/
70 void Disp_XY( char posx,char posy) {
71 1
72 1 uchar temp;
73 1
74 1 temp = posx & 0x0f;
75 1 posy &= 0x1;
76 1 if ( posx>15 ) temp |= 0x40;
77 1 if (posy==1) temp |=0x40;
78 1 temp |= 0x80;
79 1 LcdWriteCommand(temp,0);
80 1 }
81
82 /*=======================================================
83 按指定位置显示数出一个字符
84 =======================================================*/
85 void DispOneChar(uchar x,uchar y,uchar Wdata) {
86 1
87 1 Disp_XY( x, y ); // 定位显示地址
88 1 LcdWriteData( Wdata ); // 写字符
89 1 }
90
91 /*=======================================================
92 初始化程序, 必须按照产品资料介绍的初始化过程进行
93 =======================================================*/
94 void LcdReset( void ) {
95 1
96 1 LcdWriteCommand( 0x38, 0); // 显示模式设置(不检测忙信号)
97 1 DelayMs(10);
98 1 LcdWriteCommand( 0x38, 0); // 共三次
99 1 DelayMs(10);
100 1 LcdWriteCommand( 0x38, 0);
101 1 DelayMs(10);
102 1
103 1 LcdWriteCommand( 0x38, 1); // 显示模式设置(以后均检测忙信号)
104 1 LcdWriteCommand( 0x08, 1); // 显示关闭
105 1 LcdWriteCommand( 0x01, 1); // 显示清屏
106 1 LcdWriteCommand( 0x06, 1); // 显示光标移动设置
107 1 LcdWriteCommand( 0x0c, 1); // 显示开及光标设置
108 1 }
109
110 /*=======================================================
111 写控制字符子程序: E=1 RS=0 RW=0
112 =======================================================*/
113 void LcdWriteCommand( uchar CMD,uchar AttribC ) {
114 1
115 1 if (AttribC) WaitForEnable(); // 检测忙信号?
116 1 RS=0; RW=0; _nop_();
117 1 DataPort=CMD; _nop_();
C51 COMPILER V7.20 YJ 04/11/2007 06:09:09 PAGE 3
118 1 // 送控制字子程序
119 1 Elcm=1;_nop_();_nop_();Elcm=0; // 操作允许脉冲信号
120 1 }
121
122 /*=======================================================
123 当前位置写字符子程序: E =1 RS=1 RW=0
124 =======================================================*/
125 void LcdWriteData( char dataW ) {
126 1
127 1 WaitForEnable();
128 1 // 检测忙信号
129 1
130 1 RS=1; RW=0; _nop_();
131 1
132 1 DataPort=dataW; _nop_();
133 1
134 1 Elcm=1; _nop_(); _nop_(); Elcm=0; // 操作允许脉冲信号
135 1
136 1 }
137
138 /*=======================================================
139 正常读写操作之前必须检测LCD控制器状态: CS=1 RS=0 RW=1
140 DB7: 0 LCD控制器空闲; 1 LCD控制器忙
141 ========================================================*/
142 void WaitForEnable( void ) {
143 1
144 1 DataPort = 0xff;
145 1
146 1 RS=0; RW=1; _nop_(); Elcm=1; _nop_(); _nop_();
147 1
148 1 while( DataPort & Busy );
149 1 Elcm=0;
150 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 350 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 9
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 + -