版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include#include#includedelay.h#includeBC7281.h#includelcd.h#define uchar unsigned char#define uint unsigned int#define SET(a,b) a|=(1PORTD|=BIT(3);#define CLR(a,b) a&=(1DDRD&=BIT(3);#define CPL(a,b) a=(1AB,(00=0,01=0, /10=0,11=1)异或=与#define CHK(a,b) (a&(1DDRD=BIT(3); /CHK(PORTD,PD3)=PORTD=BIT(3);ui
2、nt got_num, got_num15,temp;uint S1,S2,S3,S4,get_num,d,D,shu,ru,mi,ma;long int Zchang=0,Jshu=0;unsigned long int value=0;uchar Flag=0,m=0,biaozhi=0,T=0;Mima10=0,1,2,3,4,5,6,7,8,9;uchar table=0,1,2,3,4,5,6,7,8,9; /数码(shm),直接调用 /*got_num发送10个脉冲(michng)的个数;got_num15把数据从小到大排列数组; temp是got_num15交换式据中间(zhng
3、jin)变量*/ /*Flag,m实现循环*/ /*/ /*测距离物体长度*/ /*/void PWM40K_style() DDRD|=BIT(7); TCCR2=0X18;/CTC模式比较匹配触发OC2(OC2为原OC2的取反) OCR2=0X0C; void PWM40K_ON() TCNT2=0X00; TCCR2=0X1A; /CTC模式(msh),8分频void PWM40K_OFF() TCNT2=0X00; TCCR2=0X00;void INT1_init() CLR(DDRD,PD3); /(DDRD&=BIT(3)中断(zhngdun)1设为输入 SET(PORTD,PD
4、3); MCUCR=0X08; /(PORTD|=BIT(3)中断1上升(shngshng)沿触发 GICR&=(1INT1); /中断1标志位清零(低电平触发方式不带中断标志位)void ceju() PWM40K_ON(); delay_nus(250); /发十个脉冲 PWM40K_OFF(); /停止发脉冲 TCNT1=0X0000; /定时器1初始值为0 TCCR1A=0X00; /发完的同时开始计数 TCCR1B=0X02; /开定时器1 GIFR|=(1INTF1); /清中断标志位 delay_nus(700); GICR|=(1INT1); /外部中断1使能 delay_nm
5、s(10); /延时足够的时间,以便下一次使用 66?void distance() /获得距离值,测5次 CLI(); INT1_init(); PWM40K_style(); SEI(); for (m=0;m5;m+) ceju(); #pragma interrupt_handler int1wave:3 /设定中断入口地址void int1wave(void) uchar i,j; GICR&=(1INT1); /关中断(zhngdun)1 TCCR1B=0X00; /关定时器1 got_num=TCNT1; if ( got_num1700) got_num+=130; /补偿(b
6、chng)值 else if ( got_num3800) got_num+=50; /补偿(bchng)值 else got_num-=80; /补偿值 got_num1Flag=got_num; /将测得的值放入数组中 got_num=0; /清零 if (Flag=4) for(j=0;jFlag-1;j+) /把5次数据由小到大排列 for(i=0;i got_num1i+1) temp=got_num1i+1; got_num1i+1= got_num1i; got_num1i=temp; for (i=1;i4;i+) /去掉最小值,去掉最大值,取中间3个 got_num+=got
7、_num1i; got_num= got_num/3; /求平均值 value=got_num*33550/200000; /距离算法,以厘米为单位 /(335.5M/S)=(33550CM/1X106uS): / value=10(发10个波计一次数(csh) / got_num*(33550CM/1X106)=got_num*33550/200000; LCD_write(1,1,物距); wr_byte(:); wr_byte(tablevalue/1000); wr_byte(tablevalue%1000/100); wr_byte(tablevalue%1000%100/10);
8、wr_byte(.); wr_byte(tablevalue%10); wr_byte(C); wr_byte(M); Flag+;/* if (Flag=S2) if(PIND&0 x02)=0 x02) d=S1-S2; elsed=0; /*物长1*/void wchang1() /: CC if(S4=S3) if(PIND&0 x02)=0 x02) D=S4-S3; elseD=0;/*显示(xinsh)物长0 */void xswchang0() CES1(); CES2(); wchang0(); get_num=d; LCD_write(2,1,物长); wr_byte(:)
9、; wr_byte(tableget_num/1000); wr_byte(tableget_num%1000/100); wr_byte(tableget_num%1000%100/10); wr_byte(.); wr_byte(tableget_num%10); wr_byte(C); wr_byte(M); /* 显示(xinsh)物长1*/void xswchang1() CES3(); CES4(); wchang1(); get_num=D; LCD_write(2,1,物长); wr_byte(:); wr_byte(tableget_num/1000); wr_byte(ta
10、bleget_num%1000/100); wr_byte(tableget_num%1000%100/10); wr_byte(.); wr_byte(tableget_num%10); wr_byte(C); wr_byte(M); /*计总长(zngzhng),个数0*/void zchang0() /: BB Zchang+=d; if(S1=S2)Jshu+; if(Zchang99999)|(Jshu999) /总长(zngzhng)最大9999.9CM;计数最多999个 Zchang=0;Jshu=0; LCD_write(3,1,总长);wr_byte(:);wr_byte(t
11、ableZchang/10000); wr_byte(tableZchang/1000%10);wr_byte(tableZchang%1000/100);wr_byte(tableZchang%1000%100/10);wr_byte(.);wr_byte(tableZchang%10); wr_byte(C);wr_byte(M); LCD_write(4,1,计数);wr_byte(:);wr_byte(tableJshu%1000/100);wr_byte(tableJshu%1000%100/10);wr_byte(tableJshu%10);LCD_write(4,5,个);/*计
12、总长(zngzhng),个数1*/void zchang1() /: DD Zchang-=d; if(S4=S3)Jshu-; if(Zchang0)|(Jshu0) Zchang=0;Jshu=0; LCD_write(3,1,总长(zngzhng);wr_byte(:);wr_byte(tableZchang/10000); wr_byte(tableZchang/1000%10);wr_byte(tableZchang%1000/100);wr_byte(tableZchang%1000%100/10);wr_byte(.);wr_byte(tableZchang%10); wr_by
13、te(C);wr_byte(M); LCD_write(4,1,计数(j sh);wr_byte(:);wr_byte(tableJshu%1000/100);wr_byte(tableJshu%1000%100/10);wr_byte(tableJshu%10);LCD_write(4,5,个);void panduan() if(GB_Number=0 x0D) /键值等于1时木棒长度,计数加 xswchang0(); if(GB_Number=0 x0E) /键值等于2时木棒长度,计数减 xswchang1();void dianji() switch(GB_Number) /*顺转数据
14、相加*/ case 0 x0C: DDRA|=BIT(2); PORTA|=BIT(2); delay_nus(1); LCD_write(1,8,逆);LCD_write(3,8,相);LCD_write(2,8,转);LCD_write(4,8,加); break;/*逆转(nzhun)测数据相减*/ case 0 x0D: DDRA|=BIT(3); PORTA|=BIT(3); delay_nus(1);LCD_write(1,8,顺);LCD_write(3,8,相);LCD_write(2,8,转);LCD_write(4,8,减); break;/*停止(tngzh)数据丢失*/
15、 case 0 x0E: DDRA&=0 x0C; PORTA&=0 x0C; delay_nus(1); LCD_write(1,8, );LCD_write(2,8,停);LCD_write(3,8,止); LCD_write(4,8, ); got_num=0, got_num15=0;value=0,D=0; S1=0,S2=0,S3=0,S4=0,get_num=0,d=0; Zchang=0,Jshu=0;Flag=0,m=0,biaozhi=0; break;/*暂停数据(shj)不丢失*/ case 0 x0F: LCD_write(1,8, );LCD_write(2,8,暂
16、);LCD_write(3,8,停); LCD_write(4,8, );break; void main() DDRA=BIT(2)|BIT(3); PORTA&=BIT(2); PORTA&=BIT(3); BC7281_init(); int0_init(); LCD_int(); SEI();while(1) / 一直(yzh)测距 if(T=0)switch(GB_Number) case 0: LCD_write(2,1,学习(xux)是灯,);shu=0;ru=0;mi=0;ma=0;break; case 1: LCD_write(2,1,努力(n l)是油。);shu=0;r
17、u=0;mi=0;ma=0;break; case 2: LCD_write(2,1,要想灯亮,);break; case 3: LCD_write(2,1,必须加油。);shu=0;ru=0;mi=0;ma=0;break; case 4: LCD_write(2,1,学习是灯,);shu=0;ru=0;mi=0;ma=0;break; case 5: LCD_write(2,1,努力是油。);break; case 6: LCD_write(2,1,要想灯亮,);shu=0;ru=0;mi=0;ma=0;break; case 7: LCD_write(2,1,必须加油。);break;
18、case 8: LCD_write(2,1,学习是灯,);shu=0;ru=0;mi=0;ma=0;break; case 9: LCD_write(2,1,努力是油。);break; case 10:LCD_write(2,1,要想灯亮,);shu=0;ru=0;mi=0;ma=0;break; case 11:LCD_write(2,1,必须加油。);shu=0;ru=0;mi=0;ma=0;break; case 12:LCD_write(2,1,学习是灯,);shu=0;ru=0;mi=0;ma=0;break; case 13:LCD_write(2,1,努力是油。);shu=0;ru=0;mi=0;ma=0;break; case 14:LCD_write(2,1,要想灯亮,);shu=0;ru=0;mi=0;ma=0;break; case 15:LCD_write(2,1,必须加油。);shu=0;ru=0;mi=0;ma=0;break;if(GB_Number=30) LCD_write(2,1,请输入密码);if(GB_Number=0 x01) shu=; if(GB_Number=0 x02)&(shu=) ru=; i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 24.2.1 点和圆的位置关系 人教版数学九年级上册堂堂练(含答案)
- 2024-2025学年广东省东莞市虎门镇六年级(上)第一次月考数学试卷
- 股权融资对企业合作伙伴关系的影响
- 2023年浙江省交通投资集团有限公司管理招聘笔试真题
- 2023年十堰东风中学招聘教师笔试真题
- 多功能面粉科技行业的消费市场分析
- 2023年福建福州肺科医院自主招聘笔试真题
- 2024年广州客运上岗证考试多少分及格
- 2024年新疆客运资格证答题软件下载
- 2024年三明小型客运从业资格证考试题答案
- 信息学奥赛工作总结2
- 城市排水管道CCTV工程检测考核具体方案
- 江苏省临床营养科评价标准
- 部编版五年级上语文第一次月考卷(一)
- 县人大常委会关于县农村小学“撤点并校”调研报告
- 施工现场临时用电施工组织设计
- 安徽省医疗服务价格(中医)
- 水库大坝混凝土施工方案
- 中国电信的实习证明模板
- 05439-2020年1月广东自考《商务英语阅读》试题和答案(总13页)
- 郭硕鸿《电动力学》课后答案
评论
0/150
提交评论