




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
習題填空題單總線,只有信號線,既傳輸又傳輸數(shù)據(jù)。答:1根,輸入,輸出2.一個符合1-Wire協(xié)議的芯片都有位ROM,包括位的序列號、位的家族碼和位的CRC碼。答:64,48,8,83.DS18B20是數(shù)字溫度傳感器。答:單總線4.I2C器件都有的地址。答:唯一5.I2C串行總線有條信號線。答:兩6.SPI總線是Motorola公司推出的一種串行通信方式。是一種三線同步總線。答:同步,全雙工二.Proteus虛擬仿真設計任務:采用DS18B20測量溫度,將采集的溫度信息用LCD1602顯示,并通過通過串口上傳至計算機。計算機端采用串口助手接收。具有越線報警功能。答:1.硬件電路設計2.軟件設計main.c/**********************************************************實現(xiàn)功能:數(shù)字溫度計,要求:用1602液晶顯示溫度***********************************************************/#include<reg52.h>#include<LCD1602.h>#include<DS18B20.h>#include<stdio.h>#include<uart.h>#defineucharunsignedchar#defineuintunsignedint sbitbuzzer=P1^4;//蜂鳴器 /************************主函數(shù)******************************/voidmain(){ uart_init(); EA=1; //開總中斷 LCD_init(); delay(1000); while(1) { if(flag==0) //檢測到flag=0,說明DS18B20存在 { DS18B20_Temperature();// write_cmd(0x80); write_str("Tem:"); write_data((Temperature/100)%10+48); write_data((Temperature/10)%10+48); write_data('.'); write_data(Temperature%10+48); write_data(0xdf); write_data('C'); if(Temperature/10>=25) { buzzer=0; } else { buzzer=1; } } delay(500); printf("Temperature=%d",Temperature/10);//串口打印結(jié)果 printf("C\r\n"); }}uart.c代碼#include<uart.h>#include<delay.h>#include<stdio.h>#include<DS18B20.h>voiduart_init(){TH1=0xFD; //晶振11.0592mhz波特率設為9600TL1=0xFD;TMOD|=0x20; //定時器1方式2SCON=0x50; //串口接收使能ES=1; //串口中斷使能TR1=1; //定時器1使能TI=1; //發(fā)送中斷標記位,必須設置}uart.h代碼#ifndefUART_H_#defineUART_H_voiduart_init();#endifds18b20.c代碼#include<DS18B20.h>bitflag;uintTemperature=0;/************************DS18B20程序*************************/bitinit_DS18B20() //DS18B20初始化{ ucharnum; DQ=1; for(num=0;num<2;num++);//先拉高 DQ=0; for(num=0;num<200;num++);//480-960us powerup DQ=1; for(num=0;num<20;num++); //>60uswait flag=DQ; //響應 for(num=0;num<150;num++); // 60-240usds18b20存在信號 DQ=1; returnflag;}voidDS18B20_WR_CHAR(ucharbyte) //寫一個字節(jié)(先寫低位){ ucharnum; ucharnum1; for(num1=0;num1<8;num1++) { DQ=0; //拉低 _nop_(); //下拉1us _nop_(); DQ=byte&0x01; for(num=0;num<20;num++); //>60uswait byte>>=1; DQ=1; //拉高 _nop_(); _nop_(); } }ucharDS18B20_RD_CHAR() //讀一個字節(jié)(先讀低位){ ucharnum; ucharnum1; ucharbyte=0; for(num1=0;num1<8;num1++) { DQ=0; //拉低 _nop_(); DQ=1; for(num=0;num<1;num++);//<10us byte>>=1; if(DQ==1) byte|=0x80; for(num=0;num<20;num++);//>60us } returnbyte;}voidDS18B20_Temperature() //溫度讀取及處理函數(shù){ uchartemperaturel=0; uchartemperatureh=0; if(init_DS18B20()==0) { DS18B20_WR_CHAR(0xcc);//跳過ROM DS18B20_WR_CHAR(0x44);//啟動溫度轉(zhuǎn)換,結(jié)果存入內(nèi)部RAM delay(1000); if(init_DS18B20()==0)//初始化返回值為0,器件存在 { DS18B20_WR_CHAR(0xcc);//跳過ROM DS18B20_WR_CHAR(0xBE);//啟動溫度轉(zhuǎn)換,結(jié)果存入內(nèi)部RAM _nop_(); temperaturel=DS18B20_RD_CHAR();//讀溫度低8位 temperatureh=DS18B20_RD_CHAR();//讀溫度高8位 Temperature=(temperatureh*256+temperaturel)*0.625;//轉(zhuǎn)換為溫度,溫度比正常大10倍 init_DS18B20(); } }}DS18B20.h代碼#ifndefDS18B20_H_#defineDS18B20_H_#include<reg52.h>#include<delay.h>sbitDQ=P1^3;//DS18B20數(shù)據(jù)端externuintTemperature;externbitflag;bitinit_DS18B20(); //DS18B20初始化voidDS18B20_WR_CHAR(ucharbyte); //寫一個字節(jié)(先寫低位)ucharDS18B20_RD_CHAR(); //讀一個字節(jié)(先讀低位)voidDS18B20_Temperature(); //溫度讀取及處理函數(shù)#endiflcd1602.c代碼#include<LCD1602.h>/***********************LCD1602顯示****************************/voidLCD_init() //LCD1602初始化{lcdrw=0;//先將RW拉低 lcden=0;//再把EN拉低 write_cmd(0x38);//顯示模式設置 write_cmd(0x0c);//顯示開關(guān),光標沒有閃爍 write_cmd(0x06);//顯示光標移動設置 write_cmd(0x01);//清除屏幕 write_cmd(0x80);//把光標移到第一行第一個位置}voidwrite_cmd(charcmd)//寫指令函數(shù){ lcdrs=0; OUT=cmd; delay(1); lcden=1; delay(1); lcden=0;}voidwrite_data(uchardat)//寫數(shù)據(jù)函數(shù){ lcdrs=1; OUT=dat; delay(1); lcden=1; delay(1); lcden=0;}voidwrite_str(uchar*str)//寫字符串函數(shù){ while(*str!='\0') { write_data(*str++); delay(5); }}LCD1602.h代碼#ifndefLCD1602_H_#defineLCD1602_H_#include<reg52.h>#include<delay.h>#defineOUTP2//LCD1602數(shù)據(jù)端sbitlcdrs=P1^0;//LCD1602命令數(shù)據(jù)控制端sbitlcdrw=P1^1;//LCD1602讀寫端sbitlcden=P1^2;//LCD1602使能端voidLCD_init();//LCD1602初始化voidwrite_cmd(ucharcmd);//寫指令函數(shù)voidwrite_data(uchardat);//寫數(shù)據(jù)函數(shù)voidwrite_str(uchar*str);//寫字符串函數(shù)#endif3.仿真運行2.
Proteus
虛擬仿真設計任務:采用單片機作為核心元件,循環(huán)采集4路電壓信號,并在LCD上實時顯示采集的4路電壓值,通過按鍵控制開始采集和停止采集。將采集的信號存在AT24C02存儲器中。答:1.硬件電路設計2.軟件設計main.c#include<reg52.h>#include<EX_interrupt.h>#include<LCD1602.h>#include<I2C.h>#include<PCF8591.h>#include<AT24C02.h>ucharadcval,flag;/************************主函數(shù)******************************/voidmain(){ ucharstr[10]; INT_init(); LCD_init(); I2C_init(); while(1) { if(flag==1) { adcval=GetADC_PCF8591(0x00);//啟動AIN0通道開始轉(zhuǎn)換 ADCvalToStr(str,adcval); write_add(0x01,adcval);write_cmd(0x80);//把光標移到第一行第一個位置write_str("I0:"); write_cmd(0x83); write_str(str);//顯示AIN0通道采集電壓 adcval=GetADC_PCF8591(0x01);//啟動AIN1通道開始轉(zhuǎn)換 ADCvalToStr(str,adcval); write_add(0x04,adcval);write_cmd(0xC0);//把光標移到第一行第一個位置write_str("I1:"); write_cmd(0xC3); write_str(str);//顯示AIN1通道采集電壓 adcval=GetADC_PCF8591(0x02);//啟動AIN2通道開始轉(zhuǎn)換 ADCvalToStr(str,adcval); write_add(0x07,adcval);write_cmd(0x89);//把光標移到第一行第一個位置write_str("I2:"); write_cmd(0x8c); write_str(str);//顯示AIN2通道采集電壓 adcval=GetADC_PCF8591(0x03);//啟動AIN3通道開始轉(zhuǎn)換 ADCvalToStr(str,adcval); write_add(0x0a,adcval);write_cmd(0xC9);//把光標移到第一行第一個位置write_str("I3:"); write_cmd(0xCc); write_str(str);//顯示AIN3通道采集電壓 } if(flag==2) { ; } }}PCF8591.c/********讀取當前的ADC轉(zhuǎn)換值,chn為ADC的通道號0~3***********/ #include<PCF8591.h> #include<AT24C02.h> ucharGetADC_PCF8591(ucharchn){ ucharadcdate; start();//發(fā)送啟動信號 write_byte(0x90);//發(fā)送尋址寫命令1001A2A1A0R/W=10010000 Ack(); //應答信號 write_byte(chn);//寫入模數(shù)轉(zhuǎn)換通道號 Ack();//應答信號 stop(); //發(fā)送停止信號 start();//發(fā)送啟動信號 write_byte(0x91);//尋址PCF8591,指定后續(xù)為讀操作 Ack(); //應答信號 read_byte();//先空讀一個字節(jié),提供采樣轉(zhuǎn)換時間 Ack(); //應答信號 adcdate=read_byte();// NoAck(); stop(); //發(fā)送停止信號 returnadcdate;}voidADCvalToStr(uchar*str,ucharval){val=(val*5*10)/256;str[0]=(val/10)+'0';str[1]='.';str[2]=(val%10)+'0';str[3]='V';str[4]='\0';}AT24C02.c#include<AT24C02.h>/**************
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 蘇州幼兒師范高等??茖W?!秾I(yè)軟件應用(水文與水資源工程)》2023-2024學年第二學期期末試卷
- 遼寧經(jīng)濟職業(yè)技術(shù)學院《操作系統(tǒng)原理》2023-2024學年第二學期期末試卷
- 阿克蘇工業(yè)職業(yè)技術(shù)學院《媒介集團研究》2023-2024學年第二學期期末試卷
- 重慶移通學院《材料力學》2023-2024學年第二學期期末試卷
- 曲阜遠東職業(yè)技術(shù)學院《化學教育測量與評價》2023-2024學年第二學期期末試卷
- 西昌民族幼兒師范高等??茖W?!稄V播電視新聞》2023-2024學年第二學期期末試卷
- 山西傳媒學院《農(nóng)村發(fā)展概論》2023-2024學年第二學期期末試卷
- 西昌學院《紀錄片鑒賞》2023-2024學年第二學期期末試卷
- 清華大學《碳一化工》2023-2024學年第二學期期末試卷
- 山東理工大學《節(jié)奏與打擊樂基礎訓練》2023-2024學年第二學期期末試卷
- 2025年高考作文備考之十大熱點主題及寫作導引
- 海外安保面試題及答案
- 弘揚傳承中華傳統(tǒng)文化
- 危重患者的早期康復
- 2025年北京市西城區(qū)高三一模數(shù)學試卷(含答案)
- 鄉(xiāng)村振興戰(zhàn)略相關(guān)試題及答案
- QC080000基礎知識課件
- 急診護理團隊精神
- 機車運用質(zhì)量指標馬元課件
- 模擬退火與數(shù)論-深度研究
- 《防災減災專題培訓》課件
評論
0/150
提交評論