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