📄 01.lst
字号:
C51 COMPILER V9.00 01 01/08/2012 15:16:23 PAGE 1
C51 COMPILER V9.00, COMPILATION OF MODULE 01
OBJECT MODULE PLACED IN 01.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 01.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*2012.1.8 编写完毕 BY:CMY 平台:倒车报警手工版*/
2
3 #include "reg51.h"
4 #include <intrins.h>
5 #define uchar unsigned char
6 #define uint unsigned int
7 #define ulong unsigned long
8 sbit transfer=P1^0;
9 sbit receiver=P3^2;
10 sbit speak =P2^0;
11 /*数码管位选控制*/
12 sbit ledwei0=P2^4;
13 sbit ledwei1=P2^5;
14 sbit ledwei2=P2^6;
15 sbit ledwei3=P2^7;
16 sbit m=P1^5;
17 sbit n=P1^6;
18 uchar TimerH,TimerL,temp,a,b;
19 ulong realTimer; //存放真测量时间
20 ulong real_dis; //存放测量距离
21 uint dis_flag; //距离计算标志位
22
23 uint wei0,wei1,wei2,wei3;
24 uchar ledflag=0; //数码管标志位,用于刷新
25 uchar send_flag=0;
26 uchar count=0; //定时器T0计数
27 uchar ledcode[11]={
28 0x18,/*0*/
29 0x7B,/*1*/
30 0x2C,/*2*/
31 0x29,/*3*/
32 0x4B,/*4*/
33 0x89,/*5*/
34 0x88,/*6*/
35 0x3B,/*7*/
36 0x08,/*8*/
37 0x09,/*9*/};
38
39 /*延时函数*/
40 void delay(uint count)
41 {
42 1 while(count--);
43 1 }
44
45 /*超声波发送函数--40KHZ*/
46 void CLK40K()
47 {
48 1 uchar i=4; //发送的波形数量=(i/2)
49 1 TR0=1; //START TIME0,同时发送40KHZ方波
50 1 do
51 1 {
52 2 transfer=~transfer;
53 2 _nop_ ();
54 2 _nop_ ();
55 2 _nop_ ();
C51 COMPILER V9.00 01 01/08/2012 15:16:23 PAGE 2
56 2 _nop_ ();
57 2 _nop_ ();
58 2 _nop_ ();
59 2 _nop_ ();
60 2 _nop_ ();
61 2 _nop_ ();
62 2 }
63 1 while(--i);
64 1 }
65
66 /*距离测量函数*/
67 void distance(void)
68 {
69 1 realTimer=TimerH*256+TimerL;
70 1 real_dis=realTimer*164/10000; //单位cm
71 1 wei0=real_dis%10;
72 1 wei1=(real_dis/10)%10;
73 1 wei2=(real_dis/100)%10;
74 1 wei3=real_dis/1000;
75 1 }
76
77 /*显示刷新函数函数*/
78 void display(void)
79 {
80 1 switch(ledflag)
81 1 {
82 2 case 0:P0=ledcode[wei0];ledwei0=0;ledwei1=1;ledwei2=1;ledwei3=1;break;
83 2 case 1:P0=ledcode[wei1];ledwei0=1;ledwei1=0;ledwei2=1;ledwei3=1;break;
84 2 case 2:P0=ledcode[wei2];ledwei0=1;ledwei1=1;ledwei2=0;ledwei3=1;break;
85 2 case 3:P0=ledcode[wei3];ledwei0=1;ledwei1=1;ledwei2=1;ledwei3=0;break;
86 2 }
87 1
88 1 ledflag++;
89 1 if(ledflag==4)
90 1 ledflag=0;
91 1 // delay(0x80);//768us=0.768ms//520次
92 1 }
93
94 /*报警处理函数*/
95 void alarm(void)
96 {
97 1 long int i;
98 1 if(real_dis>=100)
99 1 for(i=1;i<800;i++)
100 1 {
101 2 if(i<400)
102 2 {m=1;n=0;}
103 2 if(i>400)
104 2 {m=0;n=1;}
105 2 P0=0xff;
106 2 speak^=1;
107 2 delay(500);
108 2 }
109 1 else
110 1 {
111 2 speak=1;
112 2 }
113 1 }
114 /*系统初始化程序*/
115 void init()//系统初始化
116 {
117 1 temp=0xff;
C51 COMPILER V9.00 01 01/08/2012 15:16:23 PAGE 3
118 1 P1=temp;
119 1 TMOD=0X11; //初始化定时器T0,T1用于产生40hz发射波
120 1 TH0=0x00;
121 1 TL0=0x00;
122 1 TH1=0x00;
123 1 TL1=0x00;
124 1 TF1=0;
125 1 PX0=1;
126 1 ET1=1;
127 1 EA=1;
128 1 TR1=1; //启动定时器1
129 1 IT0=0; //外部低电平触发方式
130 1 }
131
132
133 void int0(void) interrupt 0 //关闭计数器,存计数值,置标志
134 {
135 1
136 1 EA=0; //关闭中断
137 1 EX0=0; //关外部中断
138 1 TimerL=TL0; //读取数值
139 1 TimerH=TH0;
140 1 TR0=0; //关闭定时器0
141 1 TH0=0x00;
142 1 TL0=0x00;
143 1 dis_flag=1; //距离计算标志
144 1 }
145
146 void time1(void) interrupt 3
147 {
148 1 TF1=0;
149 1 TH0=0x00;
150 1 TL0=0x00;
151 1 TH1=0x00;
152 1 TL1=0x00;
153 1 send_flag=1; //开启接收回波中断
154 1 }
155
156 /*系统主函数*/
157 void main()
158 {
159 1 // unsigned int i,j;
160 1 init(); //系统初始化
161 1 real_dis=90; //y预设初值,防止开机未发射超声波,电机锁死
162 1 delay(0x40);
163 1 while(1)
164 1 {
165 2 if(send_flag==1)
166 2 {
167 3 send_flag=0;
168 3 CLK40K();
169 3 delay(0x40); //延时,避开发射的直达声波信号,可以调节测量的最小距离
170 3 EX0=1;
171 3 }
172 2 if(dis_flag==1)
173 2 {
174 3 dis_flag=0;
175 3 distance();
176 3 EA=1;
177 3 }
178 2 display(); //调用显示函数
179 2 if(real_dis>=100)
C51 COMPILER V9.00 01 01/08/2012 15:16:23 PAGE 4
180 2 delay(300);
181 2 display(); //调用显示函数
182 2 alarm();
183 2 }
184 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 590 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 37 4
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -