📄 ir_shu_ma_guan.lst
字号:
C51 COMPILER V7.06 IR_SHU_MA_GUAN 04/11/2007 16:33:23 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE IR_SHU_MA_GUAN
OBJECT MODULE PLACED IN IR_shu_ma_guan.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\C51.EXE IR_shu_ma_guan.c BROWSE DEBUG OBJECTEXTEND TABS(2)
stmt level source
1 /****************************************
2 程序功能:红外一体化接收遥控器的编码并解码,
3 LED数码管显示遥控器按下的数字,并且如果
4 红外解码成功的话, 蜂鸣器发出"滴滴"的声音
5 表示解码成功
6 ****************************************/
7
8 #include <reg52.h>
9 #include <stdio.h>
10
11 sbit sound=P3^3; //蜂鸣器
12 sbit IR=P3^2; //P3.2为红外一体化接收
13
14 unsigned char dm,i,j,k;
15 unsigned char aa[2]; //定义2个数组,用来存储代码,8位的数据码和8位的数据反码
16 unsigned long bb; //定义bb用来存放用户识别码,这里采用的是26位的用户识别
17
18
19 //0.9ms
20 void delay0_9ms(void)
21 {
22 1 unsigned char j,k;
23 1 for(j=18;j>0;j--)
24 1 for(k=20;k>0;k--) ;
25 1 }
26
27 //1ms
28 void delay1ms(void)
29 {
30 1 unsigned char i,j;
31 1 for(i=2;i>0;i--)
32 1 for(j=230;j>0;j--) ;
33 1 }
34
35 //4.5ms
36 void delay4_5ms(void)
37 {
38 1 unsigned char i,j;
39 1 for(i=10;i>0;i--)
40 1 for(j=225;j>0;j--) ;
41 1 }
42
43 //100ms
44 void delay100ms(void)
45 {
46 1 unsigned char i,j,k;
47 1 for(i=200;i>0;i--)
48 1 for(j=20;j>0;j--)
49 1 for(k=10;k>0;k--) ;
50 1 }
51
52
53
54 LED_display(unsigned char date)
55 {
C51 COMPILER V7.06 IR_SHU_MA_GUAN 04/11/2007 16:33:23 PAGE 2
56 1 switch(date)
57 1 {
58 2 case 0x11: {P1=0x00;P2=0xf9;break;} //显示1
59 2 case 0x12: {P1=0x00;P2=0xa4;break;} //显示2
60 2 case 0x13: {P1=0x00;P2=0xb0;break;} //显示3
61 2 case 0x14: {P1=0x00;P2=0x99;break;} //显示4
62 2 case 0x15: {P1=0x00;P2=0x92;break;} //显示5
63 2 case 0x16: {P1=0x00;P2=0x82;break;} //显示6
64 2 case 0x17: {P1=0x00;P2=0xf8;break;} //显示7
65 2 case 0x18: {P1=0x00;P2=0x80;break;} //显示8
66 2 case 0x19: {P1=0x00;P2=0x90;break;} //显示9
67 2 case 0x10: {P1=0x00;P2=0xc0;break;} //显示0
68 2 default: {P1=0x00;P2=0xb6;} //显示错误
69 2 }
70 1 }
71
72
73
74 void main()
75 {
76 1 IT0=1; //外部中断0触发方式控制位,下降沿触发
77 1 EX0=1; //外部中断0(INT0)中断允许位
78 1 EA=1; //总中断
79 1 dm=0;
80 1 P2=0xc0;
81 1 P1=0x00;
82 1 while(1);
83 1 }
84
85
86
87 void t0(void) interrupt 0 using 2//外部中断0的函数
88 {
89 1 EA=0; //暂时关闭CPU的所有中断请求
90 1
91 1 for(k=0;k<10;k++) //重复10次,目的是检测在9毫秒内如果出现高电平就退出解码程序
92 1 { //aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
93 2
94 2 delay0_9ms(); //延时0.9毫秒
95 2 if (IR==1) {k=10;break;} //延时0.9毫秒后判断P3.2脚是否出现高电平如果有就退出解码程序
96 2 else if(k==9) //重复10次?
97 2 { //bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
98 3 while(IR==0); //等待高电平避开9毫秒低电平引导脉冲
99 3 delay4_5ms(); //延时4.5毫秒避开4.5毫秒的结果码
100 3
101 3
102 3 /********************************************
103 3 //26位的用户码,前13位数据码,后13位数据反码
104 3 *********************************************/
105 3 for(j=1;j<=26;j++)//每组数据为26位
106 3 {
107 4 while(IR==0); //
108 4 delay0_9ms();
109 4 if(IR==1)
110 4 {
111 5 delay1ms();
112 5 dm=dm|0x2000000; //因为是26位,一个"1",后面25个"0",转化二进制即为"1000000
-"
113 5 if(j<26) dm=dm>>1; //数据"1",右移一个"1",一共25次
114 5 }
115 4 else if(j<26) dm=dm>>1; //数据"0",一共25次
116 4 }
C51 COMPILER V7.06 IR_SHU_MA_GUAN 04/11/2007 16:33:23 PAGE 3
117 3 bb=dm;
118 3 dm=0;
119 3
120 3
121 3
122 3 /***************************************************
123 3 //16位的用户码,前8位数据码,后8位数据反码
124 3 ****************************************************/
125 3
126 3 for(i=0;i<2;i++)
127 3 {
128 4 for(j=1;j<=8;j++)//每组数据为8位
129 4 {
130 5 while(IR==0); //
131 5 delay0_9ms();
132 5 if(IR==1)
133 5 {
134 6 delay1ms();
135 6 dm=dm|0x80;
136 6 if(j<8) dm=dm>>1; //数据"1",右移一个"1",一共7次
137 6 }
138 5 else if(j<8) dm=dm>>1; //数据"0",一共7次
139 5 }
140 4 aa[i]=dm;
141 4 dm=0;
142 4 }
143 3
144 3 /***************************************************
145 3 //显示部分
146 3 ****************************************************/
147 3 if(aa[0]==~aa[1]) //验证成功
148 3 {
149 4 sound=0;
150 4 delay100ms();
151 4 LED_display(aa[0]);
152 4 sound=1;
153 4 }
154 3
155 3 } //bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
156 2 } //aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
157 1 EA=1;
158 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 404 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -