單片機倒車雷達測距proteus仿真圖如下,附帶源碼和仿真工程文件
0.jpg (81.53 KB, 下載次數: 81)
下載附件
2018-1-10 01:05 上傳
0.jpg (46.7 KB, 下載次數: 61)
下載附件
2018-1-10 01:05 上傳
單片機源程序如下:
- #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)
2018-1-9 19:22 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|