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

正文內(nèi)容

簡易avr單片機(jī)教程-資料下載頁

2025-06-26 09:29本頁面
  

【正文】 te_char(0,0x01)。 // 顯示清屏 delay(1)。 LCD_write_char(0,0x06)。 // 顯示光標(biāo)移動設(shè)置 delay(1)。 LCD_write_char(0,0x0c)。 // 顯示開及光標(biāo)設(shè)置 delay(5)。 }uchar key_read(void){ uchar i。 DDRA = 0x0E。 //獲取列地址 PORTA = 0x0E。 i = PINA。 DDRA = 0xf0。 //獲取行地址 PORTA = 0xf0。 i |= PINA。 DDRA = 0x00。 //輸出復(fù)位 switch (i) //將按鍵碼轉(zhuǎn)換成鍵值 { case 0x7d: return 0x31。 case 0xbd: return 0x32。 case 0xdd: return 0x33。 case 0xed: return 0x34。 case 0x7b: return 0x35。 case 0xbb: return 0x36。 case 0xdb: return 0x37。 case 0xeb: return 0x38。 case 0x77: return 0x2a。 case 0xb7: return 0x39。 case 0xd7: return 0x30。 case 0xe7: return 0x23。 // case 0xE7: return 0x41。 // case 0xD7: return 0x33。 // case 0xB7: return 0x32。 // case 0x77: return 0x31。 default : return 0x00。 } }int main(void){ uchar k,j。 uchar temlen0=strlen(data0)。 //第一行字符串長度 uchar temlen1=strlen(data1)。 //第二行字符串長度 uchar temlenPos=0x40+temlen1。 uchar x[1]={0}。 DDRC=0xff。 PORTC=0x00。 LCD_init()。 LCD_write_char(0,0x80)。 for(k=0。ktemlen0。k++) LCD_write_char(1,data0[k])。 LCD_write_char(0,0x80+0x40)。 for(j=0。jtemlen1。j++) LCD_write_char(1,data1[j])。 while(1) { x[0]=key_read()。 if(x[0]!=0) { LCD_write_char(0,0x80+temlenPos)。 LCD_write_char(1,x[0])。 } } return 0。}DS18B20_劉include include define uchar unsigned chardefine uint unsigned intinclude define set_out DDRC|=(1(PC6))//設(shè)置為輸出define set_in DDRCamp。=~(1(PC6))//設(shè)置為輸入define set_DQ PORTC|=(1 (PC6)) //18b20 高電平define clr_DQ PORTCamp。=~(1 (PC6)) // 18b20 低電平define DQ PINCamp。=(1 (PC6))//讀取輸入時得端口值uchar flag=0。//判斷是否復(fù)位成功。其實(shí)后面根本就沒用,一直假設(shè)復(fù)位成功。uchar TEMP[8]。//void delay(uint us)//延時到微秒級別時要特別注意延時函數(shù){ uint i。 for(i=0。ius。i++)。}void Port_Init(){ set_in。 clr_DQ。 } /* DS18B20復(fù)位 1) 先將數(shù)據(jù)線置高電平1。 ?。?) 延時(該時間要求的不是很嚴(yán)格,但是盡可能的短一點(diǎn))?! 。?) 數(shù)據(jù)線拉到低電平0?! 。?) 延時490微秒(該時間的時間范圍可以從480到960微秒)?! 。?) 數(shù)據(jù)線拉到高電平1?! 。?) 延時等待(如果初始化成功則在15到60毫秒時間之內(nèi)產(chǎn)生一個由DS18B20所返回的低電平0。據(jù)該狀態(tài)可以來確定它的存在,但是應(yīng)注意不能無限的進(jìn)行等待,不然會使程序進(jìn)入死循環(huán),所以要進(jìn)行超時控制)。 ?。?) 若CPU讀到了數(shù)據(jù)線上的低電平0后,還要做延時,其延時的時間從發(fā)出的高電平算起(第(5)步的時間算起)最少要480微秒。 ?。?) 將數(shù)據(jù)線再次拉高到高電平1后結(jié)束。*/uchar DS18B20_init(){ set_out。 set_DQ。 delay(2)。 clr_DQ。 delay(600)。 set_in。 set_DQ。 delay(80)。 if(DQ==0) flag=1。 else flag=0。 delay(500)。 return flag。 }/*DS18B20的寫操作 ?。?) 數(shù)據(jù)線先置低電平0。 ?。?) 延時確定的時間為2(小于15)微秒?! 。?) 按從低位到高位的順序發(fā)送字節(jié)(一次只發(fā)送一位)?! 。?) 延時時間為62(大于60)微秒?! 。?) 將數(shù)據(jù)線拉到高電平,延時2(小于15)微秒?! 。?) 重復(fù)上(1)到(6)的操作直到所有的字節(jié)全部發(fā)送完為止?! 。?) 最后將數(shù)據(jù)線拉高。*/void write_18B20(uchar dat){ uchar i。 set_out。 //數(shù)據(jù)線設(shè)置為輸出 for(i=0。i8。i++) { clr_DQ。 //拉低數(shù)據(jù)線15us,開始寫數(shù)據(jù) delay(2)。 if(datamp。0x01) //寫數(shù)據(jù) { set_DQ。 //寫1 } else { clr_DQ。 //寫0 } delay(78)。 set_DQ。 //拉高數(shù)據(jù)線 delay(2)。 //寫兩位數(shù)據(jù)的時間間隔 dat = 1。 //數(shù)據(jù)右移1位,先寫低位 } set_DQ。 //拉高 } /*DS18B20的讀操作 ?。?)將數(shù)據(jù)線拉高1?! 。?)延時2微秒。 ?。?)將數(shù)據(jù)線拉低0?! 。?)延時2(小于15)微秒?! 。?)將數(shù)據(jù)線拉高1,同時端口應(yīng)為輸入狀態(tài)?! 。?)延時4(小于15)微秒?! 。?)讀數(shù)據(jù)線的狀態(tài)得到1個狀態(tài)位,并進(jìn)行數(shù)據(jù)處理?! 。?)延時62(大于60)微秒。*/uchar read_18B20(){ uchar i。 uchar dat = 0。 for(i = 0。i 8。i++) { set_DQ。 set_out。 delay(2)。 clr_DQ。 delay(2)。 set_DQ。 set_in。 delay(5)。 dat = dat 1。//可能錯誤地方就是錯誤的地方 要放在獲取數(shù)據(jù)的前面 ?。。。。。。。。。。。?! if(DQ) //讀數(shù)據(jù) { dat|= 0x80。 //如果是1,置1,右移數(shù)據(jù) } delay(78)。 //set_DQ。 //拉高 //set_out。 //定義為輸出 //delay(1)。 } return dat。 //返回讀到的1字節(jié)數(shù)據(jù)}void main(){ uint temp_L=0。//為什么是char時和int時結(jié)果是不一樣的???????????? uint temp_H=0。 uchar i。 uint temp。 float ftemp。 Port_Init()。 init_LCD1602()。 while(1) { DS18B20_init()。 //flag=0。 write_18B20(0XCC)。//跳過ROM即不讀取里面的值(單總線上只有一個18B20的時候) delay(2)。 write_18B20(0X44)。//此為對RAM的操作,啟動溫度轉(zhuǎn)換 delayms(1000)。//錯了 DS18B20_init()。 //flag=0。 write_18B20(0XCC)。 delay(2)。 write_18B20(0XBE)。//讀取RAM里面的數(shù)據(jù) temp_L =read_18B20()。 //獲得溫度的低位 //delay(2)。 temp_H =read_18B20()。 //獲得溫度的高位 if(temp_Hamp。0x08) //判斷溫度的正負(fù) { temp_H=~temp_H。 //負(fù)溫度。取反加1 temp_L=~temp_L。 // temp=temp_H*256+temp_L+1。 } else temp=temp_H*256+temp_L。 ftemp=*temp。 TEMP[0]=ftemp/100。 TEMP[1]=(ftempTEMP[0]*100)/10。 TEMP[2]=ftempTEMP[0]*100TEMP[1]*10。 TEMP[3]=39。.39。 TEMP[4]=ftemp*10TEMP[0]*1000TEMP[1]*100TEMP[2]*10。 TEMP[5]=ftemp*100TEMP[0]*10000TEMP[1]*1000TEMP[2]*100TEMP[4]*10。 TEMP[6]=ftemp*1000TEMP[0]*100000TEMP[1]*10000TEMP[2]*1000TEMP[4]*100TEMP[5]*10。 TEMP[7]=ftemp*10000TEMP[0]*1000000TEMP[1]*100000TEMP[2]*10000TEMP[4]*1000TEMP[5]*100TEMP[6]*10。 /*temp=ftemp*100。 TEMP[5]=temp%10。 TEMP[4]=temp/10%10。 TEMP[3]=temp/100%10。 TEMP[2]=temp/1000%10。 TEMP[1]=temp/10000%10。*/ /*if(temp_H amp。 0x08) //判斷溫度的正負(fù) { temp_H = ~temp_H。 //負(fù)溫度。取反加1 temp_L = ~temp_L。 // SREG |= ~BIT(0)。 //清零進(jìn)位位標(biāo)志 temp_L++。 //溫度低字節(jié)加1 if(SREG amp。 BIT(0)) //有進(jìn)位嗎? { temp_H++。 //有進(jìn)位,則溫度高字節(jié)加1 } } temp= ((temp_H 4) amp。 0x70) | (temp_L 4)。 //獲得溫度的整數(shù)位 TEMP[0]= temp/1000。 //千位 TEMP[1]= temp%1000/100。 //百位 TEMP[2]= temp%100/10。 //十位 TEMP[3]= temp%10。 //個位 temp =temp_Lamp。0x0f。 //取出溫度的小數(shù)位 temp=temp*625。 //,在此擴(kuò)大 //10000倍,得出溫度的4位小數(shù)位,顯示的時候加小數(shù)點(diǎn) TEMP[4]= temp/1000。 //千位 TEMP[5]= temp%1000/100。 //百位 TEMP[6]= temp%100/10。 //十位 TEMP[7]= temp%10。 //個位*/ delayms(50)。 write_(0X80+0X04)。 delayms(50)。 for(i=0
點(diǎn)擊復(fù)制文檔內(nèi)容
物理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1