單片機源程序如下:
- #include<stc15f2k60s2.h>
- #include<intrins.h>
- #include"lcd.h"
- sbit Trig = P3^2;
- sbit Echo = P3^3;
- sbit beep=P1^4;
- unsigned char PuZh[]="distance is ";
- unsigned char code ASCII[15] = {'0','1','2','3','4','5','6','7','8','9','.','-','M'};
- static unsigned char DisNum = 0;
- unsigned int time=0;
- unsigned long S=0;
- bit flag =0;
- unsigned char disbuff[4] ={ 0,0,0,0,};
- void Conut(void)
- {
- time=TH0*256+TL0;
- TH0=0;
- TL0=0;
- S=(time*1.7)/100;
- if((S>=700)||flag==1)
- {
- flag=0;
-
- DisplayOneChar(11, 0, ASCII[11]);
- DisplayOneChar(12, 0, ASCII[10]);
- DisplayOneChar(13, 0, ASCII[11]);
- DisplayOneChar(14, 0, ASCII[11]);
- DisplayOneChar(15, 0, ASCII[12]);
- }
- else
- {
- disbuff[0]=S%1000/100;
- disbuff[1]=S%1000%100/10;
- disbuff[2]=S%1000%10 %10;
- DisplayOneChar(11, 0, ASCII[disbuff[0]]);
- DisplayOneChar(12, 0, ASCII[10]);
- DisplayOneChar(13, 0, ASCII[disbuff[1]]);
- DisplayOneChar(14, 0, ASCII[disbuff[2]]);
- DisplayOneChar(15, 0, ASCII[12]);
- }
- }
- void zd0() interrupt 1
- {
- flag=1;
- }
- void StartModule()
- {
- Trig=1;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- Trig=0;
- }
- void delayms(unsigned int ms)
- {
- unsigned char i=100,j;
- for(;ms;ms--)
- {
- while(--i)
- {
- j=10;
- while(--j);
- }
- }
- }
- void main(void)
- {
- TMOD=0x01;
- TH0=0;
- TL0=0;
- ET0=1;
- EA=1;
- InitLcd1602();
- LcdShowStr(0,0,PuZh);
- while(1)
- {
-
- StartModule();
- while(!Echo);
- TR0=1;
- while(Echo);
- TR0=0;
- Conut();
- delayms(80);
- if(S<20)
- {
- beep=0;
- }
- }
-
- }
- #include"lcd.h"
- void Read_Busy()
- {
- unsigned char sta;
- LCD1602_DB = 0xff;
- LCD1602_RS = 0;
- LCD1602_RW = 1;
- do
- {
- LCD1602_EN = 1;
- sta = LCD1602_DB;
- LCD1602_EN = 0;
- }while(sta & 0x80);
- }
- void Lcd1602_Write_Cmd(unsigned char cmd)
- {
- Read_Busy();
- LCD1602_RS = 0;
- LCD1602_RW = 0;
- LCD1602_DB = cmd;
- LCD1602_EN = 1;
- LCD1602_EN = 0;
- }
- void Lcd1602_Write_Data(unsigned char dat)
- {
- Read_Busy();
- LCD1602_RS = 1;
- LCD1602_RW = 0;
- LCD1602_DB = dat;
- LCD1602_EN = 1;
- LCD1602_EN = 0;
- }
- void LcdSetCursor(unsigned char x,unsigned char y)
- {
- unsigned char addr;
- if(y == 0)
- addr = 0x00 + x;
- else
- addr = 0x40+ x;
-
- Lcd1602_Write_Cmd(addr|0x80);
- }
- //°′???¨??????ê?ò???×?
- void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
- {
- Y &= 0x1;
- X &= 0xF;
- if (Y) X |= 0x40;
- X |= 0x80;
- Lcd1602_Write_Cmd(X);
- Lcd1602_Write_Data(DData);
- }
- void LcdShowStr(unsigned char x,unsigned char y,unsigned char *str)
- {
- LcdSetCursor(x,y);
- while(*str != '\0')
- {
- Lcd1602_Write_Data(*str++);
- }
- }
- void InitLcd1602()
- {
- Lcd1602_Write_Cmd(0x38);
- Lcd1602_Write_Cmd(0x0c);
- Lcd1602_Write_Cmd(0x06);
- Lcd1602_Write_Cmd(0x01);
- }
復制代碼
|