📄 1602.lst
字号:
C51 COMPILER V8.02 1602 12/11/2008 09:13:51 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 1602
OBJECT MODULE PLACED IN 1602.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 1602.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include"reg51.h"
2 #define uchar unsigned char
3 #define uint unsigned int
4 sbit LCM_RW=P3^3; /*定义引脚*/
5 sbit LCM_RS=P3^2;
6 sbit LCM_E=P3^4 ;
7 #define LCM_Data P0
8 #define Busy 0x80 /*用于检测LCM状态字中的Busy标识*/
9
10 void WriteDataLCM(uchar WDLCM);
11 void WriteCommandLCM(uchar WCLCM,BuysC);
12 uchar ReadDataLCM(void);
13 uchar ReadStatusLCM(void);
14 void LCMInit(void);
15 void DisplayOneChar(uchar X, uchar Y, uchar DData);
16 void DisplayStrChar(uchar X, uchar Y, uchar *DData);
17 void Delay5Ms(void);
18 void Delay400Ms(void);
19
20 uchar code cdle_net[] = {"KP-51PRO V2.0"};
21 uchar code email[] = {"cany_999@163.com"};
22 void main(void)
23 {
24 1 Delay400Ms(); /*启动等待,等LCM讲入工作状态*/
25 1 LCMInit(); /*LCM初始化*/
26 1 Delay5Ms(); /*延时片刻(可不要)*/
27 1 DisplayStrChar(2, 0, cdle_net);
28 1 DisplayStrChar(0, 1, email);
29 1 while(1);
30 1 }
31 /*写数据*/
32 void WriteDataLCM(uchar WDLCM)
33 {
34 1 ReadStatusLCM(); /*检测忙*/
35 1 LCM_Data = WDLCM;
36 1 LCM_RS = 1;
37 1 LCM_RW = 0;
38 1 LCM_E = 0; /*若晶振速度太高可以在这后加小的延时*/
39 1 LCM_E = 0; /*延时*/
40 1 LCM_E = 1;
41 1 }
42 /*写指令*/
43 void WriteCommandLCM(uchar WCLCM,BuysC) /*BuysC为0时忽略忙检测*/
44 {
45 1 if (BuysC) ReadStatusLCM(); /*根据需要检测忙*/
46 1 LCM_Data = WCLCM;
47 1 LCM_RS = 0;
48 1 LCM_RW = 0;
49 1 LCM_E = 0;
50 1 LCM_E = 0;
51 1 LCM_E = 1;
52 1 }
53 /*读数据*/
54 uchar ReadDataLCM(void)
55 {
C51 COMPILER V8.02 1602 12/11/2008 09:13:51 PAGE 2
56 1 LCM_RS = 1;
57 1 LCM_RW = 1;
58 1 LCM_E = 0;
59 1 LCM_E = 0;
60 1 LCM_E = 1;
61 1 return(LCM_Data);
62 1 }
63 /*读状态*/
64 uchar ReadStatusLCM(void)
65 {
66 1 LCM_Data = 0xFF;
67 1 LCM_RS=0;
68 1 LCM_RW = 1;
69 1 LCM_E = 0;
70 1 LCM_E = 0;
71 1 LCM_E = 1;
72 1 while (LCM_Data & Busy); /*检测忙信号*/
73 1 return(LCM_Data);
74 1 }
75
76 void LCMInit(void) /*LCM初始化*/
77 {
78 1 LCM_Data = 0;
79 1 WriteCommandLCM(0x38,0); /*三次显示模式设置,不检测忙信号*/
80 1 Delay5Ms();
81 1 WriteCommandLCM(0x38,0);
82 1 Delay5Ms();
83 1 WriteCommandLCM(0x38,0);
84 1 Delay5Ms();
85 1
86 1 WriteCommandLCM(0x38,1); /*显示模式设置,开始要求每次检测忙信号*/
87 1 WriteCommandLCM(0x08,1); /*关闭显示*/
88 1 WriteCommandLCM(0x01,1); /*显示清屏*/
89 1 WriteCommandLCM(0x06,1); /* 显示光标移动设置*/
90 1 WriteCommandLCM(0x0C,1); /*显示开及光标设置*/
91 1
92 1 } /*按指定位置显示一个字符*/
93 void DisplayOneChar(uchar X, uchar Y, uchar DData)
94 {
95 1 Y &= 0x1;
96 1 X &= 0xF; /*限制X不能大于15,Y不能大于1*/
97 1 if (Y) X |= 0x40; /*当要显示第二行时地址码+0x40;*/
98 1 X |= 0x80; /*算出指令码*/
99 1 WriteCommandLCM(X, 0); /*这里不检测忙信号,发送地址码*/
100 1 WriteDataLCM(DData);
101 1 }
102
103 /*按指定位置显示一串字符*/
104 void DisplayStrChar(uchar X, uchar Y, uchar *DData)
105 {
106 1 uchar ListLength;
107 1 ListLength = 0;
108 1 Y &= 0x1;
109 1 X &= 0xF; /*限制X不能大于15,Y不能大于1*/
110 1 while (DData[ListLength]>0) /*若到达字串尾则退出*/
111 1 {
112 2 if (X <= 0xF) /*X坐标应小于0xF*/
113 2 {
114 3 DisplayOneChar(X, Y, DData[ListLength]); /*显示单个字符*/
115 3 ListLength++;
116 3 X++;
117 3 }
C51 COMPILER V8.02 1602 12/11/2008 09:13:51 PAGE 3
118 2 }
119 1 }
120 /*5ms延时*/
121 void Delay5Ms(void)
122 {
123 1 uint TempCyc = 5552;
124 1 while(TempCyc--);
125 1 }
126
127 /*400ms延时*/
128 void Delay400Ms(void)
129 {
130 1 uchar TempCycA = 5;
131 1 uint TempCycB;
132 1 while(TempCycA--)
133 1 {
134 2 TempCycB=7269;
135 2 while(TempCycB--);
136 2 }
137 1 }
138
139
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 318 ----
CONSTANT SIZE = 31 ----
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 + -