📄 main.c
字号:
#include <reg52.h>
#include "LCD_Dis.h"
#include"math.h"
#include "main.h"
#include "ISD4004.c"
//#include "stdio.h"
//#include "stdlib.h"
sbit led1 = P1^7; // 红灯
sbit led2 = P1^6; // 黄灯
sbit led3 = P1^5; //绿灯
uint s = 0 ;
uint num[12] = {0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90,0xa0,0xb0} ; //语音报数对应低位地址0 ~ 米
uchar ad_l,ad_h ;
uchar dat=0;
uchar r_buff[9];
uchar r_in;
uchar j;
uint sum,kk;
uchar r_len;
bit urtflag;
#include "shoufa.c"
#include "18B20.c"
//普通延时函数
void commen_delay(uint k)
{
uint i ,j ;
for(i = 0 ; i < k ; i ++)
for(j = 0 ; j < 121 ; j ++)
;
}
//将温度转换为LCD显示的数据
void cover(signed int t)
{
unsigned int a; //因Proteus中18b20无小数,所以这里只作整数部分
if(t<0) //判断正负温度
{FontSet(0,0xff);
PutString(40,6,"-"); //+0x2d 为变"-"ASCII码
}
else
{FontSet(0,0xff);
PutString(40,6,"+"); //+0xfe 为变" "ASCII码
}
a=abs(t);
FontSet(0,0xff);
PutChar(48,6,a%10000/1000+0x30);
PutChar(56,6,a%1000/100+0x30);
PutString(64,6,".");
PutChar(72,6,a%100/10+0x30);
PutChar(80,6,a%10+0x30);
// PutChar(88,6,(a*1000)%10+0x30);
}
//显示题目名
show_name()
{
FontSet(2,0xff); //选择自定义的汉字字符
PutChar(16,0,0); //显示,超
PutChar(32,0,1); //显示,声
PutChar(48,0,2); //显示,波
PutChar(64,0,3); //显示,测
PutChar(80,0,4); //显示,距
PutChar(96,0,5); //显示,议
//PutChar(96,0,4);
PutChar(8,2,6); //显示距
PutChar(24,2,7); //显示离
FontSet(0,0xff);
PutChar(40,2,':') ;
PutChar(64,2,'.');
PutChar(96,2,'m') ;
}
//显示距离
/*void show_s(uint n)
{ s = n;
FontSet(0,0xff);
PutChar(56,2,s/100+0x30);
PutChar(72,2,(s%100)/10+0x30);
PutChar(80,2,s%10+0x30);
}*/
//初始化程序
//初始化单片机,并等待按键按下
void in_stc()
{
P0 = P1 = P2 = P3 = 0xff;//初始化
isd_pu();//AN键按下,isd上电并延迟50ms
isd_pd();
isd_pu();
}
//接收数据并处理
get_s()
{ unsigned long int t ;
signed int tmpvalue3;
float j;
tmpvalue3 = gettemp1();
j = getTmpValue(tmpvalue3);
if(urtflag==1)
{
urtflag=0;
putbyte(r_buff[0]);
putbyte(r_buff[1]);
putbyte(r_buff[2]);
putbyte(r_buff[3]);
putbyte(r_buff[4]); //接发射方发过来的数据
t = (r_buff[3] *256)+ r_buff[2] ;
//v = (331.4 + 0.43 * j);
//s = (t * v) /1000 ;
//s = (t * v)/1000 ;
//s= (331.4 + 0.43 * j)*t/1000 ;
s = (t * 17)/1000 ;
// if ( s < 32) s = 10+rand()%25 ;
if (s > 100 && s < 410) s = s + 2 ;
if(s > 410 ) s = s + 3 ;
}
//return s ;
}
//显示距离
void show_s()
{
FontSet(0,0xff);
PutChar(56,2,s/100+0x30);
PutChar(72,2,(s%100)/10+0x30);
PutChar(80,2,s%10+0x30);
}
//报告危险距离
void show_word ()
{ float m;
m = s*1.0/100;
FontSet(2,0xff);
if (m > 0.1&&m < 0.5 ) //危险距离
{
led2 = 1;
led3 = 1;
led1 = 0;
PutChar(16,4,8); //选择自定义的汉字字符
PutChar(32,4,9); //显示"危险距离"
PutChar(48,4,6);
PutChar(64,4,7);
PutChar(80,4,14);
//{m0 = 1 ; m1 = 1 ; m2 = 1 ; m3 = 1 ;} //停车
}
if(m > 0.5 && m < 1.0)
{
led1 = 1;
led3 = 1;
led2 = 0;
PutChar(16,4,10); //选择自定义的汉字字符
PutChar(32,4,11); //显示"保持距离"
PutChar(48,4,6);
PutChar(64,4,7);
PutChar(80,4,14);
}
if(m > 1.0 && m < 2.0)
{
led1 = 1 ;
led2 = 1 ;
led3 = 1 ;
}
if(m > 2.0)
{
led1 = 1;
led2 = 1;
led3 = 0;
PutChar(16,4,12); //选择自定义的汉字字符
PutChar(32,4,13); //显示"安全距离"
PutChar(48,4,6);
PutChar(64,4,7);
PutChar(80,4,14);
}
}
//语音播报距离
void tell_s()
{
isd_pu();//AN键按下,isd上电并延迟50ms
isd_pd();
isd_pu();
play(num[s/100] , 0x00) ; //报距离的米
isd_pd();
isd_pu();
play(0xa0,0x00); //报点字
isd_pd();
isd_pu();
play(num[(s%100)/10],0x00 );//报距离的分米位
isd_pd();
isd_pu();
play(num[s%10],0x00 );//报距离的厘米位
isd_pd();
isd_pu();
play(0xb0 , 0x00);//报米字
isd_pd();
isd_pu();
}
init_timer2()
{
SCON=0x50;
//0101 0000 8位可变波特率,无奇偶效验
RCAP2H=0xff; // Reload value
RCAP2L=0xdc; //11.0592 9600
TH2=0xff; // Initial load value
TL2=0xdc;
TR2=1;
T2CON=0x34; //使用T2作波特率发生器
}
//主函数
void main(void)
{
signed int tmpvalue1,i;
uint s0 = 0 ,n = 0;
// float m;
LCD_Init(); //初始化LCD
FontSet(0,0xff); //选择8X16的ASCII字符
show_name() ; //显示名称
in_stc();
init_timer2();
EA=1;
ES=1;
urtflag=0;
r_in=0;
putbyte(0x55);
FontSet(0,0xff);
PutString(0,6,"TEM:");
while(1)
{ //car_go();
//shan_shuo();
tmpvalue1 = gettemp1();
i = getTmpValue(tmpvalue1);
commen_delay(10);
cover(i);
//get_s() ; //接收数据
//z = get_s() ; //显示三段距离
get_s() ; //接收数据
show_s(); //显示距离
show_word(); //显示提示语
if(s0 != s )
{
s0 = s ;
tell_s() ; //播报实时距离
}
putbyte(0x55);
ES=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -