畢業(yè)設(shè)計(jì)自行車測速儀_第1頁
畢業(yè)設(shè)計(jì)自行車測速儀_第2頁
畢業(yè)設(shè)計(jì)自行車測速儀_第3頁
畢業(yè)設(shè)計(jì)自行車測速儀_第4頁
畢業(yè)設(shè)計(jì)自行車測速儀_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

#include<reg52.h>#include<stdio.h>#include<intrins.h>#defineGDM12864ADataPortP1//LCD數(shù)據(jù)線#defineucharunsignedcharsbitDI=P2^2;//數(shù)據(jù)\指令選擇sbitRW=P2^1;//讀\寫選擇sbitEN=P2^0;//讀\寫使能sbitcs1=P2^4;//片選1sbitcs2=P2^3;//片選2sbitsclk=P2^5;sbiti_o=P2^6;sbitrstb=P2^7;sbitds18s20_dq=P3^6;sbitI2C_SCK=P3^3;sbitI2C_SDA=P3^5;uchar=0,pp=0;//開始/暫停按鍵,計(jì)算機(jī)傳播過來旳數(shù)據(jù)為8則上傳ucharcodea[]={//16*160x10,0x22,0x64,0x0C,0x80,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFF,0x02,0x00,0x00,0x04,0x04,0xFE,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00,0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0xA5,0xA6,0xA4,0xFC,0x24,0x34,0x26,0x04,0x00,0x40,0x20,0x9F,0x80,0x42,0x42,0x26,0x2A,0x12,0x2A,0x26,0x42,0x40,0xC0,0x40,0x00,0x00,0xFC,0x84,0x84,0x84,0xFE,0x14,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x00,0x00,0x3F,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x23,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0xF8,0x01,0x02,0xF6,0x10,0x12,0x12,0x12,0x12,0xFA,0x12,0x02,0xFF,0x02,0x00,0x00,0xFF,0x00,0x00,0x3F,0x11,0x11,0x11,0x11,0x11,0x3F,0x40,0x80,0x7F,0x00,0x00,0x40,0x42,0x44,0xCC,0x00,0xF4,0x94,0x94,0x94,0xFF,0x94,0x94,0x94,0xF6,0x04,0x00,0x00,0x40,0x20,0x1F,0x20,0x51,0x48,0x44,0x42,0x7F,0x42,0x44,0x4C,0x61,0x20,0x00,0x00,0x00,0xFE,0x12,0x12,0x12,0x12,0xFE,0x12,0x12,0x12,0x12,0xFF,0x02,0x00,0x00,0x40,0x48,0x49,0x49,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x4D,0x68,0x40,0x00,0x24,0x24,0xA4,0xFE,0xA3,0x22,0x20,0x7E,0x42,0x42,0x42,0x42,0x42,0x7F,0x02,0x00,0x08,0x06,0x01,0xFF,0x00,0x43,0x41,0x49,0x49,0x49,0x7F,0x49,0x4D,0x69,0x41,0x00,0x00,0x00,0xFE,0x82,0x92,0x92,0x92,0xFE,0x92,0x9A,0xD2,0x82,0xFF,0x02,0x00,0x00,0x40,0x20,0x1F,0x00,0x00,0x7E,0x22,0x22,0x22,0x3F,0x42,0x80,0x7F,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0xFF,0x80,0x80,0xA0,0x90,0x88,0x84,0x86,0x80,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0x40,0x40,0x23,0x04,0x08,0x10,0x20,0x60,0x20,0x00,0x00,0x00,0x06,0x09,0x09,0xE6,0xF0,0x18,0x08,0x08,0x08,0x18,0x30,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x18,0x30,0x20,0x20,0x20,0x10,0x08,0x00,0x00,0x00,0x80,0x40,0x20,0xF8,0x47,0x48,0x48,0x48,0xC8,0x7F,0x48,0x48,0x4C,0x68,0x40,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x02,0x0B,0x12,0x62,0xD2,0x0A,0x06,0x02,0x00,0x00};ucharcodeb[]={//8*160x00,0xF8,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x3F,0x20,0x20,0x20,0x20,0x3F,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x3F,0x21,0x21,0x21,0x21,0x21,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x21,0x21,0x21,0x21,0x21,0x3F,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x3F,0x00,0x00,0xF8,0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x21,0x21,0x21,0x21,0x21,0x3F,0x00,0x00,0xF8,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x3F,0x21,0x21,0x21,0x21,0x3F,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0xF8,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x3F,0x21,0x21,0x21,0x21,0x3F,0x00,0x00,0xF8,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x01,0x01,0x3E,0x01,0x01,0x3E,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x13,0x24,0x24,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x3F,0x06,0x09,0x10,0x20,0x00,0x00,//17,k0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x02,0x02,0x02,0x3E,0x00,0x00//18,h};//延時(shí)程序,延時(shí)10usvoidDelay_10_uS(void){chari=10;while(i--);}//nmSdelayvoidDelay_N_mS(unsignedintn_milisecond)/*nmSdelay*/{unsignedchari;while(n_milisecond--){i=37;while(i--);}}//啟動傳送bitI2C_Start(void){Delay_10_uS();I2C_SDA=1;Delay_10_uS();I2C_SCK=1;Delay_10_uS();if(I2C_SDA==0)return0;if(I2C_SCK==0)return0;I2C_SDA=0;Delay_10_uS();I2C_SCK=0;Delay_10_uS();return1;}//停止信號voidI2C_Stop(void){Delay_10_uS();I2C_SDA=0;Delay_10_uS();I2C_SCK=1;Delay_10_uS();I2C_SDA=1;Delay_10_uS();}//無應(yīng)答旳時(shí)序,有應(yīng)答時(shí)需要在第9位輸出0,沒有應(yīng)答時(shí),第9位為高voidI2C_Nack(void){Delay_10_uS();I2C_SDA=1;Delay_10_uS();I2C_SCK=1;Delay_10_uS();I2C_SCK=0;Delay_10_uS();}//假如發(fā)送完畢并且在第9個(gè)脈沖處得到ack,那么返回0,體現(xiàn)成功bitI2C_Send_Byte(unsignedchard){unsignedchari=8;bitbit_ack;while(i--){Delay_10_uS();if(d&0x80)I2C_SDA=1;elseI2C_SDA=0;Delay_10_uS();I2C_SCK=1;Delay_10_uS();I2C_SCK=0;d=d<<1;}Delay_10_uS();I2C_SDA=1;Delay_10_uS();I2C_SCK=1;Delay_10_uS();bit_ack=I2C_SDA;I2C_SCK=0;Delay_10_uS();returnbit_ack;}//接受一種8位數(shù)據(jù)unsignedcharI2C_Receive_Byte(void){unsignedchari=8,d;Delay_10_uS();I2C_SDA=1;while(i--){d=d<<1;Delay_10_uS();I2C_SCK=1;if(I2C_SDA)d++;Delay_10_uS();I2C_SCK=0;}returnd;}//寫EEPROM操作voidAT24C64_W(void*mcu_address,unsignedintAT24C64_address,unsignedintcount){while(count--){I2C_Start();I2C_Send_Byte(0xa0);I2C_Send_Byte(AT24C64_address/256);I2C_Send_Byte(AT24C64_address%256);I2C_Send_Byte(*(unsignedchar*)mcu_address);I2C_Stop();Delay_N_mS(10);((unsignedchar*)mcu_address)++;AT24C64_address++;}}//讀EEPROM函數(shù)voidAT24C64_R(void*mcu_address,unsignedintAT24C64_address,unsignedintcount){while(count--){I2C_Start();I2C_Send_Byte(0xa0);I2C_Send_Byte(AT24C64_address/256);I2C_Send_Byte(AT24C64_address%256);I2C_Start();I2C_Send_Byte(0xa1);*(unsignedchar*)mcu_address=I2C_Receive_Byte();I2C_Nack();I2C_Stop();((unsignedchar*)mcu_address)++;AT24C64_address++;}} //單總線延時(shí)voidds18s20delay(intuseconds){ints;for(s=0;s<useconds;s++);}//單總線復(fù)位uchards18s20reset(){ucharpresencesignal;ds18s20_dq=0;ds18s20delay(30);ds18s20_dq=1;ds18s20delay(3);presencesignal=ds18s20_dq;ds18s20delay(30);returnpresencesignal;}//單總線位寫入voidds18s20writebit(charval){ds18s20_dq=0;if(val==1)ds18s20_dq=1;elseds18s20_dq=0;ds18s20delay(5);ds18s20_dq=1;}//單總線字節(jié)寫入voidds18s20writebyte(charval){uchari;uchartemp;for(i=0;i<8;i++){temp=val>>i;temp&=0x01;ds18s20writebit(temp);}ds18s20delay(5);}//單總線位讀取uchards18s20readbit(void){uchari;ds18s20_dq=0;ds18s20_dq=1;for(i=0;i<3;i++)returnds18s20_dq;}//單總線字節(jié)讀取uchards18s20readbyte(void){uchari;ucharvalue=0;for(i=0;i<8;i++){if(ds18s20readbit())value|=0x01<<i;ds18s20delay(7);}return(value);} //實(shí)時(shí)時(shí)鐘復(fù)位函數(shù)voidresetds1302(){ds18s20delay(1);sclk=0;ds18s20delay(1);rstb=0;ds18s20delay(1);rstb=1;ds18s20delay(1);}//時(shí)鐘字節(jié)讀取函數(shù)ucharreadbyteds1302(){uchari;ucharrbyte;uchartempbyte;rbyte=0x00; i_o=1; ds18s20delay(1); for(i=0;i<8;++i) { sclk=1; ds18s20delay(1); sclk=0; ds18s20delay(1); tempbyte=(uchar)i_o; tempbyte<<=7; rbyte>>=1; rbyte|=tempbyte; } returnrbyte; }//時(shí)鐘字節(jié)寫入函數(shù)voidwritebyteds1302(ucharw_byte){uchari;ds18s20delay(1);for(i=0;i<8;++i) {i_o=0; if(w_byte&0x01)i_o=1; sclk=0; ds18s20delay(1); sclk=1; ds18s20delay(1); w_byte>>=1; } }//時(shí)鐘初始化函數(shù)voidinitds1302(){resetds1302();writebyteds1302(0x8e);writebyteds1302(0);resetds1302();writebyteds1302(0x90);writebyteds1302(0xab);resetds1302();writebyteds1302(0xbe);writebyteds1302(0);writebyteds1302(0);writebyteds1302(0);writebyteds1302(0);writebyteds1302(0);writebyteds1302(0);writebyteds1302(0);writebyteds1302(0);writebyteds1302(0);resetds1302();}//時(shí)鐘字節(jié)寫入函數(shù)voidwriteclkbyte(ucharadress,uchardate){adress=((adress*2)|0x80);resetds1302();writebyteds1302(adress);writebyteds1302(date);resetds1302();}//狀態(tài)檢查,voidCheckState(){unsignedchardat;DI=0;RW=1;do{GDM12864ADataPort=0x00;EN=1; dat=GDM12864ADataPort;EN=0;dat=0x80&dat;//僅當(dāng)?shù)?位為0時(shí)才可操作(鑒別busy信號)}while(!(dat==0x00));}//向LCD發(fā)送命令//command:命令voidSendCommandToLCD(unsignedcharcommand){CheckState();RW=0;GDM12864ADataPort=command;EN=1;EN=0;}//寫顯示數(shù)據(jù)//dat:顯示數(shù)據(jù)voidWriteByte(unsignedchardat){CheckState();DI=1;RW=0;GDM12864ADataPort=dat;EN=1;EN=0;}//設(shè)定行地址(頁)--X0-7voidSetLine(unsignedcharline){line=line&0x07;//0<=line<=7line=line|0xb8;//10111xxxSendCommandToLCD(line);}//設(shè)定列地址--Y0-63voidSetColumn(unsignedcharcolumn){column=column&0x3f;//0=<column<=63 感覺多出旳,column已近不不小于64了。column=column|0x40;//01xxxxxxSendCommandToLCD(column);}//設(shè)定顯示開始行--XXvoidSetStartLine(unsignedcharstartline)//0--63{startline=startline&0x07;startline=startline|0xc0;//11000000SendCommandToLCD(startline);}//開關(guān)顯示voidSetOnOff(unsignedcharonoff){onoff=0x3e|onoff;//0011111xSendCommandToLCD(onoff);}//選擇屏幕//screen:0-全屏,1-左屏,2-右屏voidSelectScreen(unsignedcharscreen){//cs1:1--左;cs2:1--右switch(screen){case0:cs1=0;//全屏_nop_();_nop_();_nop_();cs2=0;_nop_();_nop_();_nop_();break;case1:cs1=0;//左屏_nop_();_nop_();_nop_();cs2=1;_nop_();_nop_();_nop_();break;case2:cs1=1;//右屏_nop_();_nop_();_nop_();cs2=0;_nop_();_nop_();_nop_();break;}}//延時(shí)delay(unsignedintt){unsignedinti=t,m,n;for(m=0;m<i;m++)for(n=0;n<100;n++);}//清屏//screen:0-全屏,1-左屏,2-右?分屏干嘛,直接全屏不好嗎voidClearScreen(unsignedcharscreen){unsignedchari,j;SelectScreen(screen);for(i=0;i<8;i++){SetLine(i);for(j=0;j<128;j++){WriteByte(0x00);}}}//初始化LCDvoidInitLCD(){unsignedchari=250;//延時(shí)while(i--);SelectScreen(0);SetOnOff(0);//關(guān)顯示//ClearScreen(0);//清屏SelectScreen(0);SetOnOff(1);//開顯示SelectScreen(0);SetStartLine(0);//開始行:0}//8*8中文顯示函數(shù)voidz88(unsignedcharlin,unsignedcharcolumn,unsignedchar*w,unsignedintaddress){unsignedchari;if(column>16){return;}if(column<8)SelectScreen(1);//假如列數(shù)<8(0,1,2,3,4,5,6,7)則寫在第一屏上,每列一種字節(jié)else{SelectScreen(2);//否則(8,9,10,11,12,13,14,15)寫在第二屏上column=column&0x07;//防止越界}SetLine(lin);SetColumn(column<<3);//colum×80-64for(i=0;i<8;i++)WriteByte(w[address+i]);}//8*16中文顯示函數(shù)voidz816(unsignedcharlin,unsignedcharcolumn,unsignedchar*p,unsignedintm){lin=lin<<1;z88(lin,column,p,m*16);z88(lin+1,column,p,m*16+8);}//16×16中文顯示函數(shù)voidz1616(unsignedcharlin,unsignedcharcolumn,unsignedchar*p,unsignedintm) //lin(頁)=16,8格=column(列,不是y),m為第幾種中文,所有中文旳字模都寫在一種數(shù)組中。{lin=lin<<1;//lin*2,一種中文占兩頁z88(lin,column,p,m*32);z88(lin,column+1,p,m*32+8);z88(lin+1,column,p,m*32+16);z88(lin+1,column+1,p,m*32+24);}//單總線溫度讀取voidds18s20readtemperature(void){chartemp_lsb,temp_msb;charctemperature;z1616(1,0,a,0);z1616(1,2,a,1);z1616(1,8,a,9);z816(1,4,b,13);ds18s20reset();ds18s20writebyte(0xcc);ds18s20writebyte(0x44);ds18s20delay(5);ds18s20reset();ds18s20writebyte(0xcc);ds18s20writebyte(0xbe);ds18s20delay(5);temp_lsb=ds18s20readbyte();temp_msb=ds18s20readbyte();if(temp_msb==0){temp_lsb>>=1;z816(1,5,b,16);}else{z816(1,5,b,15);ctemperature=temp_lsb=((-1)*temp_lsb);temp_lsb>>=1;}ctemperature=temp_lsb;ctemperature/=10;z816(1,6,b,ctemperature);temp_lsb%=10;z816(1,7,b,temp_lsb);}//時(shí)鐘讀秒寄存器uchardumiaojicuni(){uchard;writebyteds1302(0xbf);d=readbyteds1302();resetds1302();return(d);}//時(shí)鐘寄存器內(nèi)容顯示函數(shù)voidds1302display(){ucharsec,min,hrs,c;z1616(0,0,a,2);z1616(0,2,a,3);z816(0,4,b,13);z816(0,7,b,13);z816(0,10,b,13);resetds1302();writebyteds1302(0xbf);sec=readbyteds1302();c=sec&0x0f;z816(0,12,b,c);c=(sec&0x70);c>>=4;z816(0,11,b,c);min=readbyteds1302();c=min&0x0f;z816(0,9,b,c);c=(min&0x70);c>>=4;z816(0,8,b,c);hrs=readbyteds1302();c=hrs&0x0f;z816(0,6,b,c);c=(hrs&0x30);c>>=4;z816(0,5,b,c);resetds1302();}//讀秒旳低4位ucharshizhongdumiao(){ucharsec;resetds1302();writebyteds1302(0xbf);sec=readbyteds1302();resetds1302();sec&=0x0f;return(sec);}//速度floatsudu(){floata;TR0=0;a=TL0;TL0=0;TR0=1;a*=1.1304;//0.314*3.6km/hreturn(a);}//顯示速度voidxianshisudu(floate){unsignedintc,d,f;z1616(2,0,a,4);z1616(2,2,a,1);z816(2,4,b,13);z816(2,7,b,14);z816(2,9,b,17);z816(2,10,b,10);z816(2,11,b,12);z816(2,12,b,18);e*=10;f=d=c=e;c/=100;//十位z816(2,5,b,c);d%=100;d/=10;z816(2,6,b,d);f%=10;z816(2,8,b,f);}//顯示里程voidxianshilicheng(floati){unsignedlongintc,d,e,f,g,h;z1616(3,0,a,5);z1616(3,2,a,6);z816(3,4,b,13);z816(3,11,b,10);c=d=e=f=g=h=i;h/=100000;c%=10000;c/=10000;d%=10000;d/=1000;e%=1000;e/=100;f%=100;f/=10;g%=10;z816(3,5,b,h);z816(3,6,b,c);z816(3,7,b,d)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論