📄 红外解码.lst
字号:
C51 COMPILER V8.02 红外解码 04/07/2012 09:00:23 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 红外解码
OBJECT MODULE PLACED IN 红外解码.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 红外解码.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #define uchar unsigned char
3 #define uint unsigned int
4 uchar code bit_ser[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
5 uchar code seven_seg[] = {0xf9,0x8e,0xc0}; //1,f,0依次表示高电平,悬空,低电平
6 uchar code address[]={1,1,1,1,1,1}; //存放预设的地址码高电平为2,低电平为0,悬空为1
7 uchar disbuffer[6]; //数据显示缓冲区
8 uchar DATEA[25]; //接收的信息
9 uchar DATE[12]; //解码得到的数据
10 bit dateflag; //接收数据时的标记
11 char num,i,j; //用于接收和显示时计数
12 sbit DATE_IN = P2^7; //数据的接收端
13 //定时器初始化函数
14 void Timer_init()
15 {
16 1 TMOD = 0x11;
17 1 TH0 = 0xFA;
18 1 TL0 = 0x00;
19 1 EA = 1;
20 1 ET0 = 1;
21 1 TL1 = (65536-5000) % 256;
22 1 TH1 = (65536-5000) / 256;
23 1 ET1 = 1;
24 1 TR1 = 1;
25 1 }
26 //Timer1中断处理函数,用于显示接收到的数据
27 void time1_interrupt() interrupt 3
28 {
29 1 TL1 = (65536-5000) % 256;
30 1 TH1 = (65536-5000) / 256;
31 1 P0 = 0xff;
32 1 P2 = bit_ser[i];
33 1 P0 = seven_seg[disbuffer[i]];
34 1 i ++;
35 1 if(i >= 6)
36 1 i = 0;
37 1 }
38 //Timer0中断处理函数
39 void timer0_interrupt() interrupt 1
40 {
41 1 if(dateflag) //如果dateflag为高,说明是需要检测数据了,否则说明是同步码或误码(周期过长)
42 1 {
43 2 dateflag = 0;
44 2 DATEA[num] = DATE_IN;
45 2 num ++;
46 2 TR0 = 0;
47 2 TH0 = 0xFA;
48 2 TL0 = 0x00;
49 2 TR0 = 1;
50 2 }
51 1 else
52 1 {
53 2 num = 0;
54 2 }
55 1 }
C51 COMPILER V8.02 红外解码 04/07/2012 09:00:23 PAGE 2
56 //数据接收函数
57 void jieshou_date()
58 {
59 1 if(!dateflag)
60 1 {
61 2 TR0 = 0;
62 2 TH0 = 0xFA;
63 2 TL0 = 0x90;
64 2 TR0 = 1;
65 2 dateflag = 1;
66 2 }
67 1 }
68 //从接收到的信息中提取数据
69 void huoqu_date()
70 {
71 1 for(j = 0;j < 12;j ++) //将接收到的24位电平信号转换成数据
72 1 {
73 2 DATE[j] = DATEA[j + j] + DATEA[j + j + 1];
74 2 if(DATE[j] && ! DATEA[j + j]) //如果接收到的两位数据是0,1说明是误码
75 2 {
76 3 break;
77 3 }
78 2 }
79 1 num = 0;
80 1 if(j == 12)
81 1 {
82 2 if(DATE[0] == address[0] && DATE[1] == address[1]&& DATE[2] == address[2] &&
83 2 DATE[3] == address[3] && DATE[4] == address[4] && DATE[5] == address[5])
84 2 { //如果解码得到的地址码和预设的地址码相同,就将解码得到的数据放入显示缓冲区
85 3 for(j = 0;j < 6; j++)
86 3 {
87 4 disbuffer[j] = DATE[6 + j];
88 4 }
89 3 }
90 2 }
91 1 }
92 //主函数
93 void main()
94 {
95 1 Timer_init();
96 1 while(1)
97 1 {
98 2 if(!DATE_IN) //说明有信号输入
99 2 {
100 3 jieshou_date(); //接收信息
101 3 }
102 2 if(num >= 25) //说明已经接收到了一组完整数据
103 2 {
104 3 huoqu_date(); //从接收的信息中提取数据
105 3 }
106 2 }
107 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 328 ----
CONSTANT SIZE = 15 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 46 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
C51 COMPILER V8.02 红外解码 04/07/2012 09:00:23 PAGE 3
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -