yjdisplayc.lst
来自「郑州远博公司生产的单片机A型实验板原理图及配套试验源程序」· LST 代码 · 共 177 行
LST
177 行
C51 COMPILER V7.20 YJDISPLAYC 02/20/2005 17:42:39 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE YJDISPLAYC
OBJECT MODULE PLACED IN yjdisplayc.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE yjdisplayc.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 <AT89X51.H>
22 #include <Delay.h>
23 #include <stdio.h>
24 #include <Intrins.h>
25 #define uchar unsigned char
26 #define uint unsigned int
27 // 1602连线
28 #define RS P1_0 //数据/命令选择
29 #define RW P1_1 //读/写选择
30 #define Elcm P1_2 //使能信号
31 #define BLA P1_3 //液晶显示屏背光
32
33 #define DataPort P0 // 数据端口
34 #define Busy 0x80
35 void WaitForEnable( void );
36 void LcdWriteData( char dataW );
37 void LcdWriteCommand( uchar CMD,uchar AttribC ) ;
38 void LcdReset( void ) ;
39 void DispOneChar(uchar x,uchar y,uchar Wdata) ;
40 void ePutstr(uchar x,uchar y, uchar code *ptr) ;
41 code char examp[]="Wellcom to Ybkj 0371-6949037";
42
43
44 void main(void) {
45 1 DelayMs(2000); //延时使液晶屏复位
46 1 BLA=0; //打开液晶显示屏背光
47 1 LcdReset(); //液晶屏初始化
48 1 ePutstr(0,0,examp); // 液晶屏显示一个预定字符串
49 1 while(1); //无限循环。
50 1 }
51
52
53 /*=======================================================
54 液晶屏上显示字符串
55 =======================================================*/
C51 COMPILER V7.20 YJDISPLAYC 02/20/2005 17:42:39 PAGE 2
56 void ePutstr(uchar x,uchar y, uchar code *ptr) {
57 1 uchar i,l=0;
58 1 while (*ptr++ >0){l++;}; //统计字符的个数
59 1 ptr=ptr-(l+1); //使指针重新指向首个字符
60 1 for (i=0;i<l;i++) { DispOneChar(x++,y,*ptr++);
61 2 if ( x == 31 ) { x = 0; y ^= 0; }
62 2 }
63 1 }
64
65
66 /*=======================================================
67 显示光标定位
68 =======================================================*/
69 void Disp_XY( char posx,char posy) {
70 1
71 1 uchar temp;
72 1
73 1 temp = posx & 0x0f;
74 1 posy &= 0x1;
75 1 if ( posx>15 ) temp |= 0x40;
76 1 if (posy==1) temp |=0x40;
77 1 temp |= 0x80;
78 1 LcdWriteCommand(temp,0);
79 1 }
80
81 /*=======================================================
82 按指定位置显示数出一个字符
83 =======================================================*/
84 void DispOneChar(uchar x,uchar y,uchar Wdata) {
85 1
86 1 Disp_XY( x, y ); // 定位显示地址
87 1 LcdWriteData( Wdata ); // 写字符
88 1 }
89
90 /*=======================================================
91 初始化程序, 必须按照产品资料介绍的初始化过程进行
92 =======================================================*/
93 void LcdReset( void ) {
94 1
95 1 LcdWriteCommand( 0x38, 0); // 显示模式设置(不检测忙信号)
96 1 DelayMs(10);
97 1 LcdWriteCommand( 0x38, 0); // 共三次
98 1 DelayMs(10);
99 1 LcdWriteCommand( 0x38, 0);
100 1 DelayMs(10);
101 1
102 1 LcdWriteCommand( 0x38, 1); // 显示模式设置(以后均检测忙信号)
103 1 LcdWriteCommand( 0x08, 1); // 显示关闭
104 1 LcdWriteCommand( 0x01, 1); // 显示清屏
105 1 LcdWriteCommand( 0x06, 1); // 显示光标移动设置
106 1 LcdWriteCommand( 0x0c, 1); // 显示开及光标设置
107 1 }
108
109 /*=======================================================
110 写控制字符子程序: E=1 RS=0 RW=0
111 =======================================================*/
112 void LcdWriteCommand( uchar CMD,uchar AttribC ) {
113 1
114 1 if (AttribC) WaitForEnable(); // 检测忙信号?
115 1 RS=0; RW=0; _nop_();
116 1 DataPort=CMD; _nop_();
117 1 // 送控制字子程序
C51 COMPILER V7.20 YJDISPLAYC 02/20/2005 17:42:39 PAGE 3
118 1 Elcm=1;_nop_();_nop_();Elcm=0; // 操作允许脉冲信号
119 1 }
120
121 /*=======================================================
122 当前位置写字符子程序: E =1 RS=1 RW=0
123 =======================================================*/
124 void LcdWriteData( char dataW ) {
125 1
126 1 WaitForEnable();
127 1 // 检测忙信号
128 1
129 1 RS=1; RW=0; _nop_();
130 1
131 1 DataPort=dataW; _nop_();
132 1
133 1 Elcm=1; _nop_(); _nop_(); Elcm=0; // 操作允许脉冲信号
134 1
135 1 }
136
137 /*=======================================================
138 正常读写操作之前必须检测LCD控制器状态: CS=1 RS=0 RW=1
139 DB7: 0 LCD控制器空闲; 1 LCD控制器忙
140 ========================================================*/
141 void WaitForEnable( void ) {
142 1
143 1 DataPort = 0xff;
144 1
145 1 RS=0; RW=1; _nop_(); Elcm=1; _nop_(); _nop_();
146 1
147 1 while( DataPort & Busy );
148 1 Elcm=0;
149 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 374 ----
CONSTANT SIZE = 30 ----
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 + =
减小字号Ctrl + -
显示快捷键?