单片机倒车雷达测距proteus仿真图如下,附带源码和仿真工程文件
单片机源程序如下:
- #include <reg51.h>
- #include "intrins.h"
- #include "Lcd1602.h"
- #define uchar unsigned char
- #define uint unsigned int
- sbit BEEP = P1^6; //报警提示口
- sbit vout = P1^7; //脉冲发送口
- sbit P3_2 = P3^2; //中断接收口
- //sbit INT = P1^6;
- bit flag;
- //unsigned char discol[4]={0xef,0xdf,0xbf,0x7f};
- unsigned char code Anum_code[]={"0123456789"};
- //unsigned char disbuf[4]={0,1,2,3};
- float high,low;
- unsigned char qian,bai,shi,ge;
- //unsigned char j=600;
- /*void delay_1ms(void) //12mhz delay 1.01ms
- {
- unsigned char x,y;
- x=3;
- while(x--)
- {
- y=40;
- while(y--);
- }
- }
- void delay_1us(unsigned char i) //i=1, 5us; i=2,7us; i=3,9us
- {
- while(--i);
- }*/
- void delay_50us(unsigned int t) // t=100, 5ms; t=1000, 50ms
- {
- unsigned char j;
- for(;t>0;t--)
- for(j=19;j>0;j--);
- }
- /*void delay_50ms(unsigned int t) // t=10, 500ms; t=100, 5s;
- {
- unsigned int j;
- for(;t>0;t--)
- for(j=6245;j>0;j--);
- }*/
- void display(void)
- {
- Write_Comm(0x01); //清显示屏
- Write_Comm(0x80);
- Write_Data(Anum_code[qian]);
- //Write_Comm(0x80);
- Write_Data(Anum_code[bai]);
- //Write_Comm(0x80);
- Write_Data(Anum_code[shi]);
- //Write_Comm(0x83);
- Write_Data(Anum_code[ge]);
- }
- void work(void)
- {
- //unsigned char qian,bai,shi,ge;
- float value;
- value=(high*256+low)*17/100;
- qian=value/1000;
- bai=(value-qian*1000)/100;
- shi=(value-qian*1000-bai*100)/10;
- ge=value-qian*1000-bai*100-shi*10;
- if(value<=1000)
- {
- BEEP=0;
- }
- else
- {
- BEEP=1;
- }
- /*disbuf[0] = qian;
- disbuf[1] = bai;
- disbuf[2] = shi;
- disbuf[3] = ge;*/
- }
- main()
- {
- //unsigned char i;
- //unsigned int t;
- Lcd_Init();
- TMOD = 0x11;
- TH0 = 0;
- TL0 = 0;
- TH1 = 0;
- TL1 = 0;
- P0 = 0xff;
- P1 = 0xff;
- P2 = 0xff;
- P3 = 0xff;
- //EX0 = 1; //允许外部中断0
- ET1 = 1; //允许定时器1中断
- EA = 1;
- TR1 = 1;
- while(1)
- {
- //display();
- if(flag)
- {
- EA = 0;
- work();
- //EA = 0;
- display();
- //delay_50ms(100);
- //for(i=5;i>0;i--)
- //for(t=6245;t>0;t--);
- flag = 0;
- ET0 = 0; //禁止定时器0中断
- TH0 = 0;
- TL0 = 0;
- ET1 = 1;
- TR1 = 1;
- EA = 1;
- }
- }
- }
- void INTT1() interrupt 3
- {
- unsigned char i;
- EA = 0;
- TR1 = 0;
- EX0 = 0; //禁止外部中断
- TH0 = 0;
- TL0 = 0;
- TH1 = 0;
- TL1 = 0;
- EA = 1;
- TR0 = 1;
- for(i=0;i<4;i++)
- {
- vout = ~vout;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- }
- delay_50us(40);
- EX0 = 1; //开启外部中断
- //ET0 = 1; //允许定时器0中断
- /*if(j==600)
- {
- j=j+200;
- TR0 = 1;
- EX0 = 1; //开启外部中断
- delay_50us(j);
- INT=0;
- }
- else
- {
- j=j-200;
- TR0 = 1;
- EX0 = 1; //开启外部中断
- delay_50us(j);
- INT=0;
- }*/
-
- }
- void PINT0() interrupt 0
- {
- //_nop_();
- TR0 = 0; //关闭定时器0
- EX0 = 0;
- EA = 0;
- low = TL0;
- high = TH0;
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
超声波测距及报警程序.rar
(67.67 KB, 下载次数: 166)
|