?? 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 + -