?? lcd1.lst
字號:
C51 COMPILER V8.08 LCD1 11/22/2007 16:36:54 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE LCD1
OBJECT MODULE PLACED IN LCD1.OBJ
COMPILER INVOKED BY: c:\SiLabs\MCU\IDEfiles\C51\BIN\C51.EXE LCD1.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h> //包含常用頭文件
2 #include<stdio.h>
3 #include<intrins.h>
4 #include<absacc.h>
5 #define uchar unsigned char //定義常用數據類型
6 int cnt;
7 void LCD_INIT(void); //LCD的初始化函數
8 void LCD_DISPLAY_STR(uchar x,uchar y,char *DATA);//在指定的位置顯示字符串
9 void LCD_CLR(uchar y); //清除LCD指定的行
10 void LCD_SEND_COMMAND(uchar COMMAND); //向LCD發送命令
11 void LCD_SEND_DATA(uchar DATA); //向LCD發送數據
12 void LCD_WAIT(void); //檢查LCD空閑
13 uchar LCD_GET_FLAG(void); //檢查LCD狀態
14 /*定義所要顯示的數據*/
15 char code PLAY_1[]="Finished time:";
16 char code PLAY_2[]="2007.07.23.21:16";
17 char code PLAY_3[]="desiger:";
18 char code PLAY_4[]="Li Xijang";
19 char code PLAY_5[]="When I finish it";
20 char code PLAY_6[]="I very happy!";
21 /*定義LCD控制字*/
22 #define LCD_MODE 0x3C /* 接口數據8位,顯示2行,字體為1號 */
23 #define LCD_NO_FLASH 0x0C /* 屏幕顯示開,無光標 */
24 #define LCD_HIDE 0x08 /* 屏幕顯示關 */
25 #define LCD_FLASH 0x0D /* 屏幕顯示開,并打開閃爍光標 */
26 #define LCD_SHIFT 0x07 /* 模塊數據輸入為增量方式,顯示內容移動 */
27 #define LCD_NO_SHIFT 0x06 /* 模塊數據輸入為增量方式,顯示光標移動 */
28 #define LCD_SH 0x14 /* 移動光標及整體顯示 */
29 #define LCD_LINE1 0x80 /*第一行DDRAM起始地址*/
30 #define LCD_LINE2 0xc0 /*第二行DDRAM起始地址*/
31 #define SEND_IN XBYTE[0xff00] /*定義LCD的實際地址*/
32 sbit LCD_RS=P3^4; //定義LCD的RS控制位
33 sbit LCD_RW=P3^5; //定義LCD的RW控制位
34 //*************************************************
35 //LCD顯示字符串的主程序
36 //利用中斷間隔循環顯示
37 //
38 //*************************************************
39 main()
40 {
41 1 TMOD=0x02; //設置中斷T0工作于方式2(自動裝載)
42 1 TH0=0x06;
43 1 TL0=0X06;
44 1 TR0=1;
45 1 ET0=1;
46 1 EA=1;
47 1 LCD_INIT(); //初始化LCD
48 1 LCD_DISPLAY_STR(1,1,PLAY_1); //在第一行顯示第一行字符串
49 1 LCD_DISPLAY_STR(1,2,PLAY_2); //在第二行顯示第一行字符串
50 1 while(1); //等待中斷
51 1 }
52 void timer0(void) interrupt 1 using 0 //進入中斷T0函數
53 {
54 1 cnt++;
55 1 if(cnt==4000) //使蟒顯示停留1S
C51 COMPILER V8.08 LCD1 11/22/2007 16:36:54 PAGE 2
56 1 { //清除LCD第一行
57 2 LCD_CLR(1); //清除LCD第二行
58 2 LCD_CLR(2);
59 2 LCD_DISPLAY_STR(1,1,PLAY_3); //在第一行顯示第三行字符串
60 2 LCD_DISPLAY_STR(1,2,PLAY_4); //在第一行顯示第四行字符串
61 2 }
62 1 if(cnt==8000)
63 1 {
64 2 LCD_CLR(1); //清除LCD第一行
65 2 LCD_CLR(2); //清除LCD第二行
66 2 LCD_DISPLAY_STR(1,1,PLAY_5); //在第一行顯示第五行字符串
67 2 LCD_DISPLAY_STR(1,2,PLAY_6); //在第一行顯示第六行字符串
68 2 }
69 1 if(cnt==12000)
70 1 {
71 2 cnt=0;
72 2 LCD_CLR(1); //清除LCD第一行
73 2 LCD_CLR(2); //清除LCD第二行
74 2 LCD_DISPLAY_STR(1,1,PLAY_1);
75 2 LCD_DISPLAY_STR(1,2,PLAY_2);
76 2 }
77 1 }
78 //*************************************************
79 //函數功能:LCD初始化
80 //輸入變量:無
81 //輸出變量:無
82 //調用模塊:LCD_SEND_COMMAND(),LCD_CLR()
83 //*************************************************
84 void LCD_INIT(void)
85 {
86 1 LCD_SEND_COMMAND(LCD_MODE); //設置工作方式
87 1 LCD_SEND_COMMAND(LCD_NO_FLASH); //設置顯示方式
88 1 LCD_SEND_COMMAND(LCD_NO_SHIFT); //設置光標畫面滾動方式
89 1 LCD_SEND_COMMAND(LCD_SH); //設置輸入方式
90 1 LCD_CLR(1); //清除LCD第一行
91 1 LCD_CLR(2); //清除LCD第二行
92 1 }
93 //*************************************************
94 //函數功能:清除LCD指定行
95 //輸入變量:y
96 //輸出變量:無
97 //調用模塊:LCD_SEND_COMMAND(),LCD_SEND_DATA()
98 //*************************************************
99 void LCD_CLR(uchar y)
100 {
101 1 uchar i;
102 1 i=0;
103 1 if(y==1)
104 1 {
105 2 LCD_SEND_COMMAND(LCD_LINE1); //發送命令使LCD指向第一行
106 2 i=16;
107 2 }
108 1 if(y==2)
109 1 {
110 2 LCD_SEND_COMMAND(LCD_LINE2); //發送命令使LCD指向第二行
111 2 i=16;
112 2 }
113 1 if(i!=0)
114 1 {
115 2 do
116 2 {
117 3 LCD_SEND_DATA(' '); //讓LCD的相應位置顯示空格
C51 COMPILER V8.08 LCD1 11/22/2007 16:36:54 PAGE 3
118 3 }while(--i!=0);
119 2 }
120 1 }
121 //*************************************************
122 //函數功能:向LCD發送命令
123 //輸入變量:COMMAND
124 //輸出變量:無
125 //調用模塊:LCD_WAIT()
126 //*************************************************
127 void LCD_SEND_COMMAND(uchar COMMAND)
128 {
129 1 LCD_WAIT(); //等待空閑
130 1 LCD_RS=0; //命令方式
131 1 LCD_RW=0; //寫方式
132 1 SEND_IN=COMMAND;//寫實際的命令到LCD
133 1 }
134 //*************************************************
135 //函數功能:向LCD發送數據
136 //輸入變量:DATA
137 //輸出變量:無
138 //調用模塊:LCD_WAIT()
139 //*************************************************
140 void LCD_SEND_DATA(uchar DATA)
141 {
142 1 LCD_WAIT(); //等待空閑
143 1 LCD_RS=1; //數據方式
144 1 LCD_RW=0; //寫方式
145 1 SEND_IN=DATA;//寫實際的數據到LCD
146 1 }
147 //*************************************************
148 //函數功能:等待LCD空閑
149 //輸入變量:無
150 //輸出變量:無
151 //調用模塊:LCD_GET_FLAG()
152 //*************************************************
153 void LCD_WAIT(void)
154 {
155 1 uchar i;
156 1 i=1000; //定義等待時間,可以防止由于LCD損壞而使程序死循環
157 1 do
158 1 {
159 2 if((LCD_GET_FLAG()&0x80)==0) //判斷BF是否為0
160 2 {
161 3 break;
162 3 }
163 2 }while(--i!=0);
164 1
165 1 }
166 //*************************************************
167 //函數功能:檢查LCD狀態
168 //輸入變量:無
169 //輸出變量:LCD顯示的當前狀態
170 //調用模塊:無
171 //*************************************************
172 uchar LCD_GET_FLAG(void)
173 {
174 1 LCD_RS=0;
175 1 LCD_RW=1;
176 1 return(SEND_IN);
177 1 }
178 //*************************************************
179 //函數功能:檢查LCD狀態
C51 COMPILER V8.08 LCD1 11/22/2007 16:36:54 PAGE 4
180 //輸入變量:無
181 //輸出變量:LCD顯示的當前狀態
182 //調用模塊:無
183 //*************************************************
184 void LCD_DISPLAY_STR(uchar x,uchar y,char *DATA)
185 {
186 1 if(y==1)
187 1 {
188 2 if(x<(16+1)) //判斷顯示位置是否超出第一行
189 2 {
190 3 LCD_SEND_COMMAND(LCD_LINE1-1+x);//發送顯示位置命令
191 3 for(;x<(16+1)&&*DATA!='\0';x++)
192 3 {
193 4 LCD_SEND_DATA(*DATA++); //發送數據
194 4 }
195 3 if(*DATA!='\0') //判斷是否發送完畢
196 3 {
197 4 x=1;
198 4 y=2; //未完畢轉到第二行顯示
199 4 }
200 3 }
201 2 }
202 1 if(y==2)
203 1 {
204 2 LCD_SEND_COMMAND(LCD_LINE2-1+x);
205 2 for(;x<(16+1)&&*DATA!='\0';x++)
206 2 {
207 3 LCD_SEND_DATA(*DATA++);
208 3 }
209 2 }
210 1 }
211
212
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 469 ----
CONSTANT SIZE = 82 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 10
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 + -