📄 yk1602.lst
字号:
C51 COMPILER V7.02b YK1602 11/27/2002 10:43:45 PAGE 1
C51 COMPILER V7.02b, 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 //遥控带液晶显示程序,已经调试完毕2002/10/30
2 //若遥控接收不到,修改脉宽值即可
3 //
4 #include <reg51.h>
5 #include<intrins.h>
6 #include<absacc.h>
7
8 //变量类型标识的宏定义,
9 #define uchar unsigned char
10 #define uint unsigned int
11
12 #define DEDA 20
13 unsigned char deda=0;
14 // 控制引脚定义,
15 sbit RS = P0^0;
16 sbit RW = P0^1;
17 sbit Elcm =P0^2;
18 sbit act=P2^1; /*加键*/
19 sbit deb=P2^0; /*减键*/
20 sbit cong=P2^2; /*功能键*/
21 #define DATAPORT P1 // 数据端口
22
23 #define busy 0x80
24 char data led6[8];/*六位显示缓冲区*/
25
26 code char love[]="I LOVE YOU ";
27
28 code char time[]="0123456789ABCDEF:MinHour ";
29 unsigned char hour=0,min=0,sec=0;
30 bit menu=0;
31 bit up=0;
32 bit dw=0;
33 #define temp1 DBYTE[0x50]
34 #define temp2 DBYTE[0x51]
35 #define temp3 DBYTE[0x52]
36 #define temp4 DBYTE[0x53]
37 #define temp5 DBYTE[0x54]
38 //遥控
39 unsigned char yt; //中断次数
40 bit start=0; //起码标志
41 bit h=0; //解码标志
42 unsigned char da=0; //暂存数据
43 unsigned char gt=0,gv=0; //
44
45 //
46 void delay400ms(void);
47 void delay5ms(void);
48 void lcdreset( void );
49 void WaitForEnable( void );
50 void lcdreset(void);
51 void lcdwrite_c( uchar CMD,uchar AttribC );
52 void DispOneChar(uchar x,uchar y,uchar Wdata);
53 void LocateXY( char posx,char posy);
54 void LcdWrite_D( char dataW ) ;
55 void yk(void);
C51 COMPILER V7.02b YK1602 11/27/2002 10:43:45 PAGE 2
56 /*键盘检测*/
57 void acct_1(void);
58 unsigned char conh=0; /*功能键键值*/
59 void key_hit(unsigned char add3);
60 void delay(void);
61
62 /*定时初始化------------*/
63 void init_timer()
64 {
65 1 TMOD=0x11;
66 1 TH0=0x4c;
67 1 TL0=0x00;
68 1
69 1 IP=0x10;
70 1 IE=0X82;
71 1 TR0=1;
72 1 IT0=1; //边沿触发方式
73 1 EX0=1; //INT0
74 1
75 1 }
76 /*------------------------*/
77 /*----------显示缓冲区放数子程序--------------*/
78 void gift_in(void){
79 1 if(conh==0){
80 2 led6[0]=hour/10;
81 2 led6[1]=hour%10;
82 2 led6[2]=16;
83 2 led6[3]=min/10;
84 2 led6[4]=min%10;
85 2 led6[5]=16;
86 2 led6[6]=sec/10;
87 2 led6[7]=sec%10;
88 2 }
89 1 else if(conh==1){
90 2 led6[0]=17;
91 2 led6[1]=18;
92 2 led6[2]=19;
93 2 led6[3]=16;
94 2 led6[4]=min/10;
95 2 led6[5]=min%10;
96 2 led6[6]=24;
97 2 led6[7]=24;
98 2 }
99 1 else{
100 2 led6[0]=20;
101 2 led6[1]=21;
102 2 led6[2]=22;
103 2 led6[3]=23;
104 2 led6[4]=16;
105 2 led6[5]=hour/10;
106 2 led6[6]=hour%10;
107 2 led6[7]=24;
108 2
109 2
110 2 }
111 1 }
112 /*----------时间判断子程序--------------*/
113
114 conv()
115 {
116 1 if(sec==60){min++;sec=0;}
117 1 if(min==60){hour++;min=0;}
C51 COMPILER V7.02b YK1602 11/27/2002 10:43:45 PAGE 3
118 1 if(hour==24) hour=0;
119 1
120 1 gift_in();
121 1 }
122 /*-----------中断服务程序-------------*/
123 void time8()interrupt 1 using 3
124 {
125 1 TH0=0x4c;
126 1 TL0=0x00;
127 1
128 1 deda++;
129 1 if(deda==DEDA)
130 1 {
131 2 sec++;deda=0;
132 2
133 2 }
134 1 conv();
135 1 }
136
137 /*-----------送显子程序-------------*/
138 void disp1(uchar x,uchar y) {
139 1 unsigned char *pd;
140 1 unsigned char*kt;
141 1 unsigned char led;
142 1 unsigned char b;
143 1 unsigned char j;
144 1 kt=&led6[0]; /*送A733的首地址给指针KT*/
145 1 for(b=0;b<8;b++){ /* 显示六位*/
146 2 j=*kt; /*把缓冲区里的内容传给变量j*/
147 2 pd=&time[j]; /*查表---送要显示的码给指针pd*/
148 2 led=*pd; /**/
149 2 kt++; /*缓冲区加1*/
150 2 DispOneChar(x,y,led);
151 2 x++; //显示位置X
152 2 }
153 1 }
154
155 /*------------------------*/
156
157
158 /*=======================================================
159 显示字符串
160 =======================================================*/
161 void disp(uchar x,uchar y,char *ptr) {
162 1 uchar i,l=0;
163 1 while (ptr[l] >31){l++;};
164 1 for (i=0;i<l;i++) {
165 2 DispOneChar(x++,y,ptr[i]);
166 2 if ( x == 16 ){
167 3 x = 0; y ^= 1;
168 3 }
169 2 }
170 1 }
171
172
173
174
175
176
177
178
179
C51 COMPILER V7.02b YK1602 11/27/2002 10:43:45 PAGE 4
180
181 /*=======================================================
182 按指定位置显示数出一个字符
183 =======================================================*/
184 void DispOneChar(uchar x,uchar y,uchar Wdata) {
185 1
186 1 LocateXY( x, y ); // 定位显示地址
187 1 LcdWrite_D( Wdata ); // 写字符
188 1 }
189
190 /*=======================================================
191 显示光标定位
192 =======================================================*/
193 void LocateXY( char posx,char posy) {
194 1
195 1 uchar temp;
196 1
197 1 temp = posx & 0xf;
198 1 posy &= 0x1;
199 1 if ( posy )temp |= 0x40;
200 1 temp |= 0x80;
201 1 lcdwrite_c(temp,0);
202 1 }
203 //初始化
204 void lcdreset(void){
205 1 lcdwrite_c(0x38, 0); //显示模式设置(不测试忙信号)共三次
206 1 delay5ms();
207 1 lcdwrite_c(0x38, 0);
208 1 delay5ms();
209 1 lcdwrite_c(0x38, 0);
210 1 delay5ms();
211 1
212 1 lcdwrite_c( 0x38, 1);
213 1 lcdwrite_c( 0x08, 1);
214 1 lcdwrite_c( 0x01, 1);
215 1 lcdwrite_c( 0x06, 1);
216 1 lcdwrite_c( 0x0c, 1);
217 1
218 1 }
219
220
221
222 /*=======================================================
223 写控制字符子程序: E=1 RS=0 RW=0
224 =======================================================*/
225 void lcdwrite_c( uchar CMD,uchar AttribC ) {
226 1
227 1 if (AttribC) WaitForEnable(); // 检测忙信号?
228 1
229 1 RS = 0; RW = 0; _nop_();
230 1
231 1 DATAPORT =CMD; _nop_(); // 送控制字子程序
232 1
233 1 Elcm = 1;_nop_();_nop_();Elcm = 0; // 操作允许脉冲信号
234 1 }
235
236 /*=======================================================*/
237 /*=======================================================
238 当前位置写字符子程序: E =1 RS=1 RW=0
239 =======================================================*/
240 void LcdWrite_D( char dataW ) {
241 1
C51 COMPILER V7.02b YK1602 11/27/2002 10:43:45 PAGE 5
242 1 WaitForEnable(); // 检测忙信号
243 1
244 1 RS = 1; RW = 0; _nop_();
245 1
246 1 DATAPORT = dataW; _nop_();
247 1
248 1 Elcm = 1; _nop_(); _nop_(); Elcm = 0; // 操作允许脉冲信号
249 1
250 1 }
251
252 /*=======================================================
253 正常读写操作之前必须检测LCD控制器状态: CS=1 RS=0 RW=1
254 DB7: 0 LCD控制器空闲; 1 LCD控制器忙
255 ========================================================*/
256 void WaitForEnable( void ) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -