📄 遥控编码c编写.lst
字号:
C51 COMPILER V7.06 襙控_嗦隒_郷_ 11/15/2009 01:47:48 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 襙控_嗦隒_郷_
OBJECT MODULE PLACED IN 遥控编码c编写.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 遥控编码c编写.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<reg51.h>
2 #define uchar unsigned char
3 #define uint unsigned int
4 #define uintlong unsigned long
5
6 sbit p3_0=P3^0;
7 sbit p2_1=P2^1;
8
9 //sbit out=PSW^7; //位的等同方式
10 //sfr cy=PSW^7;
11 sbit p1_0=P1^0;
12 sbit p1_1=P1^1;
13 sbit p1_2=P1^2;
14 sbit p1_3=P1^3;
15 bit out;
16
17 uint keyvalue=0x00,flag_key=0,value1,value2,keycount=0,i,j,flag_set=0,flag_press=0;
18 uchar code keycode[4]={0x7f,0xbf,0xdf,0xef};
19 uchar code portvalue[16]={0x07,0x08,0x09,0x0a,0x04,0x05,0x06,0x0b,0x01,0x02,0x03,0x0c,0x0d,0x00,0x0e,0x0f}
-;
20 uchar code wy[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
21
22 //红外数据部分;
23
24 uchar user1=0x00,user2=0x00; //用户码标志位0和1
25 uint count=0,endcount=0;
26
27 uint irdata=0;
28
29 void deltime(void);
30 void key_scan(void);
31 void sendirdata(void);
32
33 main(void)
34 {
35 1 EA = 1; //允许CPU中断
36 1 TMOD = 0x11; //设定时器0和1为16位模式1
37 1 ET0 = 1; //定时器0中断允许
38 1 p3_0=1;
39 1 P1=0xff;
40 1 TH0 = 0xFF;
41 1 TL0 = 0xE4; //设定时值0为38K 也就是每隔28us中断一次
42 1 TR0 = 0;
43 1 while(1)
44 1 { key_scan();
45 2 if(flag_press==1)
46 2 {
47 3 flag_press=0;
48 3 TR0=1;
49 3
50 3 sendirdata();
51 3
52 3 }
53 2 }
54 1 }
C51 COMPILER V7.06 襙控_嗦隒_郷_ 11/15/2009 01:47:48 PAGE 2
55 void key_scan(void)
56 {
57 1 for(i=0;i<=3;i++)
58 1 {
59 2 P1=keycode[i];
60 2 if(p1_3==0)
61 2 {keycount=i*4+0;flag_key=1; break;}
62 2 if(p1_2==0)
63 2 {keycount=i*4+1;flag_key=1;break;}
64 2 if(p1_1==0)
65 2 {keycount=i*4+2;flag_key=1;break;}
66 2 if(p1_0==0)
67 2 {keycount=i*4+3;flag_key=1;break;}
68 2 }
69 1 if(flag_key==1)
70 1 { flag_key=0;
71 2 value1=P1;
72 2 deltime();
73 2 value2=P1;
74 2 if(value1==value2)
75 2 {keyvalue=portvalue[keycount];flag_set=1;flag_press=1;}
76 2 while(flag_set)
77 2 {value2=P1;
78 3 if(value1!=value2)
79 3 flag_set=0;
80 3 }
81 2 }
82 1 }
83 void deltime(void)
84 { uint k;
85 1 for(k=0;k<=20;k++)
86 1 {}
87 1 }
88
89 void time0int(void) interrupt 1
90 {
91 1 TH0=0xFF;
92 1 TL0=0xE4; //设定时值为38K 也就是每隔28us中断一次
93 1 count++;
94 1
95 1 }
96 void sendirdata()
97 {
98 1 uchar s=0,datapd=0;
99 1 //发送9ms起始码的低电平 320 通过接收端得测试得到的数据
100 1 endcount=320;
101 1 p3_0=0;
102 1 count=0;
103 1 do{}while(count<endcount);
104 1
105 1 //发送4.5ms的结果码高电平
106 1 endcount=180; //160通过接收端得测试得到的数据
107 1 count=0;
108 1 p3_0=1;
109 1 do{}while(count<endcount);
110 1
111 1 //发送用户码1 由于已经设置了用户码分别为0和0所以这里直接发送,这里连发16个位0。
112 1 //如果用户码不一样,这里就要进行修改了。
113 1 for(s=0;s<=15;s++)
114 1 {
115 2 ///下面发送0.56ms低电平和0.56ms高电平 20和60为计算的数据
116 2 endcount=20;
C51 COMPILER V7.06 襙控_嗦隒_郷_ 11/15/2009 01:47:48 PAGE 3
117 2 count=0;
118 2 p3_0=0;
119 2 do{}while(count<endcount);
120 2
121 2 endcount=20;
122 2 count=0;
123 2 p3_0=1;
124 2 do{}while(count<endcount);
125 2 }
126 1 //发送数据
127 1 irdata=keyvalue;
128 1 for(s=0;s<=7;s++)
129 1 {
130 2 datapd=irdata & wy[s];
131 2 if (datapd==0)
132 2 {endcount=20;count=0;}
133 2 else
134 2 {endcount=60;count=0;}
135 2 p3_0=0;
136 2 do{}while(count<endcount);
137 2 //发送公共的0.56ms高电平
138 2 endcount=20;count=0;
139 2 p3_0=1;
140 2 do{}while(count<endcount);
141 2 }
142 1 //发送数据反向
143 1 irdata=keyvalue;
144 1 for(s=0;s<=7;s++)
145 1 {
146 2 datapd=irdata & wy[s];
147 2 if (datapd==0)
148 2 {endcount=60;count=0;}
149 2 else
150 2 {endcount=20;count=0;}
151 2 p3_0=0;
152 2 do{}while(count<endcount);
153 2 //发送公共的0.56ms高电平
154 2 endcount=20;count=0;
155 2 p3_0=1;
156 2 do{}while(count<endcount);
157 2 }
158 1 TR0=0;
159 1 }
160
161
162
163
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 564 ----
CONSTANT SIZE = 28 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 26 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -