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

正文內(nèi)容

畢業(yè)論文基于stc12c5410ad單片機(jī)的傾角測試系統(tǒng)設(shè)計(jì)(編輯修改稿)

2024-11-28 04:45 本頁面
 

【文章內(nèi)容簡介】 void DS1302InputByte(unsigned char d) //實(shí)時(shí)時(shí)鐘寫入一字節(jié)(內(nèi)部函數(shù)){ unsigned char i。 ACC = d。 for(i=8。 i0。 i) { DS1302_IO = ACC0。 DS1302_CLK = 1。 DS1302_CLK = 0。 ACC = ACC 1。 } }unsigned char DS1302OutputByte(void) //實(shí)時(shí)時(shí)鐘讀取一字節(jié)(內(nèi)部函數(shù)){ unsigned char i。 for(i=8。 i0。 i) { ACC = ACC 1。 ACC7 = DS1302_IO。 DS1302_CLK = 1。 DS1302_CLK = 0。 } return(ACC)。 }void Write1302(unsigned char ucAddr, unsigned char ucDa) //ucAddr: DS1302地址, ucData: 要寫的數(shù)據(jù){ DS1302_RST = 0。 DS1302_CLK = 0。 DS1302_RST = 1。 DS1302InputByte(ucAddr)。 // 地址,命令 DS1302InputByte(ucDa)。 // 寫1Byte數(shù)據(jù) DS1302_CLK = 1。 DS1302_RST = 0。}unsigned char Read1302(unsigned char ucAddr) //讀取DS1302某地址的數(shù)據(jù){ unsigned char ucData。 DS1302_RST = 0。 DS1302_CLK = 0。 DS1302_RST = 1。 DS1302InputByte(ucAddr)。 // 地址,命令 ucData = DS1302OutputByte()。 // 讀1Byte數(shù)據(jù) DS1302_CLK = 1。 DS1302_RST = 0。 return(ucData)。} 在軟件的編寫上,可以采用軟件查詢方式對按鍵進(jìn)行識別[16]。鍵值功能設(shè)計(jì):系統(tǒng)默認(rèn)顯示的是當(dāng)前時(shí)間和當(dāng)前角度值,當(dāng)?shù)谝淮伟聪耂1時(shí),顯示切換到角度上下限的顯示,第二次按下調(diào)節(jié)角度下限的小數(shù)位,第三次按下調(diào)節(jié)角度下限的個(gè)位,依次按下,依次調(diào)節(jié)各位。S2作為調(diào)節(jié)角度上下限時(shí)的加一及角度正負(fù)號的切換用。S3作為調(diào)節(jié)角度上下限時(shí)的減一及角度正負(fù)號的切換用。S4作為調(diào)節(jié)完畢后返回當(dāng)前時(shí)間和當(dāng)前角度值顯示之用。鍵盤功能程序代碼請見附錄。鍵盤識別程序代碼如下。定時(shí)掃描有鍵按下?延時(shí)4ms有鍵按下?延時(shí)4ms讀取鍵值開始//獲取鍵值void getkey(void) { if(P00==0amp。amp。key_last0==1) { delay_flag=0。 //delay_flag在定時(shí)器中4ms到置1 while(delay_flag==0)。 //延時(shí)4ms,去抖動 if(P00==0amp。amp。key_last0==1) { key_num=0。 key_last0=0。 delay_flag=0。 //去抖動 while(delay_flag==0)。 //延時(shí)4ms,去抖動 } else if(P00==1) key_last0=1。 } else if(P00==1) key_last0=1。 if(P01==0amp。amp。key_last1==1) { delay_flag=0。 while(delay_flag==0)。 //去抖動 if(P01==0amp。amp。key_last1==1) { key_num=1。 key_last1=0。 delay_flag=0。 while(delay_flag==0)。 //延時(shí)4ms,去抖動 else if(P01==1) key_last1=1。 } else if(P01==1) key_last1=1。 if(P02==0amp。amp。key_last2==1) { delay_flag=0。 while(delay_flag==0)。 //延時(shí)4ms,去抖動 if(P02==0amp。amp。key_last2==1) { key_num=2。 key_last2=0。 delay_flag=0。 //去抖動 while(delay_flag==0)。 //延時(shí)4ms,去抖動 } else if(P02==1) key_last2=1。 } else if(P02==1) key_last2=1。 if(P03==0amp。amp。key_last3==1) { delay_flag=0。 while(delay_flag==0)。 //延時(shí)4ms,去抖動 if(P03==0amp。amp。key_last3==1) { key_num=3。 key_last3=0。 delay_flag=0。 while(delay_flag==0)。 //延時(shí)4ms,去抖動 } //去抖動 else if(P03==1) key_last3=1。 } else if(P03==1) key_last3=1。} 通信部分上位機(jī)與單片機(jī)通信按應(yīng)答方式經(jīng)行。由上位機(jī)給單片機(jī)發(fā)送一組命令數(shù)據(jù),單片機(jī)受到命令經(jīng)過分析后認(rèn)為正常,則按照命令執(zhí)行操作。將操作結(jié)果返回給上位機(jī)。若經(jīng)過分析認(rèn)為不正常,則返回給上位機(jī)出錯(cuò)信息。單片機(jī)向上位機(jī)發(fā)送的數(shù)據(jù)的方式考慮了兩種,第一種是等數(shù)據(jù)存儲器容量存滿了后在一塊發(fā),這種方式實(shí)時(shí)性不夠,為了使角度數(shù)據(jù)的變化能夠及時(shí)的傳到上位機(jī),采用定時(shí)發(fā)送,定時(shí)時(shí)間和上傳的次數(shù)由上位機(jī)來定,這樣一來就解決了實(shí)時(shí)性問題。由于是定時(shí)發(fā)送,通過對數(shù)據(jù)的分析知道上位機(jī)收到的數(shù)據(jù)可能有重復(fù)的,或者是有FF字樣。這可由時(shí)間標(biāo)簽,加以區(qū)分,而FF為數(shù)據(jù)存儲器中尚未寫進(jìn)的字節(jié)單元,通過上位機(jī)軟件可以濾除。上位機(jī)用串口調(diào)試助手來進(jìn)行數(shù)據(jù)發(fā)送,為了使數(shù)據(jù)直觀,命令碼全部使用BCD碼,由單片機(jī)傳來的數(shù)據(jù)也使用BCD碼存儲。上位機(jī)給單片機(jī)的指令為:報(bào)文開始識別字(STX)命令碼(CMD)報(bào)文結(jié)束(ETX)內(nèi)容0XEECC0XFF字節(jié)數(shù)1視命令定11) 0x10:上傳數(shù)據(jù)存儲器中角度數(shù)據(jù)命令格式:0xEE 0x100x01/00 0xXX0xYY/00 0xFF第二字節(jié) 01 表示允許上傳數(shù)據(jù) 00 表示不允許上傳數(shù)據(jù)第三字節(jié) XX表示隔多少時(shí)間上傳一次第四字節(jié) 表示上傳多少次數(shù)據(jù)。00表示不受限制,YY表示實(shí)際次數(shù)(不能為00)。2) 0x11:上傳報(bào)警次數(shù)命令格式:0xEE 0x11 0xff3) 0x12:上傳角度上下限命令格式:0xEE 0x12 0xff4) 0x13:接收設(shè)定上下限角度命令格式:0xEE 0x13 0xXX0xYY 0xZZ0x 0xWW 0xRR 0xffXX:表示上限正負(fù)號,為1為正,非1為負(fù)YY:表示上限的整數(shù)部分ZZ:表示上限的小數(shù)部分:表示下限正負(fù)號,為1為正,非1為負(fù)WW:表示下限的整數(shù)部分RR:表示下限的小數(shù)部分5) 0x14:接收設(shè)定時(shí)間命令格式: 0xEE 0x140xXX 0xXX0xXX0xXX0xXX 0xXX 0xXX 0xFF 從左到右依次為 秒、分、 時(shí)、 日、 月 、星期 、年6) 其他 :命令錯(cuò)誤返回給上位機(jī)的值為:0xEE33 30300xFF 其他部分軟件設(shè)計(jì) 報(bào)警部分軟件設(shè)計(jì):報(bào)警采用輸出不同占空比的PWM波形,通過音調(diào)高低的變化來實(shí)現(xiàn)高于上限獲低于下限的報(bào)警。同時(shí)加有LED燈的閃爍。并對上限和下限報(bào)警分別計(jì)數(shù),方便向上位機(jī)傳送數(shù)據(jù)。報(bào)警計(jì)數(shù)需要注意的是:怎樣區(qū)別相鄰兩次的不同報(bào)警及不論一次報(bào)警時(shí)間的長短,都屬于一次報(bào)警。通過設(shè)置標(biāo)志位,很好的解決了這個(gè)問題。程序代碼如下://報(bào)警程序void Alarm(int temp){ int temp0。 temp0=temp。 if((temp0=HIlimit)amp。amp。(temp0=LOWlimit)) { Stop_alarm()。 stop=0。 } //若在正常范圍內(nèi),則停止報(bào)警 else if(temp0=HIlimit) { Start_HIalarm()。 Is_HIalarm=1。 Is_LOWalarm=0。 H_is_add=1。 stop=1。 L_is_add=0。 } //超過上限時(shí),進(jìn)行上限報(bào)警 else if (temp0=LOWlimit) { Start_LOWalarm()。 Is_HIalarm=0。 Is_LOWalarm=1。 L_is_add=1。 stop=1。 H_is_add=0。 } //低于下限時(shí),進(jìn)行下限報(bào)警if((Is_HIalarm==1)amp。amp。(stop==0)amp。amp。(Is_LOWalarm==0)amp。amp。(H_is_add==1)) { if(h_Alarm_Time==255){h_Alarm_Time=0。} h_Alarm_Time++。 H_is_add=0。 }if((Is_LOWalarm==1)amp。amp。(stop==0)amp。amp。(Is_HIalarm==0)amp。amp。(L_is_add==1)) { if(l_Alarm_Time==255){l_Alarm_Time=0。} l_Alarm_Time++。 L_is_add=0。 }} LED顯示程序設(shè)計(jì)顯示采用動態(tài)掃描的方法,即輪流點(diǎn)亮各數(shù)碼管。顯示的位碼和段碼分別通過單片機(jī)SPI口的MOSI輸出到兩個(gè)74HC595來控制。要顯示的數(shù)據(jù)有:當(dāng)前時(shí)間,當(dāng)前角度值,角度的上限值和角度的下限值。由鍵盤控制顯示內(nèi)容。+ 最高位有零消隱功能,當(dāng)調(diào)節(jié)角度上下限時(shí),可實(shí)現(xiàn)位閃爍。SPI發(fā)送位碼和段碼程序如下所示:void sendspi(unsigned char spidata,unsigned char isBit){ unsigned char t,spi1_status=0。 SPDAT=spidata。 while(spi1_status==0) //等傳輸完畢 { spi1_status=SPSTAT。 spi1_status=spi1_statusamp。0x80。 } if (isBit==1) { P21=1。 for(t=0。t15。t++)。 P21=0。 //位鎖存信號輸出 } else { P11=1。 for(t=0。t15。t++)。 P11=0。 //段鎖存信號輸出 } SPSTAT=0xC0。 //寫1清SPIF標(biāo)志位 EA=1。 }
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1