完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include #include #define uint unsigned int #define uchar unsigned char ***it RS = P2^6; //Pin4 ***it RW = P2^5; //Pin5 ***it E = P2^7; //Pin6 ***it BEEP = P1^5; ***it FM = p3^0; //***it FMQ = P2^3; #define Data P0 //数据端口 char data table[]="level:"; char data table1[]="speed:"; /******************************************************************/ /* 函数声明 */ /******************************************************************/ /******************************************************************/ /* 微秒延时函数 */ /******************************************************************/ void DelayUs(unsigned char us)//delay us { unsigned char uscnt; uscnt=us>>1; //12MHz while(--uscnt); } void warning() { 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); //display mode WriteCommand(0x38); //display mode WriteCommand(0x38); //display mode WriteCommand(0x06); //显示光标移动位置 WriteCommand(0x0c); //显示开及光标设置 WriteCommand(0x01); //显示清屏 } ***it TRING=P2^0; //输出触发控制10usTTl电平 ***it ECH0=P2^1; //回响信号输出 uchar flag,flag1,i; void cheak_distanceinit() // HY-SRF05初始化 { TMOD=0x11; TH0=0; TL0=0; TH1=(65536-15)/256; TL1=(65536-15)%256; EA=1; ET0=1; ET1=1; TR0=0; TR1=0; flag=0; ECH0=0; TRING=0; } void start() //HY-SRF05测距开始触发 { TH1=(65536-15)/256; TL1=(65536-15)%256; TR1=1; TRING=1; while(flag==1); TR1=0; TRING=0; flag=0; flag1=0; } uint cheak_recievetime() //接受回响信号 { TH0=0; TL0=0; while(flag1==0) { TR0=1; while(ECH0==1)flag1=1; ECH0=0; TR0=0; } return TH0*256+TL0; } float count_distance(uint 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); DelayMs(10); } WriteCommand(0x80+0x40); for(i=0;i<6;i++) { WriteData(table1); 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() interrupt 3 { TH1=(65536-12)/256; TL1=(65536-12)%256; flag=1; } #include #include #define uchar unsigned char #define uint unsigned int ***it EOC=P2^0; //ADC0808控制引脚设定 ***it OE=P2^1; ***it START=P2^2; ***it CLK=P2^3; ***it DP=P1^7; ***it beep = P2^4; //蜂鸣器报警引脚 ***it red = P2^5; //点滴流速上限红色灯报警引脚 ***it yellow = P2^6; //点滴流速下限黄色灯报警引脚 ***it moto = P2^7; //电机控制引脚 ***it xuan1 = P3^5; //点滴流速上限140滴/分钟 下限10滴/分钟 ***it xuan2 = P3^6; //点滴流速上限130滴/分钟 下限20滴/分钟 ***it xuan3 = P3^7; //点滴流速上限120滴/分钟 下限30滴/分钟 uint DATA; uchar code tab[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管编码码 uchar adc_data[]={0,0,0,0}; //存放放4位电压值 /******************************************* 函数名称:init() 功 能:系统初始化 定时器中断设置 参 数:无 返回值 :无 ********************************************/ void init() { TMOD=1; TH0=0xff; TL0=0x38; //200us f=5k 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()//p1段码 p3位码 { uchar s,f=0xf7; adc_data[0]=DATA/1000; adc_data[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 P3=f; if(s==2) DP=1; delay(10); P1=0; f=_cror_(f,1); } } /******************************************* 函数名称:upper_limit(uchar i) 功 能:水位上限报警 子程序 参 数: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; //16进制数据 读取ADC0808 压力传感器电压值 DATA=s*1.0/255*1500; //将电压值转化为点滴流速的数据 } display(); //点滴流速显示 if(xuan1 == 0) //点滴流速上限140滴/分钟 下限10滴/分钟 { if(DATA<100) { lower_limit(100); } if(DATA>1400) { upper_limit(100); } } if(xuan2 == 0) //点滴流速上限130滴/分钟 下限20滴/分钟 { if(DATA<200) { lower_limit(100); } if(DATA>1300) { upper_limit(100); } } if(xuan3 == 0) //点滴流速上限120滴/分钟 下限30滴/分钟 { if(DATA<300) { lower_limit(100); } if(DATA>1200) { upper_limit(100); } } } } |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
12105 浏览 2 评论
4443 浏览 3 评论
3674 浏览 5 评论
9407 浏览 47 评论
4447 浏览 9 评论
668浏览 0评论
474浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-28 16:54 , Processed in 0.549702 second(s), Total 83, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号