📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 06/21/2008 18:44:18 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: d:\Keil2\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*copyright 2007,ShangHai HaoTun Electronic Technology co.,Ltd
2 *
3 *This sample is used for control light by infrared .
4 *
5 *write by Shifang
6 *
7 *V1.1
8 */
9 //该程序使用LCD1602显示
10 #include<reg52.h>
11 #include<stdio.h>
12 #include<intrins.h>
13
14 ////////////////////////////////////////////////
15 #define TURE 1
16 #define FALSE 0
17
18 ////////////////////////////////////////////////
19
20 sbit IR=P3^2;//红外接口标志
21 sbit RS = P2^4;//Pin4
22 sbit RW = P2^5; //Pin5
23 sbit E = P2^6;//Pin6
24
25 #define Data P0 //数据端口
26
27 unsigned int hour,minute,second,count;
28 char code Tab[16]="0123456789ABCDEF";
29
30 char data TimeNum[]=" ";
31 char data Test1[]=" ";
32
33 ////////////////////////////////////////////
34
35 unsigned char irtime;//红外用全局变量
36
37 bit irpro_ok,irok;
38 unsigned char IRcord[4];
39 unsigned char irdata[33];
40 void ShowString (unsigned char line,char *ptr);
41
42 //////////////////////////////////////////////
43
44 void Delay(unsigned char mS);
45 void Ir_work(void);
46 void Ircordpro(void);
47
48
49 ////////////////////////////////////////////////////////////////
50 void Delay(unsigned char mS)//delay mS
51 {
52 1 unsigned char us,usn;
53 1
54 1 while(mS!=0)
55 1 {
C51 COMPILER V7.06 MAIN 06/21/2008 18:44:18 PAGE 2
56 2 usn = 4;
57 2 while(usn!=0)
58 2 {
59 3 us=0xf0;
60 3 while (us!=0) {us--;};
61 3 usn--;
62 3 }
63 2
64 2 mS--;
65 2
66 2 }
67 1 }
68
69
70 //////////////////////////////////////////////////////////////////
71 //************************************************************* //
72 //////////////////////////////////////////////////////////////////
73
74 void tim0_isr (void) interrupt 1 using 1//定时器0中断服务函数
75 {
76 1 irtime++;
77 1 }
78
79 ///////////////////////////////////////////////////////////////////////
80 void ex0_isr (void) interrupt 0 using 0//外部中断0服务函数
81 {
82 1 static unsigned char i;
83 1 static bit startflag;
84 1
85 1 if(startflag)
86 1 {
87 2
88 2 if(irtime<63&&irtime>=33)//引导码 TC9012的头码
89 2 i=0;
90 2
91 2 irdata[i]=irtime;
92 2 irtime=0;
93 2 i++;
94 2 if(i==33)
95 2 {
96 3 irok=1;
97 3 i=0;
98 3 }
99 2 }
100 1
101 1 else
102 1 {irtime=0;startflag=1;}
103 1
104 1 }
105
106 ////////////////////////////////////////////////////////////////////
107 void TIM0init(void)//定时器0初始化
108 {
109 1
110 1 TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
111 1 TH0=0x00;//reload value
112 1 TL0=0x00;//initial value
113 1 ET0=1;//开中断
114 1 TR0=1;
115 1 }
116 ///////////////////////////////////////////////////////////////////
117 void EX0init(void)
C51 COMPILER V7.06 MAIN 06/21/2008 18:44:18 PAGE 3
118 {
119 1 IT0 = 1; // Configure interrupt 0 for falling edge on /INT0 (P3.2)
120 1 EX0 = 1; // Enable EX0 Interrupt
121 1 EA = 1;
122 1 }
123 /****************************************************************/
124
125 /******************************************************************/
126
127 void Ir_work(void)//红外键值散转程序
128 {
129 1
130 1 TimeNum[5] = Tab[IRcord[0]/16];
131 1 TimeNum[6] = Tab[IRcord[0]%16];
132 1 TimeNum[8] = Tab[IRcord[1]/16];
133 1 TimeNum[9] = Tab[IRcord[1]%16];
134 1 TimeNum[11] = Tab[IRcord[2]/16];
135 1 TimeNum[12] = Tab[IRcord[2]%16];
136 1 TimeNum[14] = Tab[IRcord[3]/16];
137 1 TimeNum[15] = Tab[IRcord[3]%16];
138 1
139 1 ShowString(1,TimeNum);
140 1
141 1 irpro_ok=0;
142 1
143 1 }
144
145 /*****************************************************************/
146 void Ircordpro(void)//红外码值处理函数
147 {
148 1 unsigned char i, j, k;
149 1 unsigned char cord,value;
150 1
151 1 k=1;
152 1 for(i=0;i<4;i++)//处理4个字节
153 1 {
154 2 for(j=1;j<=8;j++) //处理1个字节8位
155 2 {
156 3 cord=irdata[k];
157 3 if(cord>7)//大于某值为1
158 3 {
159 4 value=value|0x80;
160 4 }
161 3 else
162 3 {
163 4 value=value;
164 4 }
165 3 if(j<8)
166 3 {
167 4 value=value>>1;
168 4 }
169 3 k++;
170 3 }
171 2 IRcord[i]=value;
172 2 value=0;
173 2 } irpro_ok=1;//处理完毕标志位置1
174 1
175 1 }
176
177
178
179 /******************************************************************/
C51 COMPILER V7.06 MAIN 06/21/2008 18:44:18 PAGE 4
180 void DelayUs(unsigned char us)//delay us
181 {
182 1 unsigned char uscnt;
183 1 uscnt=us>>1;/* Crystal frequency in 12MHz*/
184 1 while(--uscnt);
185 1 }
186 /******************************************************************/
187 void DelayMs(unsigned char ms)//delay Ms
188 {
189 1 while(--ms)
190 1 {
191 2 DelayUs(250);
192 2 DelayUs(250);
193 2 DelayUs(250);
194 2 DelayUs(250);
195 2 }
196 1 }
197 void WriteCommand(unsigned char c)
198 {
199 1 DelayMs(5);//short delay before operation
200 1 E=0;
201 1 RS=0;
202 1 RW=0;
203 1 _nop_();
204 1 E=1;
205 1 Data=c;
206 1 E=0;
207 1 }
208 /****************************************************************/
209 void WriteData(unsigned char c)
210 {
211 1 DelayMs(5); //short delay before operation
212 1 E=0;
213 1 RS=1;
214 1 RW=0;
215 1 _nop_();
216 1 E=1;
217 1 Data=c;
218 1 E=0;
219 1 RS=0;
220 1 }
221 /*********************************************************************/
222 void ShowChar(unsigned char pos,unsigned char c)
223 {
224 1 unsigned char p;
225 1 if (pos>=0x10)
226 1 p=pos+0xb0; //是第二行则命令代码高4位为0xc
227 1 else
228 1 p=pos+0x80; //是第二行则命令代码高4位为0x8
229 1 WriteCommand (p);//write command
230 1 WriteData (c); //write data
231 1 }
232 /*************************************************************************/
233 void ShowString (unsigned char line,char *ptr)
234 {
235 1 unsigned char l,i;
236 1 l=line<<4;
237 1 for (i=0;i<16;i++)
238 1 ShowChar (l++,*(ptr+i));//循环显示16个字符
239 1 }
240 /*********************************************************************/
241 void InitLcd()
C51 COMPILER V7.06 MAIN 06/21/2008 18:44:18 PAGE 5
242 {
243 1 DelayMs(15);
244 1 WriteCommand(0x38); //display mode
245 1 WriteCommand(0x38); //display mode
246 1 WriteCommand(0x38); //display mode
247 1 WriteCommand(0x06); //显示光标移动位置
248 1 WriteCommand(0x0c); //显示开及光标设置
249 1 WriteCommand(0x01); //显示清屏
250 1
251 1 }
252
253
254 /////////////////////////////////////////////////////////////////
255
256 void main(void)
257 {
258 1 EX0init(); // Enable Global Interrupt Flag
259 1 TIM0init();
260 1
261 1 InitLcd();//
262 1 DelayMs(15);
263 1
264 1 sprintf(Test1," www.haotun.com ");//the first line
265 1 ShowString(0,Test1);
266 1
267 1 sprintf(TimeNum,"Code ");//the second line
268 1 ShowString(1,TimeNum);
269 1
270 1
271 1 while(1)//主循环
272 1 {
273 2 if(irok)
274 2 {
275 3 Ircordpro();
276 3 irok=0;
277 3 }
278 2
279 2 if(irpro_ok)//step press key
280 2 {
281 3 Ir_work();
282 3 }
283 2 }
284 1 }
285
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 492 ----
CONSTANT SIZE = 50 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 83 5
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -