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

正文內(nèi)容

基于單片機(jī)空氣pm25濃度檢測(cè)系統(tǒng)設(shè)計(jì)畢業(yè)論文-資料下載頁(yè)

2025-06-27 20:39本頁(yè)面
  

【正文】 w=0。 P0=。 delay_uint(25)。 e=1。 delay_uint(100)。 e=0。}/********************************************************************* 名稱 : write_data(uchar dat)* 功能 : 1602寫數(shù)據(jù)函數(shù)* 輸入 : 需要寫入1602的數(shù)據(jù)* 輸出 : 無(wú)***********************************************************************/void write_data(uchar dat){ e=0。 rs=1。 rw=0。 P0=dat。 delay_uint(25)。 e=1。 delay_uint(100)。 e=0。 }/***********************lcd1602上顯示兩位十進(jìn)制數(shù)************************/void write_sfm_pm(uchar hang,uchar add,uint date){ if(hang==1) write_(0x80+add)。 else write_(0x80+0x40+add)。 if(date/100%10 == 0) write_data(39。 39。)。 else write_data(0x30+date/100%10)。 write_data(0x30+date/10%10)。 write_data(0x30+date%10)。 }/***********************lcd1602上顯示這字符函數(shù)************************/void write_string(uchar hang,uchar add,uchar *p){ if(hang==1) write_(0x80+add)。 else write_(0x80+0x40+add)。 while(1) { if(*p == 39。\039。) break。 write_data(*p)。 p++。 } }/***********************lcd1602初始化設(shè)置************************/void init_1602() //lcd1602初始化{ write_(0x38)。 write_(0x0c)。 write_(0x06)。 delay_uint(1000)。 write_string(1,0, :000ug/m3 )。 write_string(2,0,:000ug/m3 )。 write_sfm_pm(2,8,s_pm)。 //}/***********讀數(shù)模轉(zhuǎn)換數(shù)據(jù)********************************************************/ //請(qǐng)先了解ADC0832模數(shù)轉(zhuǎn)換的串行協(xié)議,再來(lái)讀本函數(shù),主要是對(duì)應(yīng)時(shí)序圖來(lái)理解,本函數(shù)是模擬0832的串行協(xié)議進(jìn)行的 // 1 0 0 通道 // 1 1 1 通道 unsigned char ad0832read(bit SGL,bit ODD){ unsigned char i=0,value=0,value1=0。 SCL=0。 DO=1。 CS=0。 //開始 SCL=1。 //第一個(gè)上升沿 SCL=0。 DO=SGL。 SCL=1。 //第二個(gè)上升沿 SCL=0。 DO=ODD。 SCL=1。 //第三個(gè)上升沿 SCL=0。 //第三個(gè)下降沿 DO=1。 for(i=0。i8。i++) { SCL=1。 SCL=0。 //開始從第四個(gè)下降沿接收數(shù)據(jù) value=1。 if(DO) value++。 } for(i=0。i8。i++) { //接收校驗(yàn)數(shù)據(jù) value1=1。 if(DO) value1+=0x80。 SCL=1。 SCL=0。 } CS=1。 SCL=1。 if(value==value1) //與校驗(yàn)數(shù)據(jù)比較,正確就返回?cái)?shù)據(jù),否則返回0 return value。 return 0。}/*************定時(shí)器0初始化程序***************/void time_init() { EA = 1。 //開總中斷 TMOD = 0X02。 //定時(shí)器0、定時(shí)器1工作方式1 TH0=216。 //每40us進(jìn)一次中斷 TL0=216。 ET0 = 1。 //開定時(shí)器0中斷 TR0 = 0。 //允許定時(shí)器0定時(shí)}/********************獨(dú)立按鍵程序*****************/uchar key_can。 //按鍵值void key() //獨(dú)立按鍵程序{ static uchar key_new。 key_can = 20。 //按鍵值還原 P3 |= 0xf0。 if((P3 amp。 0xf0) != 0xf0) //按鍵按下 { delay_1ms(1)。 //按鍵消抖動(dòng) if(((P3 amp。 0xf0) != 0xf0) amp。amp。 (key_new == 1)) { //確認(rèn)是按鍵按下 key_new = 0。 switch(P3 amp。 0xf0) { case 0xd0: key_can = 3。 break。 //得到k1鍵值 case 0xb0: key_can = 2。 break。 //得到K2鍵值 case 0x70: key_can = 1。 break。 //得到k3鍵值 } } } else key_new = 1。 }/****************按鍵顯示函數(shù)***************/void key_with(){ if(key_can == 1) //設(shè)置鍵 { menu_1 ++。 if(menu_1 1) { menu_1 = 0。 init_1602()。 //lcd1602初始化 } } if(menu_1 == 1) // { if(key_can == 2) { s_pm ++ 。 // if(s_pm = 999) s_pm = 999。 } if(key_can == 3) // { s_pm 。 if(s_pm = 1) s_pm = 1。 } write_sfm_pm(2,8,s_pm)。 // write_(0x80+0x40+7)。 //將光標(biāo)移動(dòng)到秒個(gè)位 write_(0x0f)。 //顯示光標(biāo)并且閃爍 write_eeprom()。 //保存數(shù)據(jù) } } /****************報(bào)警函數(shù)***************/void clock_h_l(){ static uchar value。 if(pm = s_pm) { value ++。 if(value = 2) beep = ~beep。 //蜂鳴器報(bào)警 } else { beep = 1。 value = 0。 } }/************************************/ void PM25_void(){ uint PM_AD_buf=0。 uint PM_AD_dat=0。 uint AD_dat1=0。 float PM_js=。 bit flag1=0 。 GP2Y_LED = 1。 TR0=1。 //開啟中斷 while(1) { if(time_num15) //大約 break。 } AD_dat1 = ad0832read(1,0)。 //模數(shù)轉(zhuǎn)換 PM_AD_dat=AD_dat1。 PM_AD_dat=PM_AD_dat*8+AD_dat1。 PM_AD_dat/=9。 //模數(shù)轉(zhuǎn)換后計(jì)算平均值 PM_js=((float)(PM_AD_dat/+))*17291。// if(PM_js 0) PM_js = 0。 PM_dat=(uint)(PM_js)。 b=PM_dat。 if(b=999) b=99。 //數(shù)據(jù)修正 pm = b。}/******************主程序**********************/ void main(){ uint PM_AD_buf=0。 uint PM_AD_dat=0。 uint AD_dat1=0。 float PM_js=。 bit flag1=0 。 beep = 0。 //開機(jī)叫一聲 delay_1ms(150)。 P0 = P1 = P2 = P3 = 0xff。 init_eeprom()。 ////開始初始化保存的數(shù)據(jù) time_init()。 //定時(shí)器初始化 init_1602()。 //lcd1602初始化 GP2Y_LED = 0。// GP2Y_LED = 1。 while(1) { flag_300ms ++。 if(flag_300ms = 300) { flag_300ms = 0。 if(menu_1 == 0) //開始界面顯示的內(nèi)容 { PM25_void()。 write_sfm_pm(1,8,pm) 。 //顯示PM } clock_h_l()。 //報(bào)警函數(shù) } key()。 if(key_can 10) { key_with()。 //設(shè)置報(bào)警 } delay_1ms(1)。 }}/*************定時(shí)器0中斷服務(wù)程序***************/ void time0_int() interrupt 1 //定時(shí)中斷函數(shù) 每40us進(jìn)一次中斷 { time_num1++。 //定時(shí)計(jì)數(shù)變量+1 if(time_num1==8) { GP2Y_LED=0。 //輸出低電平,驅(qū)動(dòng)傳感器 } else if(time_num1250) //10MS后計(jì)數(shù)器清零,關(guān)閉定時(shí)器 { time_num1=0。 TR0=0。 } }附 錄 B電路原理圖46河南科技大學(xué)畢業(yè)論文
點(diǎn)擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1