




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、#include<iom16v.h>#include<macros.h>#include"delay.h"#include"BC7281.h"#include"lcd.h"#define uchar unsigned char#define uint unsigned int#define SET(a,b) a|=(1<<b) /SET(PORTD,PD3)=>PORTD|=BIT(3);#define CLR(a,b) a&=(1<<b) /SET(DDRD,PD3)=&
2、gt;DDRD&=BIT(3);#define CPL(a,b) a=(1<<b) /CPL(A,B)=>AB,(00=0,01=0, /10=0,11=1)異或=與#define CHK(a,b) (a&(1<<b) /CHK(DDRD,PD3)=>DDRD=BIT(3); /CHK(PORTD,PD3)=>PORTD=BIT(3);uint got_num, got_num15,temp;uint S1,S2,S3,S4,get_num,d,D,shu,ru,mi,ma;long int Zchang=0,Jshu=0;unsign
3、ed 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' /數碼,直接調用 /*got_num發(fā)送10個脈沖的個數;got_num15把數據從小到大排列數組; temp是got_num15交換式據中間變量*/ /*Flag,m實現循環(huán)*/
4、 /*/ /*測距離物體長度*/ /*/void PWM40K_style() DDRD|=BIT(7); TCCR2=0X18;/CTC模式比較匹配觸發(fā)OC2(OC2為原OC2的取反) OCR2=0X0C; void PWM40K_ON() TCNT2=0X00; TCCR2=0X1A; /CTC模式,8分頻void PWM40K_OFF() TCNT2=0X00; TCCR2=0X00;void INT1_init() CLR(DDRD,PD3); /(DDRD&=BIT(3)中斷1設為輸入 SET(PORTD,PD3); MCUCR=0X08; /(PORTD|=BIT(3)中斷
5、1上升沿觸發(fā) GICR&=(1<<INT1); /中斷1標志位清零(低電平觸發(fā)方式不帶中斷標志位)void ceju() PWM40K_ON(); delay_nus(250); /發(fā)十個脈沖 PWM40K_OFF(); /停止發(fā)脈沖 TCNT1=0X0000; /定時器1初始值為0 TCCR1A=0X00; /發(fā)完的同時開始計數 TCCR1B=0X02; /開定時器1 GIFR|=(1<<INTF1); /清中斷標志位 delay_nus(700); GICR|=(1<<INT1); /外部中斷1使能 delay_nms(10); /延時足夠的時間
6、,以便下一次使用 66?void distance() /獲得距離值,測5次 CLI(); INT1_init(); PWM40K_style(); SEI(); for (m=0;m<5;m+) ceju(); #pragma interrupt_handler int1wave:3 /設定中斷入口地址void int1wave(void) uchar i,j; GICR&=(1<<INT1); /關中斷1 TCCR1B=0X00; /關定時器1 got_num=TCNT1; if ( got_num<1700) got_num+=130; /補償值 else
7、 if ( got_num<3800) got_num+=50; /補償值 else got_num-=80; /補償值 got_num1Flag=got_num; /將測得的值放入數組中 got_num=0; /清零 if (Flag=4) for(j=0;j<Flag-1;j+) /把5次數據由小到大排列 for(i=0;i<Flag-j-1;i+) if( got_num1i> got_num1i+1) temp=got_num1i+1; got_num1i+1= got_num1i; got_num1i=temp; for (i=1;i<4;i+) /去掉
8、最小值,去掉最大值,取中間3個 got_num+=got_num1i; got_num= got_num/3; /求平均值 value=got_num*33550/200000; /距離算法,以厘米為單位 /(335.5M/S)=(33550CM/1X106uS): / value=10(發(fā)10個波計一次數) / got_num*(33550CM/1X106)=got_num*33550/200000; LCD_write(1,1,"物距"); wr_byte(':'); wr_byte(tablevalue/1000); wr_byte(tablevalu
9、e%1000/100); wr_byte(tablevalue%1000%100/10); wr_byte('.'); wr_byte(tablevalue%10); wr_byte('C'); wr_byte('M'); Flag+;/* if (Flag<5) /? value=1000; */ if (Flag=5) Flag=0; /*測物體長度*/void CES1() /光電傳感器檢測到物體輸出低電平,測量S1 if(PIND&0x02)=0x00)&&(biaozhi=0) /右面檢測到 S1=valu
10、e;biaozhi+; void CES2() /測量S2 if(PIND&0x02)=0x02)&&(biaozhi=1) S2=value;biaozhi=0;wchang0();zchang0();/wchang();與zchang();見下面AA,BB void CES3() if(PIND&0x02)=0x00)&&(biaozhi=0) /右面檢測到 S3=value;biaozhi+; void CES4() /測量S2 if(PIND&0x02)=0x02)&&(biaozhi=1) S4=value;bi
11、aozhi=0;wchang1();zchang1();/wchang();與zchang();見下面CC,DD /*物長0*/void wchang0() /: AA if(S1>=S2) if(PIND&0x02)=0x02) d=S1-S2; elsed=0; /*物長1*/void wchang1() /: CC if(S4>=S3) if(PIND&0x02)=0x02) D=S4-S3; elseD=0;/*顯示物長0 */void xswchang0() CES1(); CES2(); wchang0(); get_num=d; LCD_write(2
12、,1,"物長"); wr_byte(':'); 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'); /* 顯示物長1*/void xswchang1() CES3(); CES4(); wchang1(); get_num=D; LCD_wr
13、ite(2,1,"物長"); wr_byte(':'); 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'); /*計總長,個數0*/void zchang0() /: BB Zchang+=d; if(S1>=S2)Jshu+; if(
14、Zchang>99999)|(Jshu>999) /總長最大9999.9CM;計數最多999個 Zchang=0;Jshu=0; LCD_write(3,1,"總長");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_byte('
15、;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,"個");/*計總長,個數1*/void zchang1() /: DD Zchang-=d; if(S4>=S3)Jshu-; if(Zchang<0)|(Jshu<0) Zchang=0;Jshu=0;
16、LCD_write(3,1,"總長");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_byte('C');wr_byte('M'); LCD_write(4,1,"計數");wr_byte(
17、39;:');wr_byte(tableJshu%1000/100);wr_byte(tableJshu%1000%100/10);wr_byte(tableJshu%10);LCD_write(4,5,"個");void panduan() if(GB_Number=0x0D) /鍵值等于1時木棒長度,計數加 xswchang0(); if(GB_Number=0x0E) /鍵值等于2時木棒長度,計數減 xswchang1();void dianji() switch(GB_Number) /*順轉數據相加*/ case 0x0C: DDRA|=BIT(2); P
18、ORTA|=BIT(2); delay_nus(1); LCD_write(1,8,"逆");LCD_write(3,8,"相");LCD_write(2,8,"轉");LCD_write(4,8,"加"); break;/*逆轉測數據相減*/ case 0x0D: DDRA|=BIT(3); PORTA|=BIT(3); delay_nus(1);LCD_write(1,8,"順");LCD_write(3,8,"相");LCD_write(2,8,"轉"
19、;);LCD_write(4,8,"減"); break;/*停止數據丟失*/ case 0x0E: DDRA&=0x0C; PORTA&=0x0C; 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; Zch
20、ang=0,Jshu=0;Flag=0,m=0,biaozhi=0; break;/*暫停數據不丟失*/ case 0x0F: LCD_write(1,8," ");LCD_write(2,8,"暫");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
21、();while(1) / 一直測距 if(T=0)switch(GB_Number) case 0: LCD_write(2,1,"學習是燈,");shu=0;ru=0;mi=0;ma=0;break; case 1: LCD_write(2,1,"努力是油。");shu=0;ru=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; c
22、ase 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; case 8: LCD_write(2,1,"學習是燈,");shu=0;ru=0;mi=0;ma=0;break; case 9: LCD_wr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 信息處理技術員的基礎知識與試題及答案
- 2025年中國鉑金項鏈市場調查研究報告
- 2025年中國通訊擴展板市場調查研究報告
- 軟件開發(fā)流程及工具試題及答案
- 2025年中國記步器收音機市場調查研究報告
- 生化設備考試試題及答案
- 港口建設面試題及答案
- 蛋糕甜品測試題及答案
- 精細化工試題及答案
- 進料檢驗員試題及答案
- 臨床藥師培訓理論試題含答案(呼吸專業(yè))
- 玉雕教學講解課件
- 家譜宗譜WORD模板
- 民俗學概論全套精美課件
- 應用文寫作概述課件
- 危重癥孕產婦交流課件:妊娠遇到主動脈夾層搶救成功病例分享
- 數控加工中心培訓課件
- 高中政治《增強“四個意識”做到“兩個維護”》教學設計
- 山東省醫(yī)院護理服務質量評價細則簡介
- 自動控制原理全套ppt課件(完整版)
- 關聯交易同期資料模板
評論
0/150
提交評論