?? ir_send.lst
字號(hào):
C51 COMPILER V7.50 IR_SEND 08/13/2007 14:14:10 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE IR_SEND
OBJECT MODULE PLACED IN ir_send.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE ir_send.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //紅外發(fā)送程序
2
3 #include <reg52.h>
4
5 #define uchar unsigned char
6 #define uint unsigned int
7
8 #define send0 send_pulse_565 (); send_space_1685 ();
9 #define send1 send_pulse_565 (); send_space_560 ();
10
11 uchar SYS_DATA=0x49; //系統(tǒng)碼
12
13 sbit OUT=P3^7;
14
15
16 void send_bit (uchar one_bit); //發(fā)送一位字節(jié)
17 void send_data (uchar one_data); //發(fā)送一個(gè)數(shù)據(jù)
18 //包括一個(gè)起始標(biāo)志 一個(gè)系統(tǒng)碼及其反碼 一個(gè)數(shù)據(jù)碼(one_data)及其反碼
19
20 char code disp[]={0x28,0x7E,0xA2,0x62,0x74,0x61,0x21,0x7A,0x20,0x60,0x30,0x25,0xA7,0x26,0xA1,0xB1};
21 char i1=0,i2=0,i3=0,i4=0,i5=0,i6=0,i7=0,i8=0; //顯示緩沖
22
23
24 void delay(uchar t)
25 { char a;
26 1 while(t--)
27 1 for(a=255;a>0;a--); }
28
29 void display(uchar t)
30 {while(t--)
31 1 {P0=disp[i1];
32 2 P2=0x7f;
33 2 delay(1);
34 2 P2=0xff;
35 2 P0=disp[i2];
36 2 P2=0xbf;
37 2 delay(1);
38 2 P2=0xff;
39 2 P0=disp[i3];
40 2 P2=0xdf;
41 2 delay(1);
42 2 P2=0xff;
43 2 P0=disp[i4];
44 2 P2=0xef;
45 2 delay(1);
46 2 P2=0xff;
47 2 P0=disp[i5];
48 2 P2=0xf7;
49 2 delay(1);
50 2 P2=0xff;
51 2 P0=disp[i6];
52 2 P2=0xfb;
53 2 delay(1);
54 2 P2=0xff;
55 2 P0=disp[i7];
C51 COMPILER V7.50 IR_SEND 08/13/2007 14:14:10 PAGE 2
56 2 P2=0xfd;
57 2 delay(1);
58 2 P2=0xff;
59 2 P0=disp[i8];
60 2 P2=0xfe;
61 2 delay(1);
62 2 P2=0xff;} }
63
64 void send_pulse_9000 (void) //9ms脈寬
65 {
66 1 TH0=0xdc;
67 1 TL0=0xff;
68 1 TR0=1;
69 1 TR1=1;
70 1 while(TR0);
71 1 TR1=0;
72 1 OUT=1;
73 1 }
74
75
76 void send_space_4500 (void) //4.5ms間隔
77 {
78 1 OUT=1;
79 1 TH0=0xee;
80 1 TL0=0x7f;
81 1 TR0=1;
82 1 while(TR0);
83 1 OUT=1;
84 1 }
85
86 void send_pulse_565 (void) //0.565ms脈寬
87 {
88 1 TH0=0xfd;
89 1 TL0=0xee;
90 1 TR0=1;
91 1 TR1=1;
92 1 while(TR0);
93 1 TR1=0;
94 1 OUT=1;
95 1 }
96
97
98
99 void send_space_1685 (void) //1.685ms間隔
100 {
101 1 OUT=1;
102 1 TH0=0xf9;
103 1 TL0=0x7f;
104 1 TR0=1;
105 1 while(TR0);
106 1 OUT=1;
107 1 }
108
109
110 void send_space_560 (void) //0.56ms間隔
111 {
112 1 OUT=1;
113 1 TH0=0xfd;
114 1 TL0=0xea;
115 1 TR0=1;
116 1 while(TR0);
117 1 OUT=1;
C51 COMPILER V7.50 IR_SEND 08/13/2007 14:14:10 PAGE 3
118 1 }
119
120
121
122
123
124 void send_bit (uchar one_bit)
125 {
126 1 uchar i;
127 1 uchar key_num=0x01;
128 1 for(i=0;i<8;i++)
129 1 {
130 2 send_pulse_565 (); //先發(fā)0.565毫秒脈寬
131 2
132 2 if( (one_bit&key_num)==1 )
133 2 send_space_1685 (); //先發(fā)低位 某位是1則延時(shí)1.685ms
134 2 else
135 2 send_space_560(); //如果是0則延時(shí)0.56ms
136 2 one_bit=one_bit>>1; //one_bit右移一位
137 2
138 2 }
139 1 }
140
141
142
143 void send_data (uchar one_data)
144 {
145 1 uint t=1000;
146 1 send_pulse_9000(); //起始碼 9ms的脈寬 考慮到誤差
147 1 send_space_4500(); //4.5ms的間隔
148 1 send_bit (SYS_DATA); //發(fā)系統(tǒng)碼
149 1 send_bit (~SYS_DATA); //發(fā)系統(tǒng)碼的反碼
150 1 send_bit (one_data); //發(fā)數(shù)據(jù)碼
151 1 send_bit (~one_data); //發(fā)數(shù)據(jù)碼的反碼
152 1 TR1=1;
153 1 while(t--);
154 1 TR1=0;
155 1 OUT=1;
156 1 }
157
158
159
160 void main(void)
161 {
162 1 uchar c=0x77;
163 1 uint t=65535;
164 1 TMOD=0x21; //T0產(chǎn)生精確時(shí)間的延時(shí)或脈寬 16位
165 1 //T1產(chǎn)生38kHz方波 8位自動(dòng)重裝
166 1 TH1=0xf3;
167 1 TL1=0xf3;
168 1 IE=0x8a;
169 1 delay(255);
170 1 display(100);
171 1 delay(255);
172 1 display(100);
173 1 while(1)
174 1 {
175 2 send_data(c);
176 2 }
177 1 }
178
179
C51 COMPILER V7.50 IR_SEND 08/13/2007 14:14:10 PAGE 4
180 void time0 (void) interrupt 1
181 {
182 1 TR0=0;
183 1 TR1=0;
184 1 }
185
186 void time1 (void) interrupt 3 //T1用來產(chǎn)生38kHz方波
187 {
188 1 OUT=~OUT;
189 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 513 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 9 2
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -