yjxs.lst
来自「郑州远博公司生产的单片机B型实验板电路原理图及配套源程序代码」· LST 代码 · 共 151 行
LST
151 行
C51 COMPILER V7.20 YJXS 04/01/2005 13:34:35 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE YJXS
OBJECT MODULE PLACED IN yjxs.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE yjxs.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************
2 YB-51-B液晶屏显示模块(需要参看LCD1602液晶屏的资料,配套光盘上有)
3 来源: 郑州远博科技 王兴民
4 0371-66949037 0371-67256036 13949105551
5 ***************************************************************************/
6
7 #include<config.h>
8 #define RS1602 P1_0 //数据/命令选择
9 #define RW1602 P1_1 //读/写选择
10 #define EL1602 P1_2 //使能信号
11
12 #define DataPort P0 // 数据端口
13 #define Busy 0x80
14
15
16 /*=======================================================
17 正常读写操作之前必须检测LCD控制器状态: CS=1 RS1602=0 RW1602=1
18 DB7: 0 LCD控制器空闲; 1 LCD控制器忙
19 ========================================================*/
20 void WaitForEnable( void ) {
21 1
22 1 DataPort = 0xff;
23 1
24 1 RS1602=0; RW1602=1; _nop_(); EL1602=1; _nop_(); _nop_();
25 1
26 1 while( DataPort & Busy );
27 1 EL1602=0;
28 1 }
29
30
31 /*=======================================================
32 写控制字符子程序: E=1 RS1602=0 RW1602=0
33 =======================================================*/
34 void LcdWriteCommand( Uchar CMD,Uchar AttribC ) { //送控制字符子程序
35 1
36 1 if (AttribC) WaitForEnable(); // 检测忙信号?
37 1 RS1602=0; RW1602=0; _nop_();
38 1 DataPort=CMD; _nop_();
39 1 EL1602=1;_nop_();_nop_();EL1602=0; // 操作允许脉冲信号
40 1 }
41
42
43 /*=======================================================
44 当前位置写字符子程序: E =1 RS1602=1 RW1602=0
45 =======================================================*/
46 void LcdWriteData( char dataW ) {
47 1
48 1 WaitForEnable(); // 检测忙信号
49 1
50 1 RS1602=1; RW1602=0; _nop_();
51 1
52 1 DataPort=dataW; _nop_();
53 1
54 1 EL1602=1; _nop_(); _nop_(); EL1602=0; // 操作允许脉冲信号
55 1
C51 COMPILER V7.20 YJXS 04/01/2005 13:34:35 PAGE 2
56 1 }
57
58
59 /*=======================================================
60 初始化程序, 必须按照产品资料介绍的初始化过程进行
61 =======================================================*/
62 void Lcdreset( void ) {
63 1
64 1 LcdWriteCommand( 0x38, 0); // 显示模式设置(不检测忙信号)
65 1 Delayms(10);
66 1 LcdWriteCommand( 0x38, 0); // 共三次
67 1 Delayms(10);
68 1 LcdWriteCommand( 0x38, 0);
69 1 Delayms(10);
70 1
71 1 LcdWriteCommand( 0x38, 1); // 显示模式设置(以后均检测忙信号)
72 1 LcdWriteCommand( 0x08, 1); // 显示关闭
73 1 LcdWriteCommand( 0x01, 1); // 显示清屏
74 1 LcdWriteCommand( 0x06, 1); // 显示光标移动设置
75 1 LcdWriteCommand( 0x0c, 1); // 显示开及光标设置
76 1 }
77
78
79 /*=======================================================
80 显示光标定位(X表示行 ,Y表示列)
81 =======================================================*/
82 void Disp_XY( char posx,char posy) {
83 1
84 1 Uchar temp;
85 1
86 1 temp = posy & 0x0f;
87 1 posx &= 0x1;
88 1 if ( posy>15 ) temp |= 0x40;
89 1 if (posx==1) temp |=0x40;
90 1 temp |= 0x80;
91 1 LcdWriteCommand(temp,0);
92 1 }
93
94 /*=======================================================
95 按指定位置显示数出一个字符
96 =======================================================*/
97 void Disponechar(Uchar x,Uchar y,Uchar Wdata) {
98 1
99 1 Disp_XY( x, y ); // 定位显示地址
100 1 LcdWriteData( Wdata ); // 写字符
101 1 }
102
103 /*=======================================================
104 液晶屏上显示字符串
105 =======================================================*/
106 void Eputstr(Uchar x,Uchar y, Uchar code *ptr) {
107 1 Uchar i,l=0;
108 1 while (*ptr++ >0){l++;}; //统计字符的个数(字符串数组的最后一位是‘\0')
109 1 ptr=ptr-(l+1); //使指针重新指向首个字符
110 1 for (i=0;i<l;i++) { Disponechar(x,y++,*ptr++);
111 2 if ( y == 31 ) { y = 0; x ^= 0; }
112 2 }
113 1 }
114
115
116
117
C51 COMPILER V7.20 YJXS 04/01/2005 13:34:35 PAGE 3
118
119
120
121
122
123
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 269 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 4
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?