#include<reg51.h>
#include<intrins.h>
#define unit unsigned int
#define unchar unsigned char
sbit RS=P2^6;
sbit RW=P2^5;
sbit E=P2^7;
sbit BEEP=P1^5;
sbit FM=P3^0;
sbit FMQ=P2^3;
#define Data P0
char data tadle[]="level:";
char data table[]="speed:";
/********************/
/* 函数声明 */
/********************/
/********************/
/* 微秒延时函数 */
/********************/
void DelayUs(unsigned char us)
{
unsigned char uscnt;
uscnt=us>>1;
while(-uscnt);
}
void waring()
{
BEEP=~BEEP;
}
/********************/
/* 毫秒函数声明 */
/********************/
void DelayMs(unsigned char ms)
{
while(--ms)
{
DelayUs(250);
DelayUs(250);
DelayUs(250);
DelayUs(250);
}
}
/********************/
/* 写入命令函数 */
void Writecommand(unsigned char c)
{
DelayMs(5);
E=0;
RS=0;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
}
/********************/
/* 写入数据函数 */
/********************/
void WriteData(unsigned char c)
{
DelayMs(5);
E=0;
RS=1;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
RS=0;
}
/*******************/
/* 初始化函数 */
/*******************/
void InitLcd()
{
DelayMs(15);
WriteCommand(0x38);
WriteCommand(0x38);
WriteCommand(0x38);
WriteCommand(0x06);
WriteCommand(0x0c);
WriteCommand(0x01);
}
sbit TRING=P2^0;
sbit ECH0=P2^1;
uchar ;flag,flag1,i;
void cheak_distanceinit()
{
TMOD=0x11;
TH0=0;
TL0=0;
TH1=(65536-15)/256;
TL1=(65536-15)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=0;
flag=0;
ECH0=0;
TRING=0;
}
void start()
{
TH1=(65536-15)/15;
TL1=(65536-15)%256;
TR1=1;
TRING=1;
while(flag=1);
TR1=0;
TRING=0;
flag=0;
flag1=0;
}
unit cheak_recieve
time()
{
TH0=0;
TL0=0;
while(flag1==0);
{
TR0=1;
while(ECH0==1)flag=1;
ECH0=0;
TR0=0;
}
return TH0*256+TL0;
}
float count_distance(unit x)
{
float date;
date=(float)x*340/2/10000;
return date;
}
/********************/
/* 主函数 */
/********************/
main()
{
float dis_date=0;
uint time,date1=0,date2=0,baifen,shifen,ge,i,teep;
Initlcd();
cheak_distanceinit();
WriteCommand(0x80);
for(i=0;i<6;i==)
{
WriteData(table[i]);
DelayMs(10);
}
WriteCommand(0x80+0x40);
for(i=0;i<6;i++)
{
WriteData(table[i]);
DelayMs(10);
}
while(1)
{
start();
time=cheak_recievetime();
dis_date=count_distance(time);
date1=dis_date;
teep=dis_date;
if(teep>500)
warning();
else
BEEP=1;
ge=date1/100;
shifen=date1/10%10;
baifen=date1%10;
WriteCommand(0x80+0x07);
WriteData(ge+0x30);
DelayMs(10);
WriteData('.');
WriteData(shifen+0x30);
DelayMs(10);
WriteData(baifen+0x30);
DelayMs(10);
}
}
void start_timer0() interrupt3
{
TH1=(65536-12)/256;
TL1=(65536-12)%256;
flag=1;
}
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit EOC=P2^0;
sbit OE=P2^1;
sbit START=P2^2;
sbit CLK=P2^3;
sbit DP=P1^7;
sbit beep=P2^4;
sbit red=P2^5;
sbit yellow=P2^6;
sbit moto=P2^7;
sbit xuan1=P3^5;
sbit xuan2=P3^6;
sbit xuan3=P3^7;
Uint DATA;
uchar code-tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar adc_data[]={0,0,0,0};
/********************
函数名称:init()
功能:系统初始化 定时器中断设置
参数:无
返回值:无
********************/
void init()
{
TMOD=1;
TH0=0xff;
TL0=0x38;
EA=1;
ET0=1;
TR0=1;
}
/********************
函数名称tim0() interrupt 1
功能:定时器中断为ADC0808提供转换需要的时钟信号
参数:无
返回值:无
********************/
void tim0() interrupt 1
{
TH0=0xff;
TL0=0x38;
CLK=!CLK;
}
/*******************
函数名称:delay()
功能:延时函数 大约0.1ms
参数:无
返回值:无
******************/
void delay(uint i)
{
uchar j;
for(;i>0;i--);
for(j=200;j>0;j--);
}
/******************
函数名称:display()
功能:数码管显示函数 将电压值显示出来
参数:无
返回值:无
******************/
void display()
{
vchar s,f=0xf7;
adc_data[0]=DATA/1000;
adc_datd[1]=DATA%1000/100;
adc_data[2]=DATA%1000%100/10;
adc_data[3]=0;
for(s=0;s<4;s++)
{
P1=tab[adc_data[s]];
P3=f;
if(s==2)
DP=1;
delay(10);
P1=0;
f=_cror_(f,1);
}
}
/*****************
函数名称:upper_limit(uchar i)
功能:水位上限报警 子程序
返回值:无
******************/
void upper_limit(uchar i)
{
for(;i>0;i--);
{
red=1;
beep=1;
yellow=0;
moto=1;
delay(1);
red=0;
beep=0;
yellow=0;
moto=1;
delay(1);
}
}
/*****************
函数名称:lower_limit(uchar i)
功能:水位下限报警 子程序
参数:i用来表示 闪烁数字
返回值:无
******************/
void lower_limit(uchar i)
{
for(;i>0;i--)
{
red=0;
beep=1;
yellow=1;
moto=0;
delay(1);
red=0;
beep=0;
yellow=0;
moto=0;
delay(1);
}
}
/*****************
函数名称:main()
功能:
参数:
返回值:无
******************/
void main()
{
uchar s,i;
red=0;
yellow=0;
beep=0;
moto=1;
xuan1=1;
xuan2=1;
xuan3=1;
init();
while(1)
{
for(i=2;i>0;i--);
{
START=1;
OE=0;
START=0;
while(EOC=0);
OE=1;
s=P0;
DATA=s*1.0/255*1500;
}
display();
if(xuan1==0)
{
if(DATA<200)
{
lower_limit(100);
}
if(DATA>1400)
{
upper_limit(100);
}
}
if(xuan2==0)
{
if(DATA<200)
{
lower_limit(100);
}
if(DATA>1300)
{
upper_limit(100);
}
}
if(xuan3==0)
{
if(DATA<300)
{
lower_limit(100);
}
if(DATA>1200)
{
upper_limit(100);
}
}
}
}
keil中进行生成hex文件是出现两个错误,求指导。
-
-
-
2、while(flag=1);应该是while(flag==1);
3、#define unit unsigned int和使用的uint不一样。
亲,这个几个问题和编译器没关系啊!
一周热门 更多>