?? main.c
字號:
/*********顯示的結果為d=**** c (范圍:005-070 cm)*******/
/******P3^0輸出38KHZ方波;P3.2接收返回信號*************/
#include <reg52.h>
#include <intrins.h>
#define ulong unsigned long int
#define uchar unsigned char
#define uint unsigned int
sbit RS = P3^5;//RS=H 數據輸入;RS=L時 指令輸入;
sbit RW = P3^6;//RW=H 讀數據 ;RW=L時 寫數據 ;
sbit E = P3^7;//E =H->L 信號使能;
sbit led=P3^4;
extern void cs_t(void);
extern void delay(uint);
data uchar testok;
float speed=0; // 聲音速度
unsigned long time;
uchar disp_buf[4]={0,0,0,0};//顯示緩沖區
uchar code dis_code[]={"Distance is:"};
/***********顯示延時函數***************/
void delay_a(uchar z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void Delay_MS(unsigned char no)
{
unsigned char i,j; //延時參數
for(; no>0; no--)
{
for(i=0; i<100; i++)
for(j=0; j<100; j++);
}
}
/********************************************************************\
|* 函 數 名: write_command(uchar tempdata) *|
|* 功能描述: 將數據碼寫入LCD數據寄存器 *|
\********************************************************************/
void write_command(uchar tempdata)
{
RW=0;
RS=0; //RS=0/RW=0 時寫指令;
delay_a(5);
P1=tempdata;
delay_a(5);
E=1;
delay_a(5);
E=0;
}
/********************************************************************\
|* 函 數 名: void write_data(uchar tempdata) *|
|* 功能描述: 寫LCD1602使能程序 *|
\********************************************************************/
void write_data(uchar tempdata)
{
RW=0;
RS=1; //RS=1/RW=0 時寫數據;
delay_a(5);
P1=tempdata;
delay_a(5);
E=1;
delay_a(5);
E=0;
}
/*********液晶顯示距離函數*************/
void display(uint dis_data)
{
uint i;
disp_buf[3] =(dis_data % 10);
dis_data /= 10;
disp_buf[2] =(dis_data % 10);
dis_data /= 10;
disp_buf[1] =(dis_data % 10);
disp_buf[0] =(dis_data / 10);
write_command(0xc0+2);
for(i=0;i<4;i++)
{
write_data(0x30+disp_buf[i]);
delay_a(9);
}
}
/********************* 超聲波接收程序(外部中斷0)*******************/
void cs_r(void) interrupt 0 using 1
{
TR0 = 0;
ET0 = 0;
EX0 = 0;
testok = 1;
}
/********************* 超時清除程序(內部中斷T0)********************/
void overtime(void) interrupt 1 using 1
{
EX0 = 0;
TR0 = 0;
ET0 = 0;
testok = 2;
}
void init()
{
uint i;
time=0;
speed = 332 + 0.607*15.0;//聲速
write_command(0x01);
write_command(0x38);
write_command(0x0C);
write_command(0x06);
write_command(0x80);
for(i=0;i<12;i++)
{
write_data(dis_code[i]);//字符顯示
delay_a(5);
}
write_command(0xc0);
write_data(0x64);
delay_a(4);
write_data(0x3d);
delay_a(4);
display(time);
write_command(0xc0+6);
write_data(0x63);
delay_a(4);
write_data(0x6d);
delay_a(4);
TMOD=0x11;
EA=1;
led=1;
}
//=========================主函數============================//
void main(void)
{
init();
while(1)
{
cs_t();
delay(1);
testok = 0;
EX0 = 1;
ET0 = 1;
//IT0=1;//下降沿觸發;
while(!testok)
if(testok==1)
{ time = TH0;
time = (time<<8)|TL0; // uS
time *= speed/2; // *速度(m/S) / 2
time /= 10000; // /1000000(m)*100(cm)
led=0;
}
else
{led=1;}
display(time);//顯示時間
Delay_MS(18);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -