📄 51
字号:
C51 COMPILER V8.09 S51YK 07/12/2010 09:54:26 PAGE 1
C51 COMPILER V8.09, COMPILATION OF MODULE S51YK
OBJECT MODULE PLACED IN s51yk.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE s51yk.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #define c(x) (x*110592/120000)
3
4 sbit Ir_Pin=P3^7;
5 sbit beep=P3^6;
6
7 unsigned char code Led_Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
8 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf}; //共阳极数码显示码0-F.
9 unsigned char code Led_Sel[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
10
11 unsigned char Led_Buf[7]; //显示缓冲区
12 char Led_Index; //位选
13 unsigned char Ir_Buf[4]; //用于保存解码结果
14
15
16 void delay_50ms(unsigned int t)
17 {
18 1 unsigned int j;
19 1 for(;t>0;t--)
20 1 for(j=6245;j>0;j--)
21 1 {;}
22 1 }
23
24 //==============================================================
25 //数码管扫描
26 timer0() interrupt 1 using 1
27 {
28 1 TL0=65536-1000;
29 1 TH0=(65536-1000)/256; //定时器0设定约1000us中断一次,用于数码管扫描
30 1 P0=0xff;
31 1 P2=Led_Sel[Led_Index]; //位选
32 1 P0=Led_Tab[Led_Buf[Led_Index]]; //段选
33 1 if(++Led_Index>7)
34 1 Led_Index=0; //八个扫描完了,到第一个数码管
35 1
36 1 }
37 //==============================================================
38 unsigned int Ir_Get_Low()
39 {
40 1 TL1=0;
41 1 TH1=0;
42 1 TR1=1;
43 1 while(!Ir_Pin && (TH1&0x80)==0);
44 1 TR1=0;
45 1 return TH1*256+TL1;
46 1 }
47 //=============================================================
48 unsigned int Ir_Get_High()
49 {
50 1 TL1=0;
51 1 TH1=0;
52 1 TR1=1;
53 1 while(Ir_Pin && (TH1&0x80)==0);
54 1 TR1=0;
55 1 return TH1*256+TL1;
C51 COMPILER V8.09 S51YK 07/12/2010 09:54:26 PAGE 2
56 1 }
57 //==============================================================
58 main()
59 {
60 1 unsigned int temp;
61 1 char i,j;
62 1 Led_Index=0;
63 1 TMOD=0x11;
64 1 TL0=65536-1000;
65 1 TH0=(65536-1000)/256; //定时器0设定约1000us中断一次,用于数码管扫描
66 1 EA=1;
67 1 ET0=1;
68 1 TR0=1;
69 1
70 1 do{
71 2 restart:
72 2 while(Ir_Pin);
73 2
74 2 temp=Ir_Get_Low();
75 2 if(temp<c(8500) || temp>c(9500))
76 2 continue;//引导脉冲低电平9000
77 2 temp=Ir_Get_High();
78 2
79 2 if(temp<c(4000) || temp>c(5000))
80 2 continue;//引导脉冲高电平4500
81 2
82 2 for(i=0;i<4;i++){ //4个字节
83 3 for(j=0;j<8;j++) //每个字节8位
84 3 {
85 4 temp=Ir_Get_Low();
86 4 if(temp<c(200) || temp>c(800)) goto restart;
87 4 temp=Ir_Get_High();
88 4
89 4 if(temp<c(200) || temp>c(2000)) goto restart;
90 4 Ir_Buf[i]>>=1;
91 4
92 4 if(temp>c(1120)) Ir_Buf[i]|=0x80;
93 4 }
94 3 }
95 2 Led_Buf[0]=(Ir_Buf[0]/16)&0xf;//显示结果
96 2 Led_Buf[1]=Ir_Buf[0]&0xf; //显示结果
97 2 Led_Buf[2]=(Ir_Buf[1]/16)&0xf; //显示结果
98 2 Led_Buf[3]=Ir_Buf[1]&0xf; //显示结果
99 2 Led_Buf[4]=(Ir_Buf[2]/16)&0xf; //显示结果
100 2 Led_Buf[5]=Ir_Buf[2]&0xf; //显示结果
101 2 Led_Buf[6]=(Ir_Buf[3]/16)&0xf; //显示结果
102 2 Led_Buf[7]=Ir_Buf[3]&0xf; //显示结果
103 2 beep=0;
104 2 delay_50ms(2);
105 2 beep=1;
106 2 }while(1);
107 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 507 ----
CONSTANT SIZE = 25 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 12 2
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
C51 COMPILER V8.09 S51YK 07/12/2010 09:54:26 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 + -