📄 hongwai.lst
字号:
C51 COMPILER V7.50 HONGWAI 07/08/2007 15:24:16 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE HONGWAI
OBJECT MODULE PLACED IN hongwai.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE hongwai.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #define uchar unsigned char
3 #define uint unsigned int
4
5 sbit RST=P1^4;
6 sbit OUT=P3^7;
7
8 uchar TH0_BUF=0; //定义定时器时间缓冲
9 uchar TL0_BUF=0;
10 uchar INT0_TIMES=0; //定义中断次数
11 uchar RCV_NUM=0; //接收的数据是第几位
12 uint RH_CODE=0; //定义接收码高位
13 uint RL_CODE=0; //定义接收码低位
14 bit START_FLAG=0; //定义接收数据开始标志位
15 bit RCV_BIT_FLAG=0; //定义位接收标志位 1 表示接收成功
16 bit RCV_SUS_FLAG=0; //定义字接收标志位 1 表示接收成功
17
18 //char code disp[]={0x28,0x7E,0xA2,0x62,0x74,0x61,0x21,0x7A,0x20,0x60,0x30,0x25,0xA7,0x26,0xA1,0xB1};
19 char code disp[]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28,0x30,0x25,0x67,0x23,0x64,0x74};
20 // 0 1 2 3 4 5 6 7 8 9 a b c d e f
21
22 //char code disp[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0x8e,0xff,0x00};
23 // 0 1 2 3 4 5 6 7 8 9 - f 空 显
24
25 //char i1=0,i2=0,i3=0,i4=0,i5=0,i6=0,i7=0,i8=0; //显示缓冲 其中i0为虚拟位
26 char i1,i2,i3,i4,i5,i6,i7,i8;
27 /*
28 void RESET(void)//软件复位子程序
29 {
30 uchar code rst[]={0xe4,0xc0,0xe0,0xc0,0xe0,0x32};
31 (*((void(*)(void))(rst)))();
32 }
33
34 */
35 delay(uint t)
36 { char a;
37 1 while(t--)
38 1 for(a=100;a>0;a--); }
39
40
41 void initial(void)
42 { TMOD=0x01;
43 1 IT0=1; //外部中断0采用高到低的跳变有效
44 1 IE=0x81; //开外部中断0 和两个定时器中断
45 1 TH0=0;
46 1 TL0=0;
47 1 TR0=0;
48 1 START_FLAG=0;
49 1 TH0_BUF=0; //定义定时器时间缓冲
50 1 TL0_BUF=0;
51 1 INT0_TIMES=0; //定义中断次数
52 1 RCV_NUM=0; //接收的数据是第几位
53 1 RH_CODE=0; //定义接收码高位
54 1 RL_CODE=0; //定义接收码低位
55 1 START_FLAG=0; //定义接收数据开始标志位
C51 COMPILER V7.50 HONGWAI 07/08/2007 15:24:16 PAGE 2
56 1 RCV_BIT_FLAG=0; //定义位接收标志位 1 表示接收成功
57 1 RCV_SUS_FLAG=0; //定义字接收标志位 1 表示接收成功
58 1
59 1 }
60
61 display(t)
62 {while(t--)
63 1 {
64 2 P0=disp[i8];
65 2 P2=0x7f;
66 2 delay(1);
67 2 P2=0xff;
68 2 P0=disp[i7];
69 2 P2=0xbf;
70 2 delay(1);
71 2 P2=0xff;
72 2 P0=disp[i6];
73 2 P2=0xdf;
74 2 delay(1);
75 2 P2=0xff;
76 2 P0=disp[i5];
77 2 P2=0xef;
78 2 delay(1);
79 2 P2=0xff;
80 2 P0=disp[i4];
81 2 P2=0xf7;
82 2 delay(1);
83 2 P2=0xff;
84 2 P0=disp[i3];
85 2 P2=0xfb;
86 2 delay(1);
87 2 P2=0xff;
88 2 P0=disp[i2];
89 2 P2=0xfd;
90 2 delay(1);
91 2 P2=0xff;
92 2 P0=disp[i1];
93 2 P2=0xfe;
94 2 delay(1);
95 2 P2=0xff;} }
96
97
98 void RCV_SUS(void)
99 {
100 1 if(1)
101 1 {
102 2 i8=RH_CODE/4096%16;i7=RH_CODE/256%16;i6=RH_CODE/16%16;i5=RH_CODE%16;
103 2 i4=RL_CODE/4096%16;i3=RL_CODE/256%16;i2=RL_CODE/16%16;i1=RL_CODE%16;
104 2 P2=0xff;
105 2 delay(50);
106 2 initial();
107 2 }
108 1 else initial(); //注意 此句作用很大 这是我调试很长时间才调试出来的 说明以后编程序时要严密
109 1
110 1 }
111 void RCV_BIT(void)
112 { uint time0=TH0_BUF*256+TL0_BUF;
113 1 uint KEY_BIT; //当前的键值 为0或1
114 1 if(START_FLAG==0)
115 1 { if( time0>12000 && time0<15000 )
116 2 { START_FLAG=1; } //开始
117 2 }
C51 COMPILER V7.50 HONGWAI 07/08/2007 15:24:16 PAGE 3
118 1 else if(START_FLAG==1)
119 1 {
120 2 if( time0> 2000 && time0<2400 ) KEY_BIT=0;
121 2 else if( time0> 900 && time0<1300 ) KEY_BIT=0x8000;
122 2 else initial(); //错误
123 2
124 2 if(RCV_NUM<16)
125 2 { RH_CODE=RH_CODE>>1;
126 3 RH_CODE^=KEY_BIT; }
127 2 else
128 2 { RL_CODE=RL_CODE>>1;
129 3 RL_CODE^=KEY_BIT; }
130 2
131 2 RCV_NUM++;
132 2
133 2 if(RCV_NUM==32)
134 2 {
135 3 RCV_NUM=0; RCV_SUS(); }
136 2 }
137 1 RCV_BIT_FLAG=0;
138 1 }
139
140 main()
141 { display(60);
142 1 delay(400);
143 1 initial();
144 1 while(1)
145 1 {
146 2 display(1); }
147 1 }
148
149 void ex_input(void) interrupt 0 //外部中断
150 {
151 1 INT0_TIMES++;
152 1
153 1 if(TR0==0) TR0=1;
154 1 else if(TR0==1)
155 1 {
156 2 TH0_BUF=TH0;
157 2 TL0_BUF=TL0;
158 2 TH0=0;
159 2 TL0=0;
160 2 //RCV_BIT_FLAG=1; //置标志位
161 2 TR0=1; //开始下一个脉冲的检测
162 2
163 2 RCV_BIT();
164 2 }
165 1 }
166
167
168 //void Time0(void) interrupt 1
169 //{
170 //RH_CODE=INT0_TIMES+(START_FLAG==1)*256*16;
171
172 // INT0_TIMES=0;
173 // RCV_BIT_FLAG=0;
174 // TH0=0;
175 // TL0=0;
176 // TR0=0;
177 // RCV_SUS();
178 // }
C51 COMPILER V7.50 HONGWAI 07/08/2007 15:24:16 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 668 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 16 2
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -