freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

電動(dòng)自行車速度里程表設(shè)計(jì)論-資料下載頁

2025-06-04 08:10本頁面
  

【正文】 nop()。 sda=1。 nop() //開始信號(hào) define start() sda=1。 nop()。 scl=1。 nop()。 sda=0。 nop() //停止信號(hào) define duan P1 unsigned char code table[]={ //共陽數(shù)碼管常用的字模 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83, 0xC6,0xA1,0x86,0x8E,0x89,0xC7,0xC8,0xC1,0x8C,0xA3,0xBF,0xFF,}。 sbit ir=P3^2。//速度檢測(cè)信號(hào)端口 ,此端口可以不用定義 ,連接到 int0,一個(gè)脈沖計(jì)算為 1 米 ,單位秒 sbit sda=P3^0。 sbit scl=P3^1。 sbit wle=P2^5。 sbit dle=P2^6。 sbit moto=P2^3。 //電機(jī)的 pwm 端口 sbit k1=P2^0。 //變速 sbit k2=P2^1。 //總里程清零 sbit k3=P2^2。 //超速設(shè)置 ,按下后 ,利用 k1 閥值加大 ,k2 閥值減小 sbit bell=P2^4。 30 sbit test=P2^0。 sbit test2=P2^1。 sbit resu=P1^0。 sbit resu2=P1^1。 uchar life。 //定時(shí)設(shè)備通電次數(shù) uchar speed。//速度閥值 , uchar scale。//用于保存占空比的輸出 0 的時(shí)間份額 ,總共 10 份 bit speedset。//定義超速設(shè)置功能位 ,==1。調(diào)節(jié)超速閥值 ,==0 按鍵用來調(diào)節(jié)速度和清零存儲(chǔ)器 uint distance, sudu, sudu1。 //定義總里程變量 ,和當(dāng)前速度變量 //sudu1 是速度的臨時(shí)存儲(chǔ)變量 bit second。 //一秒時(shí)間單位 uint tmp。//iic 讀寫測(cè)試 uint mileage。//總共的運(yùn)行里程數(shù) void delay(uint t) { char i。 while(t) { for(i=0。i100。i++)。 } } void respons() //應(yīng)答 { uchar i。 scl=1。 nop()。 while((sda==1)amp。amp。(i5))i++。 scl=0。 nop()。 } 31 bit write_byte(uchar date) { bit ack。 uchar i,temp。 temp=date。 for(i=0。i8。i++) { scl=0。 nop()。 sda=temp amp。 0x80。 nop()。 scl=1。 nop()。 temp=1。 //送出一個(gè)位之后才能移位 } scl=0。 //讀取從機(jī)應(yīng)答信號(hào) nop()。 sda=1。 nop()。 ack=sda。 return ack。 delay(2)。 } uchar read_byte(void) { uchar i,k。 for(i=0。i8。i++) { scl=0。 k=1。 //最讀取的一位,不能移位了,所以在前邊移位 32 scl=1。 nop()。 k|=sda。 scl=0。 nop()。 } return k。 } /*函數(shù)功能 在某個(gè)地址寫入某個(gè)數(shù)據(jù) 參數(shù) address 要寫入的地址 date 要寫入的數(shù)據(jù) */ void write_add(uchar address,uchar date) { start()。 if(write_byte(0xa0)) bell=0。 //度過從器件無應(yīng)答 蜂鳴響,,在主程序里面關(guān)閉 respons()。 if(write_byte(address))bell=0。 respons()。 if( write_byte(date) )bell=0。 respons()。 stop()。 } /*函數(shù)功能 早某個(gè)地址讀出某個(gè)數(shù)據(jù) 參數(shù) 要讀取的地址 */ uchar read_add(uchar address) { uchar date。 start()。 if( write_byte(0xa0)) bell=0。 respons()。 33 if( write_byte(address)) bell=0。 respons()。 start()。 if( write_byte(0xa1)) bell=0。 respons()。 date=read_byte()。 stop()。 return date。 } void keysscan(void) { if(k3==0) //k3 用來啟用禁用超速閥值調(diào)整功能 { delay(10)。 bell=0。 if(k3==0) { while(k3==0)。 //松手生效 speedset=~speedset。//超速設(shè)置鍵按下一次啟動(dòng)超速設(shè)置 ,再按下禁用超速設(shè)置 } bell=1。 } if(k1==0) //k1 用來調(diào)節(jié)車速和加大閥值 { delay(10)。 if(k1==0) { bell=0。 while(k1==0)。 //松手生效 34 if(speedset) //調(diào)節(jié)閥值時(shí)的動(dòng)作 { speed++。 if(speed==40) { speed=20。//超速閥值設(shè)置過大 ,不允許 delay(10)。 } bell=1。 } else//常規(guī)操作為調(diào)節(jié)速度調(diào)節(jié)采用循環(huán)調(diào)節(jié) ,速度達(dá)到最大將減小到最小 ,然后循環(huán) { scale++。 bell=0。 if(scale==11) { scale=1。 } } } bell=1。 } if(k2==0) { delay(10)。 if(k2==0) { 35 bell=0。 while(k2==0)。//松手生效 if(speedset)//調(diào)節(jié)閥值的時(shí)候 { speed。 if(speed==0) { speed=0。 delay(10)。 bell=1。 } } else //清楚總里程數(shù) { mileage=0。 } } bell=1。 } } void disp(uint dat, char addr)//要顯示的數(shù)據(jù)和要在哪里顯示 { uchar a[4]={0}。//顯示緩存 uchar i, j,scan。 uchar ge, shi, bai, qian。//用于拆分?jǐn)?shù)據(jù) qian=dat/1000。 bai=dat%1000/100。 shi=dat%100/10。 ge=dat%10。 36 a[0]=qian。 //此處尤其注意需要 ,賦值是將個(gè)十百千位賦給數(shù)組 a,而不是 qian=a[0]。這樣寫 a[1]=bai。 //剛開始就寫錯(cuò)了 ,注意注意 !!!! a[2]=shi。 a[3]=ge。 if(addr==1) { scan=0x01。 for(i=0。i4。i++) { duan=0x00。 //所存 0,拉高 ,無論共陰共陽都會(huì) wle=1。 //位選直通 dle=1。 //段碼直通 wle=0。 //位選所存 ,段 碼都為 0,數(shù)碼管是不會(huì)亮的 . duan=table[a[i]]。//送數(shù)據(jù)給段碼 dle=0。 //段碼所存 duan=scan。 //這里的 duan 是用在位選上 wle=1。 //位選直通 , wle=0。 //位選所存 delay(1)。 scan=1。 //位選左移一位 } } if(addr==2) { scan=0x10。 for(i=0。i4。i++) { duan=0x00。 //所存 0,拉高 ,無論共陰共陽都會(huì) wle=1。 //位選直通 dle=1。 //段碼直通 37 wle=0。 //位選所存 ,段碼都為 0,數(shù)碼管是不會(huì)亮的 . duan=table[a[i]]。//送數(shù)據(jù)給段碼 dle=0。 //段碼所存 duan=scan。 //這里的 duan 是用在位選上 wle=1。 //位選直通 , wle=0。 //位選所存 delay(1)。 scan=1。 //位選左移一位 } } } void timerinit() { TMOD=0X10。//定時(shí)器 1 模式 1,16bit 定時(shí)器 ET1=1。 //定時(shí)器 1 的中斷允許 TH1=(6553610000)/256。 //10ms 的中斷計(jì)數(shù) ,用來刷新和掃描數(shù)碼管 TL1=(6553610000)%256。 TR1=1。//啟動(dòng)定時(shí)器 1 IT0=1。 EX0=1。 RCAP2H = (655365000)/256。 //賦 T2 的預(yù)置值,溢出 1 次是 5000us 秒鐘 RCAP2L = (655365000)%256。 TR2=1。 //啟動(dòng)定時(shí)器 ET2=1。 //打開定時(shí)器 2 中斷 EA=1。 } void main() { uint h,l, i。 delay(500)。 38 h=read_add(0)。//存儲(chǔ)器的地址 1 保存程數(shù)的高 8 位 l=read_add(1)。//在 0 地址里面為低八位 delay(10)。 speed=read_add(3)。 //默認(rèn)的超速速度 28 mileage=h*256+l。 timerinit()。 scale=1。 speedset=0。//默認(rèn)按鍵進(jìn)行調(diào)速和 i=read_add(0)。 i++。 while(1) { h=mileage8。 l=mileageamp。0xff。 //高低 8 位分離 write_add(3,speed)。 delay(5)。 write_add(0,h)。 delay(5)。 write_add(1,l)。 delay(5)。 write_add(126,speed)。 //超速設(shè)置存儲(chǔ)在地址 3 delay(5)。 keysscan()。 tmp=mileage。 } } 39 void timer1() interrupt 3 { static char p。 TH1=(6553610000)/256。 TL1=(6553610000)%256。 p++。 if(p==100) { p=0。 second=1。 //到達(dá) 1 秒中斷 ,1s 中斷位變量變?yōu)?1 sudu=sudu1。 //速度值每秒更新一次 mileage+=sudu。 sudu1=0。 if(mileage9999)mileage=0。 } if(!speedset) //常規(guī)顯示轉(zhuǎn)速 ,顯示總的里程數(shù) { disp(tmp,1)。//第一個(gè)數(shù)碼管顯示總里程數(shù) disp(sudu,2)。 //第二個(gè)
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1