?? yk1602.lst
字號:
C51 COMPILER V7.07 YK1602 09/08/2006 10:12:13 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE YK1602
OBJECT MODULE PLACED IN yk1602.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE yk1602.c DEBUG OBJECTEXTEND
stmt level source
1 //遙控帶液晶顯示程序,已經(jīng)調(diào)試完畢2002/10/30
2 //并可顯示時(shí)鐘
3 //若遙控接收不到,修改脈寬值即可
4 //
5 //-----------------------------------------------
6 //http://www.mcu123.com
7 //Email:ycxms88@163.com
8 //作者:Mingtree
9 //-----------------------------------------------
10 #include <reg51.h>
11 #include<intrins.h>
12 #include<absacc.h>
13
14 //變量類型標(biāo)識的宏定義,
15 #define uchar unsigned char
16 #define uint unsigned int
17
18 #define DEDA 20
19 unsigned char deda=0;
20
21 // 1602 控制引腳定義,
22 sbit RS = P0^0;
23 sbit RW = P0^1;
24 sbit Elcm =P0^2;
25 #define DATAPORT P1 // 數(shù)據(jù)端口
26 #define busy 0x80 //用于檢查寫忙信號
27
28
29 //外鍵控制(本程序未用,現(xiàn)在用遙控控制)
30 sbit act=P2^1; /*加鍵*/
31 sbit deb=P2^0; /*減鍵*/
32 sbit cong=P2^2; /*功能鍵*/
33
34
35
36 char data led6[8];/*六位顯示緩沖區(qū)*/
37
38 code char love[]="I LOVE YOU ";
39
40 code char time[]="0123456789ABCDEF:MinHour ";
41
42 unsigned char hour=0,min=0,sec=0;
43 bit menu=0;
44 bit up=0;
45 bit dw=0;
46 #define temp1 DBYTE[0x50]
47 #define temp2 DBYTE[0x51]
48 #define temp3 DBYTE[0x52]
49 #define temp4 DBYTE[0x53]
50 #define temp5 DBYTE[0x54]
51 //遙控
52 unsigned char yt; //中斷次數(shù)
53 bit start=0; //起碼標(biāo)志
54 bit h=0; //解碼標(biāo)志
55 unsigned char da=0; //暫存數(shù)據(jù)
C51 COMPILER V7.07 YK1602 09/08/2006 10:12:13 PAGE 2
56 unsigned char gt=0,gv=0; //
57
58 //
59 void delay400ms(void);
60 void delay5ms(void);
61 void lcdreset( void ); //LCD RESET
62 void WaitForEnable( void ); //忙信號檢測
63
64 void lcdwrite_c( uchar CMD,uchar AttribC );//
65 void DispOneChar(uchar x,uchar y,uchar Wdata);//顯示一個(gè)字符
66 void LocateXY( char posx,char posy);
67 void LcdWrite_D( char dataW ) ; //寫一個(gè)數(shù)據(jù)
68 void yk(void);
69 /*鍵盤檢測*/
70 void acct_1(void);
71 unsigned char conh=0; /*功能鍵鍵值*/
72 void key_hit(unsigned char add3);
73 void delay(void);
74
75 /*定時(shí)初始化------------*/
76 void init_timer()
77 {
78 1 TMOD=0x11;
79 1 TH0=0x4c;
80 1 TL0=0x00;
81 1
82 1 IP=0x10;
83 1 IE=0X82;
84 1 TR0=1;
85 1 IT0=1; //邊沿觸發(fā)方式
86 1 EX0=1; //INT0
87 1
88 1 }
89 /*------------------------*/
90 /*----------顯示緩沖區(qū)放數(shù)子程序--------------*/
91 void gift_in(void)
92 {
93 1 if(conh==0)
94 1 {
95 2 led6[0]=hour/10;
96 2 led6[1]=hour%10;
97 2 led6[2]=16;
98 2 led6[3]=min/10;
99 2 led6[4]=min%10;
100 2 led6[5]=16;
101 2 led6[6]=sec/10;
102 2 led6[7]=sec%10;
103 2 }
104 1 else if(conh==1)
105 1 {
106 2 led6[0]=17;
107 2 led6[1]=18;
108 2 led6[2]=19;
109 2 led6[3]=16;
110 2 led6[4]=min/10;
111 2 led6[5]=min%10;
112 2 led6[6]=24;
113 2 led6[7]=24;
114 2 }
115 1 else
116 1 {
117 2 led6[0]=20;
C51 COMPILER V7.07 YK1602 09/08/2006 10:12:13 PAGE 3
118 2 led6[1]=21;
119 2 led6[2]=22;
120 2 led6[3]=23;
121 2 led6[4]=16;
122 2 led6[5]=hour/10;
123 2 led6[6]=hour%10;
124 2 led6[7]=24;
125 2
126 2
127 2 }
128 1 }
129 /*----------時(shí)間判斷子程序--------------*/
130
131 conv()
132 {
133 1 if(sec==60){min++;sec=0;}
134 1 if(min==60){hour++;min=0;}
135 1 if(hour==24) hour=0;
136 1
137 1 gift_in();
138 1 }
139 /*-----------中斷服務(wù)程序-------------*/
140 void time8()interrupt 1 using 3
141 {
142 1 TH0=0x4c;
143 1 TL0=0x00;
144 1
145 1 deda++;
146 1 if(deda==DEDA)
147 1 {
148 2 sec++;deda=0;
149 2
150 2 }
151 1 conv();
152 1 }
153
154 /*-----------送顯子程序-------------*/
155 void disp1(uchar x,uchar y)
156 {
157 1 unsigned char *pd;
158 1 unsigned char*kt;
159 1 unsigned char b;
160 1 kt=&led6[0]; /*送led的首地址給指針KT*/
161 1 for(b=0;b<8;b++)
162 1 { /* 顯示六位*/
163 2 pd=&time[*kt]; /*查表---送要顯示的碼給指針pd*/
164 2 kt++; /*緩沖區(qū)加1*/
165 2 DispOneChar(x,y,*pd);
166 2 x++; //顯示位置X
167 2 }
168 1 }
169
170 /*------------------------*/
171
172
173 /*=======================================================
174 顯示字符串
175 =======================================================*/
176 void disp(uchar x,uchar y,char *ptr)
177 {
178 1 uchar i,l=0;
179 1 while (ptr[l] >31){l++;};
C51 COMPILER V7.07 YK1602 09/08/2006 10:12:13 PAGE 4
180 1 for (i=0;i<l;i++)
181 1 {
182 2 DispOneChar(x++,y,ptr[i]);
183 2 if ( x == 16 )
184 2 {
185 3 x = 0; y ^= 1;
186 3 }
187 2 }
188 1 }
189
190 /*=======================================================
191 按指定位置顯示數(shù)出一個(gè)字符
192 =======================================================*/
193 void DispOneChar(uchar x,uchar y,uchar Wdata)
194 {
195 1
196 1 LocateXY( x, y ); // 定位顯示地址
197 1 LcdWrite_D( Wdata ); // 寫字符
198 1 }
199
200 /*=======================================================
201 顯示光標(biāo)定位
202 =======================================================*/
203 void LocateXY( char posx,char posy) {
204 1
205 1 uchar temp;
206 1
207 1 temp = posx & 0xf;
208 1 posy &= 0x1;
209 1 if ( posy )temp |= 0x40;
210 1 temp |= 0x80;
211 1 lcdwrite_c(temp,0);
212 1 }
213 //初始化
214 void lcdreset(void){
215 1 lcdwrite_c(0x38, 0); //顯示模式設(shè)置(不測試忙信號)共三次
216 1 delay5ms();
217 1 lcdwrite_c(0x38, 0);
218 1 delay5ms();
219 1 lcdwrite_c(0x38, 0);
220 1 delay5ms();
221 1
222 1 lcdwrite_c( 0x38, 1);
223 1 lcdwrite_c( 0x08, 1);
224 1 lcdwrite_c( 0x01, 1);
225 1 lcdwrite_c( 0x06, 1);
226 1 lcdwrite_c( 0x0c, 1);
227 1
228 1 }
229
230
231
232 /*=======================================================
233 寫控制字符子程序: E=1 RS=0 RW=0
234 =======================================================*/
235 void lcdwrite_c( uchar CMD,uchar AttribC )
236 {
237 1
238 1 if (AttribC) WaitForEnable(); // 檢測忙信號?
239 1
240 1 RS = 0; RW = 0; _nop_();
241 1
C51 COMPILER V7.07 YK1602 09/08/2006 10:12:13 PAGE 5
242 1 DATAPORT =CMD; _nop_(); // 送控制字子程序
243 1
244 1 Elcm = 1;_nop_();_nop_();Elcm = 0; // 操作允許脈沖信號
245 1 }
246
247 /*=======================================================*/
248 /*=======================================================
249 當(dāng)前位置寫字符子程序: E =1 RS=1 RW=0
250 =======================================================*/
251 void LcdWrite_D( char dataW )
252 {
253 1
254 1 WaitForEnable(); // 檢測忙信號
255 1
256 1 RS = 1; RW = 0; _nop_();
257 1
258 1 DATAPORT = dataW; _nop_();
259 1
260 1 Elcm = 1; _nop_(); _nop_(); Elcm = 0; // 操作允許脈沖信號
261 1
262 1 }
263
264 /*=======================================================
265 正常讀寫操作之前必須檢測LCD控制器狀態(tài): CS=1 RS=0 RW=1
266 DB7: 0 LCD控制器空閑; 1 LCD控制器忙
267 ========================================================*/
268 void WaitForEnable( void )
269 {
270 1
271 1 DATAPORT = 0xff;
272 1
273 1 RS =0; RW = 1; _nop_(); Elcm = 1; _nop_(); _nop_();
274 1
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -