📄 yjxs.lst
字号:
C51 COMPILER V7.20 YJXS 06/03/2005 17:25:53 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 液晶屏显示模块
3 ********************************************************/
4
5 #include<config.h>
6 #define RS1602 P1_0 //数据/命令选择
7 #define RW1602 P1_1 //读/写选择
8 #define EL1602 P1_2 //使能信号
9
10 #define DataPort P0 // 数据端口
11 #define Busy 0x80
12
13
14 /*=======================================================
15 正常读写操作之前必须检测LCD控制器状态: CS=1 RS1602=0 RW1602=1
16 DB7: 0 LCD控制器空闲; 1 LCD控制器忙
17 ========================================================*/
18 void WaitForEnable( void ) {
19 1
20 1 DataPort = 0xff;
21 1
22 1 RS1602=0; RW1602=1; _nop_(); EL1602=1; _nop_(); _nop_();
23 1
24 1 while( DataPort & Busy );
25 1 EL1602=0;
26 1 }
27
28
29 /*=======================================================
30 写控制字符子程序: E=1 RS1602=0 RW1602=0
31 =======================================================*/
32 void LcdWriteCommand( Uchar CMD,Uchar AttribC ) { //送控制字符子程序
33 1
34 1 if (AttribC) WaitForEnable(); // 检测忙信号?
35 1 RS1602=0; RW1602=0; _nop_();
36 1 DataPort=CMD; _nop_();
37 1 EL1602=1;_nop_();_nop_();EL1602=0; // 操作允许脉冲信号
38 1 }
39
40
41 /*=======================================================
42 当前位置写字符子程序: E =1 RS1602=1 RW1602=0
43 =======================================================*/
44 void LcdWriteData( char dataW ) {
45 1
46 1 WaitForEnable(); // 检测忙信号
47 1
48 1 RS1602=1; RW1602=0; _nop_();
49 1
50 1 DataPort=dataW; _nop_();
51 1
52 1 EL1602=1; _nop_(); _nop_(); EL1602=0; // 操作允许脉冲信号
53 1
54 1 }
55
C51 COMPILER V7.20 YJXS 06/03/2005 17:25:53 PAGE 2
56
57 /*=======================================================
58 初始化程序, 必须按照产品资料介绍的初始化过程进行
59 =======================================================*/
60 void Lcdreset( void ) {
61 1
62 1 LcdWriteCommand( 0x38, 0); // 显示模式设置(不检测忙信号)
63 1 Delayms(10);
64 1 LcdWriteCommand( 0x38, 0); // 共三次
65 1 Delayms(10);
66 1 LcdWriteCommand( 0x38, 0);
67 1 Delayms(10);
68 1
69 1 LcdWriteCommand( 0x38, 1); // 显示模式设置(以后均检测忙信号)
70 1 LcdWriteCommand( 0x08, 1); // 显示关闭
71 1 LcdWriteCommand( 0x01, 1); // 显示清屏
72 1 LcdWriteCommand( 0x06, 1); // 显示光标移动设置
73 1 LcdWriteCommand( 0x0c, 1); // 显示开及光标设置
74 1 }
75
76
77 /*=======================================================
78 显示光标定位(X表示行 ,Y表示列)
79 =======================================================*/
80 void Disp_XY( char posx,char posy) {
81 1
82 1 Uchar temp;
83 1
84 1 temp = posy & 0x0f;
85 1 posx &= 0x1;
86 1 if ( posy>15 ) temp |= 0x40;
87 1 if (posx==1) temp |=0x40;
88 1 temp |= 0x80;
89 1 LcdWriteCommand(temp,0);
90 1 }
91
92 /*=======================================================
93 按指定位置显示数出一个字符
94 =======================================================*/
95 void Disponechar(Uchar x,Uchar y,Uchar Wdata) {
96 1
97 1 Disp_XY( x, y ); // 定位显示地址
98 1 LcdWriteData( Wdata ); // 写字符
99 1 }
100
101 /*=======================================================
102 液晶屏上显示字符串
103 =======================================================*/
104 void Eputstr(Uchar x,Uchar y, Uchar code *ptr) {
105 1 Uchar i,l=0;
106 1 while (*ptr++ >0){l++;}; //统计字符的个数(字符串数组的最后一位是‘\0')
107 1 ptr=ptr-(l+1); //使指针重新指向首个字符
108 1 for (i=0;i<l;i++) { Disponechar(x,y++,*ptr++);
109 2 if ( y == 31 ) { y = 0; x ^= 0; }
110 2 }
111 1 }
112
113
114
115
116
117
C51 COMPILER V7.20 YJXS 06/03/2005 17:25:53 PAGE 3
118
119
120
121
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -