2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  基于Si光電池的照度計(jì)設(shè)計(jì)與調(diào)試方案</p><p><b>  1 技術(shù)指標(biāo)</b></p><p>  要求系統(tǒng)測(cè)量范圍為0-200lx,測(cè)量精度達(dá)到1lx;</p><p>  設(shè)計(jì)光電池輸出信號(hào)處理電路,要求可以控制處理后的電壓幅度;</p><p>  設(shè)計(jì)照度計(jì)硬件電路系統(tǒng),要求系統(tǒng)各個(gè)

2、模塊能夠正常工作;</p><p>  設(shè)計(jì)照度計(jì)軟件控制系統(tǒng),要求系統(tǒng)整體工作穩(wěn)定;</p><p>  給設(shè)計(jì)系統(tǒng)定標(biāo),要求測(cè)量結(jié)果誤差在1%以?xún)?nèi)。</p><p>  2 設(shè)計(jì)方案及其比較</p><p>  當(dāng)光電池的光敏面收到光照射時(shí),PN節(jié)耗盡區(qū)內(nèi)的光生電子與空穴在內(nèi)建電場(chǎng)力的作用下分別向N區(qū)和P區(qū)運(yùn)動(dòng),在閉合的電路中產(chǎn)生光電流。

3、首先將光電流經(jīng)過(guò)I/V變換和電壓放大后形成直流電壓信號(hào),其次通過(guò)模數(shù)轉(zhuǎn)換電路將處理得到的直流電壓信號(hào)轉(zhuǎn)換為數(shù)字電壓信號(hào),再通過(guò)單片機(jī)處理后得到可以反應(yīng)光照度的數(shù)字信號(hào),最后通過(guò)LCD實(shí)時(shí)顯示出來(lái)。照度計(jì)的系統(tǒng)框圖如圖1所示。</p><p>  圖1 照度計(jì)系統(tǒng)框圖</p><p><b>  2.1 方案一</b></p><p>  通過(guò)電

4、阻轉(zhuǎn)換的方式進(jìn)行I/V轉(zhuǎn)換,如圖2,之后將電壓放大后的直流電壓信號(hào)通過(guò)由ADC0809構(gòu)成的A/D轉(zhuǎn)換模塊得到數(shù)字電壓信號(hào),然后,通過(guò)單片機(jī)得到可以反應(yīng)光照度的數(shù)字信號(hào),最后,通過(guò)LED數(shù)碼管實(shí)時(shí)顯示出來(lái)。</p><p><b>  圖2 電阻轉(zhuǎn)換模塊</b></p><p><b>  2.2 方案二</b></p><p

5、>  通過(guò)三極管構(gòu)建放大電路得到電壓信號(hào)進(jìn)行I/V轉(zhuǎn)換,如圖3,之后將電壓放大后的直流電壓信號(hào)通過(guò)由ADC0809構(gòu)成的A/D轉(zhuǎn)換模塊得到數(shù)字電壓信號(hào),然后,通過(guò)單片機(jī)得到可以反應(yīng)光照度的數(shù)字信號(hào),最后,通過(guò)LED數(shù)碼管實(shí)時(shí)顯示出來(lái)。</p><p>  圖3 三極管轉(zhuǎn)換模式</p><p><b>  2.3 方案三</b></p><p&

6、gt;  通過(guò)集成運(yùn)放芯片構(gòu)建放大電路得到電壓信號(hào)進(jìn)行I/V轉(zhuǎn)換,如圖4,之后將電壓放大后的直流電壓信號(hào)通過(guò)由ADC0809構(gòu)成的A/D轉(zhuǎn)換模塊得到數(shù)字電壓信號(hào),然后,通過(guò)單片機(jī)得到可以反應(yīng)光照度的數(shù)字信號(hào),最后,通過(guò)LED數(shù)碼管實(shí)時(shí)顯示出來(lái)。</p><p>  圖4 集成運(yùn)放轉(zhuǎn)換模式</p><p><b>  2.4 方案比較</b></p>&l

7、t;p>  三種方案各有優(yōu)缺點(diǎn),方案一適合在電流較大的情況下使用,方案二適合在電流變換范圍小的情況下使用,方案三適用范圍廣,但成本會(huì)提高很多。由于此次課程設(shè)計(jì)電路板上已經(jīng)有運(yùn)放芯片,故采取方案三。</p><p><b>  3 實(shí)現(xiàn)方案</b></p><p><b>  3.1 硬件部分</b></p><p>

8、  系統(tǒng)的硬件由I/V變換模塊、光電池前置放大模塊、A/D轉(zhuǎn)換模塊、單片機(jī)控制模塊以及數(shù)碼管顯示模塊組成,如圖5,Proteus仿真圖如圖6所示。</p><p>  當(dāng)光電池的光敏面收到光照射時(shí),PN節(jié)耗盡區(qū)內(nèi)的光生電子與空穴在內(nèi)建電場(chǎng)力的作用下分別向N區(qū)和P區(qū)運(yùn)動(dòng),在閉合的電路中產(chǎn)生光電流。因?yàn)楣怆娏餍枰D(zhuǎn)換為電壓信號(hào),才能通過(guò)數(shù)碼管顯示,所以需要進(jìn)行I/V變換。但是,所得的電壓值過(guò)小,不宜測(cè)量,故需要電壓放

9、大模塊將其放大為直流電壓信號(hào)。其次,數(shù)碼管顯示的是數(shù)字信號(hào),所以,需要將放大得到的直流電壓信號(hào)進(jìn)過(guò)A/D轉(zhuǎn)換模塊轉(zhuǎn)換為數(shù)字電壓信號(hào)。最后,通過(guò)單片機(jī)處理后得到可以反應(yīng)光照度的數(shù)字信號(hào),并通過(guò)數(shù)碼管實(shí)時(shí)顯示出來(lái)。</p><p><b>  圖5 系統(tǒng)電路圖</b></p><p><b>  圖6 總電路圖</b></p><

10、p>  1 光電池和電壓放大及I/V轉(zhuǎn)換模塊</p><p>  本系統(tǒng)選用的硅光電池光譜響應(yīng)波長(zhǎng)一般為0.4~1.1微米,峰值響應(yīng)波長(zhǎng)為0.9微米,其特性曲線如圖7所示。在不同光照下,硅光電池有不同的電信號(hào)輸出,且二者之間具有單值對(duì)應(yīng)關(guān)系,因此,可以通過(guò)檢測(cè)其輸出電信號(hào)并根據(jù)其輸出特性關(guān)系,得到對(duì)應(yīng)的光照度信息,以達(dá)到光照度檢測(cè)的目的。</p><p>  圖7 硅光電池光譜響應(yīng)特

11、性曲線</p><p>  該模塊使用LM358運(yùn)算放大芯片實(shí)現(xiàn),如圖8所示,該芯片引腳如圖9所示,可以實(shí)現(xiàn)I/V變換,即將光電流信號(hào)轉(zhuǎn)換為直流電壓信號(hào),并且進(jìn)行放大。</p><p>  圖8 電壓放大及I/V轉(zhuǎn)換模塊</p><p>  圖9 LM358引腳圖</p><p>  2 A/D轉(zhuǎn)換模塊</p><p&

12、gt;  該模塊由PCF8591芯片實(shí)現(xiàn),如圖10所示,該芯片引腳如圖11所示,可以實(shí)現(xiàn)A/D轉(zhuǎn)換,將直流電壓信號(hào)轉(zhuǎn)換為數(shù)字電壓信號(hào)。</p><p>  PCF8591各引腳功能如下:</p><p>  AIN0、AIN1、AIN2、AIN3:模擬信號(hào)輸入端;</p><p>  A0、A1、A2:引腳地址端;</p><p>  VDD

13、、VSS:電源端;</p><p>  SDA、SCL:I2C總線的數(shù)據(jù)線、時(shí)鐘線;</p><p>  OSC:外部時(shí)鐘輸入端,內(nèi)部時(shí)鐘輸出端;</p><p>  EXT:內(nèi)部、外部時(shí)鐘選擇線,使用內(nèi)部時(shí)鐘時(shí)EXT接地;</p><p>  AGND:模擬信號(hào)地;</p><p>  AOUT:D/A轉(zhuǎn)換輸出端;&

14、lt;/p><p>  VREF:基準(zhǔn)電源端;</p><p>  圖10 A/D轉(zhuǎn)換模塊</p><p>  圖11 PCF8591引腳圖</p><p><b>  3 單片機(jī)控制模塊</b></p><p>  該模塊由89C51芯片實(shí)現(xiàn),如圖12所示,89C51引腳圖如圖13所示。該模塊通過(guò)芯

15、片內(nèi)部的程序控制驅(qū)動(dòng)PCF8591芯片并采集模數(shù)轉(zhuǎn)換后的數(shù)字信號(hào),對(duì)采集后的數(shù)字信號(hào)進(jìn)行處理,控制數(shù)碼管顯示系統(tǒng)檢測(cè)得到的照度值。</p><p><b>  圖12 單片機(jī)系統(tǒng)</b></p><p>  圖13 89C51引腳圖</p><p>  4 數(shù)碼管顯示系統(tǒng)及鎖存器</p><p>  該模塊由芯片74HC

16、573和數(shù)碼管實(shí)現(xiàn),如圖14,74HC573引腳圖如圖15所示。數(shù)碼管段選使用573鎖存器,因?yàn)閱纹瑱C(jī)引腳直接驅(qū)動(dòng)功率不太夠。</p><p>  圖14 數(shù)碼管顯示系統(tǒng)及鎖存器</p><p>  圖15 74HC573</p><p><b>  3.2 軟件部分</b></p><p><b>  程序部

17、分代碼如下:</b></p><p><b>  1 main.c</b></p><p>  /*******************************************************************************</p><p>  * </p>

18、<p>  * 普中科技</p><p>  --------------------------------------------------------------------------------</p><p>  * 實(shí) 驗(yàn) 名 : AD顯示試驗(yàn)</p><p>  * 實(shí)驗(yàn)說(shuō)明

19、 : 使用數(shù)碼管顯示AD讀取到電位器的電壓值</p><p>  * 連接方式 : 見(jiàn)連接圖</p><p>  * 注 意 : </p><p>  *******************************************************************************/</p>&l

20、t;p>  #include<reg51.h></p><p>  #include"i2c.h"</p><p>  //--定義使用的IO--//</p><p>  #define GPIO_DIG P0</p><p>  sbit LSA=P2^2;</p><p>  

21、sbit LSB=P2^3;</p><p>  sbit LSC=P2^4;</p><p>  sbit LE=P2^2;</p><p>  //--定義PCF8591的讀寫(xiě)地址--//</p><p>  #define WRITEADDR 0x90 //寫(xiě)地址</p><p>  #define R

22、EADADDR 0x91 //讀地址</p><p>  //--定義全局變量--//</p><p>  unsigned char code DIG_CODE[17]={</p><p>  0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,</p><p>  0x7f,0x6f,0x77,0x7c

23、,0x39,0x5e,0x79,0x71};</p><p>  //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼</p><p>  uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};</p>&l

24、t;p>  unsigned char DisplayData[8];</p><p>  //用來(lái)存放要顯示的8位數(shù)的值</p><p>  //--聲明全局函數(shù)--//</p><p>  void DigDisplay(); //動(dòng)態(tài)顯示函數(shù)</p><p>  void Pcf8591SendByte(unsigned char

25、 channel);</p><p>  unsigned char Pcf8591ReadByte();</p><p>  void Pcf8591DaConversion(unsigned char value);</p><p>  void DigDisplay();</p><p>  /*********************

26、*********************************************</p><p><b>  長(zhǎng)延時(shí)函數(shù)</b></p><p>  ******************************************************************/</p><p>  void delay(ucha

27、r z)</p><p><b>  {</b></p><p>  uchar x,y;</p><p>  for(x=z;x>0;x--)</p><p>  for(y=50;y>0;y--);</p><p><b>  }</b></p>

28、<p>  /*******************************************************************************</p><p>  * 函 數(shù) 名 : main</p><p>  * 函數(shù)功能 : 主函數(shù)</p><p>  * 輸 入 : 無(wú)&

29、lt;/p><p>  * 輸 出 : 無(wú)</p><p>  *******************************************************************************/</p><p>  void main()</p><p><b>  {</b&g

30、t;</p><p>  unsigned int adNum,n;</p><p>  uint b1,b,g,s;</p><p>  int time1;</p><p>  float value;</p><p>  uchar date[10];</p><p><b> 

31、 while(1)</b></p><p><b>  {</b></p><p><b>  time1++;</b></p><p>  if(time1%15)</p><p><b>  {</b></p><p>  Pcf859

32、1SendByte(0);</p><p>  date[time1%15] = Pcf8591ReadByte()*2;</p><p><b>  }</b></p><p>  //--顯示電位器電壓--//</p><p>  //Pcf8591SendByte(0); //發(fā)送電位器

33、轉(zhuǎn)換命令</p><p>  if(time1==150) </p><p><b>  {time1=0;</b></p><p>  //adNum = Pcf8591ReadByte()*2;//將轉(zhuǎn)換結(jié)果讀走</p><p>  adNum = (date[0]+date[1]+date[2]+date[3]

34、+date[4]+date[5]+date[6]+date[7]+date[8]+date[9])/10.;</p><p>  //--我們8591每讀取到一個(gè)1就表示5/256V,所以要知道電壓值就乘以0.01953--//</p><p>  value = adNum * 0.01953/1.3; //轉(zhuǎn)為電壓值</p><p>  adNum = val

35、ue * 1000; //保留兩位小數(shù)</p><p><b>  n=adNum;</b></p><p><b>  }</b></p><p>  // n=n*500./255;</p><p><b>  // n=123;</b></p>

36、<p>  b1=n/1000;</p><p>  b=n%1000/100;</p><p>  s=n/10%10;</p><p><b>  g=n%10;</b></p><p><b>  LE=1;</b></p><p>  P0=0xfe;P1

37、=table[b1];delay(10);</p><p>  P0=0xfd;P1=table[b];delay(10);</p><p>  P0=0xfb;P1=table[s];delay(10);</p><p>  P0=0xf7;P1=table[g];delay(10);</p><p><b>  }</b&

38、gt;</p><p><b>  }</b></p><p>  /*******************************************************************************</p><p>  * 函 數(shù) 名 : Pcf8591SendByte</p><

39、;p>  * 函數(shù)功能 : 寫(xiě)入一個(gè)控制命令</p><p>  * 輸 入 : channel(轉(zhuǎn)換通道)</p><p>  * 輸 出 : 無(wú)</p><p>  **********************************************************************

40、*********/</p><p>  void Pcf8591SendByte(unsigned char channel)</p><p><b>  {</b></p><p>  I2C_Start();</p><p>  I2C_SendByte(WRITEADDR, 1); //發(fā)送寫(xiě)器件地址&l

41、t;/p><p>  I2C_SendByte(0x40|channel, 0); //發(fā)送控制寄存器</p><p>  I2C_Stop();</p><p><b>  }</b></p><p>  /**********************************************************

42、*********************</p><p>  * 函 數(shù) 名 : Pcf8591ReadByte</p><p>  * 函數(shù)功能 : 讀取一個(gè)轉(zhuǎn)換值</p><p>  * 輸 入 : 無(wú)</p><p>  * 輸 出 : dat</p>

43、<p>  *******************************************************************************/</p><p>  unsigned char Pcf8591ReadByte()</p><p><b>  {</b></p><p>  unsigned

44、char dat;</p><p>  I2C_Start();</p><p>  I2C_SendByte(READADDR, 1);//發(fā)送讀器件地址</p><p>  dat=I2C_ReadByte(); //讀取數(shù)據(jù)</p><p>  I2C_Stop(); //結(jié)束總線</p>&l

45、t;p>  return dat;</p><p><b>  }</b></p><p>  /*******************************************************************************</p><p>  * 函 數(shù) 名 : Pcf8591DaConv

46、ersion</p><p>  * 函數(shù)功能 : PCF8591的輸出端輸出模擬量</p><p>  * 輸 入 : value(轉(zhuǎn)換的數(shù)值)</p><p>  * 輸 出 : 無(wú)</p><p>  ******************************************

47、*************************************/</p><p>  void Pcf8591DaConversion(unsigned char value)</p><p><b>  {</b></p><p>  I2C_Start();</p><p>  I2C_SendByte(

48、WRITEADDR, 1);//發(fā)送寫(xiě)器件地址</p><p>  I2C_SendByte(0x40, 1); //開(kāi)啟DA寫(xiě)到控制寄存器</p><p>  I2C_SendByte(value, 0); //發(fā)送轉(zhuǎn)換數(shù)值</p><p>  I2C_Stop();</p><p><b>  }</b&g

49、t;</p><p>  /*******************************************************************************</p><p>  * 函 數(shù) 名 : DigDisplay</p><p>  * 函數(shù)功能 : 使用數(shù)碼管顯示</p><p>

50、  * 輸 入 : 無(wú)</p><p>  * 輸 出 : 無(wú)</p><p>  *******************************************************************************/</p><p>  void DigDisplay()</p>

51、<p><b>  {</b></p><p>  unsigned char i;</p><p>  unsigned int j;</p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  swit

52、ch(i) //位選,選擇點(diǎn)亮的數(shù)碼管,</p><p><b>  {</b></p><p><b>  case(0):</b></p><p>  LSA=0;LSB=0;LSC=0; break;//顯示第0位</p><p><b>  case(1):</b>&

53、lt;/p><p>  LSA=1;LSB=0;LSC=0; break;//顯示第1位</p><p><b>  case(2):</b></p><p>  LSA=0;LSB=1;LSC=0; break;//顯示第2位</p><p><b>  case(3):</b></p>

54、<p>  LSA=1;LSB=1;LSC=0; break;//顯示第3位</p><p><b>  case(4):</b></p><p>  LSA=0;LSB=0;LSC=1; break;//顯示第4位</p><p><b>  case(5):</b></p><p>

55、  LSA=1;LSB=0;LSC=1; break;//顯示第5位</p><p><b>  case(6):</b></p><p>  LSA=0;LSB=1;LSC=1; break;//顯示第6位</p><p><b>  case(7):</b></p><p>  LSA=1;LS

56、B=1;LSC=1; break;//顯示第7位</p><p><b>  }</b></p><p>  GPIO_DIG=DisplayData[i];//發(fā)送段碼</p><p>  j=500; //掃描間隔時(shí)間設(shè)定</p><p>  while(j--);</p><p&

57、gt;  GPIO_DIG=0x00;//消隱</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  2 i2c.c</b></p><p>  #include"i2c.h"</p>&l

58、t;p>  /*******************************************************************************</p><p>  * 函 數(shù) 名 : Delay1us()</p><p>  * 函數(shù)功能 : 延時(shí)</p><p>  * 輸 入 :

59、無(wú)</p><p>  * 輸 出 : 無(wú)</p><p>  *******************************************************************************/</p><p>  void I2C_Delay10us()</p><p><b>

60、  {</b></p><p>  uchar a, b;</p><p>  for(b=1; b>0; b--)</p><p><b>  {</b></p><p>  for(a=2; a>0; a--);</p><p><b>  }</b&g

61、t;</p><p><b>  }</b></p><p>  /*******************************************************************************</p><p>  * 函 數(shù) 名 : I2C_Start()</p><p>

62、;  * 函數(shù)功能 : 起始信號(hào):在I2C_SCL時(shí)鐘信號(hào)在高電平期間I2C_SDA信號(hào)產(chǎn)生一個(gè)下降沿</p><p>  * 輸 入 : 無(wú)</p><p>  * 輸 出 : 無(wú)</p><p>  * 備 注 : 起始之后I2C_SDA和I2C_SCL都為0</p><

63、;p>  *******************************************************************************/</p><p>  void I2C_Start()</p><p><b>  {</b></p><p>  I2C_SDA = 1;</p><

64、;p>  I2C_Delay10us();</p><p>  I2C_SCL = 1;</p><p>  I2C_Delay10us();//建立時(shí)間是I2C_SDA保持時(shí)間>4.7us</p><p>  I2C_SDA = 0;</p><p>  I2C_Delay10us();//保持時(shí)間是>4us</p&

65、gt;<p>  I2C_SCL = 0;</p><p>  I2C_Delay10us();</p><p><b>  }</b></p><p>  /*******************************************************************************&l

66、t;/p><p>  * 函 數(shù) 名 : I2C_Stop()</p><p>  * 函數(shù)功能 : 終止信號(hào):在I2C_SCL時(shí)鐘信號(hào)高電平期間I2C_SDA信號(hào)產(chǎn)生一個(gè)上升沿</p><p>  * 輸 入 : 無(wú)</p><p>  * 輸 出 : 無(wú)

67、</p><p>  * 備 注 : 結(jié)束之后保持I2C_SDA和I2C_SCL都為1;表示總線空閑</p><p>  *******************************************************************************/</p><p>  void I2C_Stop()<

68、/p><p><b>  {</b></p><p>  I2C_SDA = 0;</p><p>  I2C_Delay10us();</p><p>  I2C_SCL = 1;</p><p>  I2C_Delay10us();//建立時(shí)間大于4.7us</p><p>

69、;  I2C_SDA = 1;</p><p>  I2C_Delay10us();</p><p><b>  }</b></p><p>  /*******************************************************************************</p><p&

70、gt;  * 函 數(shù) 名 : I2cSendByte(uchar num)</p><p>  * 函數(shù)功能 : 通過(guò)I2C發(fā)送一個(gè)字節(jié)。在I2C_SCL時(shí)鐘信號(hào)高電平期間,</p><p>  * * 保持發(fā)送信號(hào)I2C_SDA保持穩(wěn)定</p><p>  * 輸 入

71、 : num ,ack</p><p>  * 輸 出 : 0或1。發(fā)送成功返回1,發(fā)送失敗返回0</p><p>  * 備 注 : 發(fā)送完一個(gè)字節(jié)I2C_SCL=0, 需要應(yīng)答則應(yīng)答設(shè)置為1,否則為0</p><p>  ******************************************

72、*************************************/</p><p>  uchar I2C_SendByte(uchar dat, uchar ack)</p><p><b>  {</b></p><p>  uchar a = 0,b = 0;//最大255,一個(gè)機(jī)器周期為1us,最大延時(shí)255us。</p

73、><p>  for(a=0; a<8; a++)//要發(fā)送8位,從最高位開(kāi)始</p><p><b>  {</b></p><p>  I2C_SDA = dat >> 7; //起始信號(hào)之后I2C_SCL=0,所以可以直接改變I2C_SDA信號(hào)</p><p>  dat = dat <<

74、; 1;</p><p>  I2C_Delay10us();</p><p>  I2C_SCL = 1;</p><p>  I2C_Delay10us();//建立時(shí)間>4.7us</p><p>  I2C_SCL = 0;</p><p>  I2C_Delay10us();//時(shí)間大于4us<

75、;/p><p><b>  }</b></p><p>  I2C_SDA = 1;</p><p>  I2C_Delay10us();</p><p>  I2C_SCL = 1;</p><p>  while(I2C_SDA && (ack == 1))//等待應(yīng)答,也就是等待

76、從設(shè)備把I2C_SDA拉低</p><p><b>  {</b></p><p><b>  b++;</b></p><p>  if(b > 200) //如果超過(guò)200us沒(méi)有應(yīng)答發(fā)送失敗,或者為非應(yīng)答,表示接收結(jié)束</p><p><b>  {</b><

77、;/p><p>  I2C_SCL = 0;</p><p>  I2C_Delay10us();</p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  }</b></p>

78、<p>  I2C_SCL = 0;</p><p>  I2C_Delay10us();</p><p>  return 1;</p><p><b>  }</b></p><p>  /*********************************************************

79、**********************</p><p>  * 函 數(shù) 名 : I2cReadByte()</p><p>  * 函數(shù)功能 : 使用I2c讀取一個(gè)字節(jié)</p><p>  * 輸 入 : 無(wú)</p><p>  * 輸 出 : dat&

80、lt;/p><p>  * 備 注 : 接收完一個(gè)字節(jié)I2C_SCL=0</p><p>  *******************************************************************************/</p><p>  uchar I2C_ReadByte()</p><

81、;p><b>  {</b></p><p>  uchar a = 0,dat = 0;</p><p>  I2C_SDA = 1;//起始和發(fā)送一個(gè)字節(jié)之后I2C_SCL都是0</p><p>  I2C_Delay10us();</p><p>  for(a=0; a<8; a++)//接收8

82、個(gè)字節(jié)</p><p><b>  {</b></p><p>  I2C_SCL = 1;</p><p>  I2C_Delay10us();</p><p>  dat <<= 1;</p><p>  dat |= I2C_SDA;</p><p>  

83、I2C_Delay10us();</p><p>  I2C_SCL = 0;</p><p>  I2C_Delay10us();</p><p><b>  }</b></p><p>  return dat;</p><p><b>  }</b></p&g

84、t;<p><b>  3 i2c.h</b></p><p>  #ifndef __I2C_H_</p><p>  #define __I2C_H_</p><p>  #include<reg51.h></p><p>  //---重定義關(guān)鍵詞---//</p><

85、p>  #ifndef uchar</p><p>  #define uchar unsigned char</p><p><b>  #endif</b></p><p>  #ifndef uint </p><p>  #define uint unsigned int</p><p&

86、gt;<b>  #endif</b></p><p>  //--定義使用的IO口--//</p><p>  sbit I2C_SCL = P2^1;</p><p>  sbit I2C_SDA = P2^0;</p><p>  //--聲明全局變量--//</p><p>  void

87、I2C_Delay10us();</p><p>  void I2C_Start();</p><p>  void I2C_Stop();</p><p>  uchar I2C_SendByte(uchar dat, uchar ack);</p><p>  uchar I2C_ReadByte();</p><p

88、><b>  #endif</b></p><p><b>  3.3 測(cè)試電路</b></p><p>  測(cè)試電路布線圖如圖16所示。</p><p>  圖16 測(cè)試電路布線圖</p><p><b>  4 調(diào)試過(guò)程及結(jié)論</b></p><p

89、>  4.1 調(diào)試過(guò)程的現(xiàn)象</p><p>  連接好電路后,將單片機(jī)程序下載進(jìn)芯片,打開(kāi)開(kāi)發(fā)板總開(kāi)關(guān),數(shù)碼管顯示當(dāng)前光照度對(duì)應(yīng)的電壓值,不過(guò)有小幅跳變,當(dāng)用手完全遮擋光電池的光敏面時(shí),數(shù)碼管顯示0,當(dāng)改變光強(qiáng)時(shí),數(shù)碼管顯示的電壓值隨之變化,且光強(qiáng)變小時(shí),電壓值降低,光強(qiáng)變大時(shí),電壓值增加,即趨勢(shì)是一樣的。</p><p>  4.2 調(diào)試過(guò)程中出現(xiàn)的問(wèn)題</p>&

90、lt;p>  1 使用燒錄器下載單片機(jī)程序的過(guò)程中,發(fā)現(xiàn)程序不可下載,下載了相應(yīng)的驅(qū)動(dòng)后,仍然有問(wèn)題,在老師的指點(diǎn)下,將P3口的接線換到別的接口,并且更改了程序后正常下載程序。</p><p>  2 數(shù)碼管顯示亂碼且順序不對(duì),因?yàn)槎芜x和位選接反了,更改之后,正確顯示。</p><p>  3 數(shù)碼管顯示的電壓值跳變范圍太大,難于讀數(shù),后來(lái)將程序進(jìn)行了一些更改,電壓值稍有跳變。<

91、;/p><p>  4 數(shù)碼管顯示的電壓值在光強(qiáng)較大時(shí),變化趨勢(shì)不對(duì),在調(diào)節(jié)了滑動(dòng)變阻器的阻值后趨勢(shì)變化正確。</p><p><b>  4.3 調(diào)試結(jié)論</b></p><p>  本系統(tǒng)的設(shè)計(jì)是基于Si光電池的照度計(jì)設(shè)計(jì)與調(diào)試,設(shè)計(jì)的電路基本可實(shí)現(xiàn)光照度的測(cè)量,且測(cè)量范圍為0-200lx,測(cè)量誤差7.4lx。</p><p

92、><b>  5 心得體會(huì)</b></p><p>  在學(xué)習(xí)光電技術(shù)這門(mén)課程的過(guò)程中,了解到了光照度的概念,認(rèn)識(shí)到了光照度與人們生活的密切聯(lián)系,因此,測(cè)量生活環(huán)境的光照度是非常重要的。此次課程設(shè)計(jì)給了我一個(gè)很好的實(shí)踐機(jī)會(huì)來(lái)設(shè)計(jì)電路并測(cè)量光照度的值。</p><p>  在剛拿到題目時(shí),感覺(jué)無(wú)從下手,后來(lái),查找了相關(guān)資料并且和同學(xué)討論后,漸漸有了思路,清楚了此次

93、需要完成的目標(biāo)以及如何實(shí)現(xiàn)。準(zhǔn)備過(guò)程中,查閱了相關(guān)芯片的資料,進(jìn)一步了解了其用法,并且提高了自己實(shí)際使用相關(guān)電子器件的能力。</p><p>  在連接電路的過(guò)程中,雖然不會(huì)像以前在面包板上連接時(shí)要求不許飛線和跨線,但由于平時(shí)連接的少,連接難度還是比較大的,不過(guò),耐心連仍然是可以完成的。在這個(gè)過(guò)程中,進(jìn)一步熟悉了相關(guān)電路的連接。</p><p>  由于在單片機(jī)課程中,沒(méi)有自己進(jìn)行程序的下

94、載,相關(guān)軟件的使用并不是非常熟練,雖然有了相關(guān)軟件,可是仍然不能正常下載程序,后來(lái)在同學(xué)的幫助下,下載了相關(guān)驅(qū)動(dòng),才順利將程序下載到芯片中。</p><p>  此次課程設(shè)計(jì),獲益匪淺,不僅將理論知識(shí)和實(shí)際聯(lián)系起來(lái),加深了自己對(duì)Si光電池和光照度的理解,通過(guò)數(shù)碼管顯示的電壓值和照度計(jì)照度值的比較,直觀的了解了光照度這一概念,同時(shí)也更加熟練的掌握了proteus和keil等軟件,并且提高了自己解決問(wèn)題的能力。<

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論