📄 hongwai.lst
字号:
C51 COMPILER V7.06 HONGWAI 12/02/2008 16:20:57 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE HONGWAI
OBJECT MODULE PLACED IN hongwai.OBJ
COMPILER INVOKED BY: D:\Keil3\C51\BIN\C51.EXE hongwai.c BROWSE DEBUG OBJECTEXTEND
stmt level source
*** WARNING C500 IN LINE 1 OF HONGWAI.C: MISSING DEVICE (SECURITY KEY NOT FOUND)
1 /******************************************************************
2 /* *
3 /* OK200E单片机开发系统演示程序 *
4 /* *
5 /* 版本: V2.0 (2007/11/20) *
6 /* 作者: 高山流水 (Email: aoke999@sohu.com) *
7 /* 网站: www.aokemcu.cn(奥科电子) *
8 /* *
9 /* *
10 /******************************************************************/
11
12 #include <reg52.h> //51芯片管脚定义头文件
13 #include <intrins.h> //内部包含延时函数 _nop_();
14
15 #define uchar unsigned char
16 #define uint unsigned int
17
18 //#define DELAYNUM 40 //该数值可以调节显示的速度
19 sbit SDATA_595=P1^5; //串行数据输入
20 sbit SCLK_595 =P1^6; //移位时钟脉冲
21 sbit RCK_595 =P1^7; //输出锁存器控制脉冲
22 sbit CS_LED8 =P1^1; //片选
23 sbit CS_1302 =P1^4;
24 sbit IRIN = P3^2; //红外接收器数据线
25 sbit BEEP = P3^7; //蜂鸣器驱动线
26 sbit DCMOTO = P3^4; //直流电机驱动线
27
28
29 //uchar code table[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};
30 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
31 uchar IRCOM[]={0x00,0x00,0x00,0x00,0x10,0x10};
32 uchar dis[8];
33
34 void delay(unsigned char x);
35 void display();
36 void beep();
37
38
39 /*******************************************************
40 * *
41 * 主函数 *
42 * *
43 *******************************************************/
44 main(void)
45 {
46 1 // uchar k;
47 1 TMOD|=0x01;
48 1 TH0=0Xfc;
49 1 TL0=0X66;
50 1 TR0=1;
51 1 EA=1;
52 1 ET0=1;
53 1 EX0=1;
54 1 IP=0X01;
C51 COMPILER V7.06 HONGWAI 12/02/2008 16:20:57 PAGE 2
55 1 CS_1302=0;
56 1 DCMOTO=0;
57 1 while(1)
58 1 {
59 2 dis[7]=table[IRCOM[4]];
60 2 dis[6]=table[IRCOM[5]];
61 2 // display();
62 2 if(IRCOM[2]==0x01) DCMOTO=~DCMOTO; //启动电机
63 2 if(IRCOM[2]==0x02) DCMOTO=0; //停止电机
64 2 }
65 1
66 1 } //end of main()
67
68 void timer0(void) interrupt 1
69 {
70 1 TH0=0Xfc;
71 1 TL0=0X66;
72 1 display();
73 1 }
74
75 /*******************************************************
76 * *
77 * 显示函数 *
78 * *
79 *******************************************************/
80
81 void display()
82 {
83 1 uchar num,c,i;
84 1 for(i=0;i<8;i++)
85 1 {
86 2 num=dis[i];
87 2 CS_LED8=0;
88 2 for(c=0;c<8;c++)
89 2 {
90 3 SCLK_595=0;
91 3 num=num<<1;
92 3 SDATA_595=CY;
93 3 SCLK_595=1;
94 3 SCLK_595=0;
95 3 }
96 2 num=~(1<<i);
97 2 for(c=0;c<8;c++)
98 2 {
99 3 SCLK_595=0;
100 3 num=num>>1;
101 3 SDATA_595=CY;
102 3 SCLK_595=1;
103 3 SCLK_595=0;
104 3 }
105 2 RCK_595=0;
106 2 _nop_();
107 2 _nop_();
108 2 RCK_595=1;
109 2 _nop_();
110 2 _nop_();
111 2 RCK_595=0;
112 2 delay(1);
113 2 CS_LED8=1;
114 2 }
115 1 }
116
C51 COMPILER V7.06 HONGWAI 12/02/2008 16:20:57 PAGE 3
117 void IR_IN() interrupt 0 //using 0
118 {
119 1 unsigned char j,k,N=0;
120 1 EA = 0;
121 1 delay(10);
122 1
123 1 if (IRIN==1)
124 1 {
125 2 EA =1;
126 2 return;
127 2 }
128 1 //确认IR信号出现
129 1 while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
130 1 {
131 2 delay(1);
132 2 }
133 1 while (IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
134 1 {
135 2 delay(1);
136 2 }
137 1 for (j=0;j<4;j++) //收集四组数据
138 1 {
139 2 for (k=0;k<8;k++) //每组数据有8位
140 2 {
141 3 while (IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
142 3 {
143 4 delay(1);
144 4 }
145 3 while (!IRIN) //等 IR 变为高电平
146 3 {
147 4 delay(1);
148 4 }
149 3 while (IRIN) //计算IR高电平时长
150 3 {
151 4 delay(1);
152 4 N++;
153 4 } //高电平计数完毕
154 3 if (N>=30)
155 3 {
156 4 EA=1;
157 4 return; //0.14ms计数过长自动离开。
158 4 }
159 3 IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0”
160 3 if (N>7)
161 3 {
162 4 IRCOM[j] = IRCOM[j] | 0x80;
163 4 } //数据最高位补“
164 3 N=0;
165 3 }//end for k
166 2 }//end for j
167 1 /*
168 1 if (IRCOM[2]!=~IRCOM[3]) //接收时间是否正确
169 1 {
170 1 EA=1;
171 1 return;
172 1 }
173 1
174 1 if(IRCOM[0]!=0x00) //比较用户码
175 1 {
176 1 EA=1;
177 1 return;
178 1 }*/
C51 COMPILER V7.06 HONGWAI 12/02/2008 16:20:57 PAGE 4
179 1 IRCOM[4]=IRCOM[2] & 0x0F; //取键码的低四位
180 1 IRCOM[5]=IRCOM[2] >> 4; //右移4次,高四位变为低四位
181 1
182 1 beep();
183 1
184 1 EA = 1;
185 1 }
186
187 /**********************************************************/
188 void beep()
189 {
190 1 unsigned char i;
191 1 for (i=0;i<180;i++)
192 1 {
193 2 delay(6);
194 2 BEEP=!BEEP; //BEEP取反
195 2 }
196 1 BEEP=1; //关闭蜂鸣器
197 1 }
198 /**********************************************************/
199 void delay(unsigned char x) //x*0.14MS
200 {
201 1 unsigned char i;
202 1 while(x--)
203 1 {
204 2 for (i = 0; i<13; i++) {}
205 2 }
206 1 }
207
208 /**********************************************************/
209
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 460 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 14 5
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -