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