欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      單片機(jī)開機(jī)次數(shù)記憶器的設(shè)計(jì)及實(shí)現(xiàn)

      2020-12-23 06:20:02下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了這篇《單片機(jī)開機(jī)次數(shù)記憶器的設(shè)計(jì)及實(shí)現(xiàn)》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《單片機(jī)開機(jī)次數(shù)記憶器的設(shè)計(jì)及實(shí)現(xiàn)》。

      信息與電氣工程學(xué)院

      單片機(jī)應(yīng)用系統(tǒng)(三級項(xiàng)目)

      設(shè)計(jì)說明書

      (2014/2015學(xué)年第二學(xué)期)

      開機(jī)次數(shù)記憶器設(shè)計(jì)及實(shí)現(xiàn)

      專業(yè)班級

      電子信息工程班

      學(xué)生學(xué)號

      學(xué)生姓名

      指導(dǎo)教師

      設(shè)計(jì)周數(shù)

      2周設(shè)計(jì)成績

      2015年X月X日

      1、項(xiàng)目設(shè)計(jì)

      1.1

      設(shè)計(jì)要求

      (1)以單片機(jī)AT89C52為核心,使用24C02串行EEPROM進(jìn)行存儲開機(jī)次數(shù);

      (2)用LCD1602顯示存儲的開機(jī)次數(shù);

      (3)單片機(jī)復(fù)位一次,從24C02中讀取數(shù)據(jù),然后加1;

      (4)在此基礎(chǔ)上可以拓展對一組密碼數(shù)據(jù)存儲對比后,才能進(jìn)入正常界面。

      1.2

      設(shè)計(jì)目的(1)培養(yǎng)學(xué)生正確的設(shè)計(jì)思想,理論聯(lián)系實(shí)際的工作作風(fēng),嚴(yán)肅認(rèn)真、實(shí)事求是的科學(xué)態(tài)度和勇于探索的創(chuàng)新精神。

      (2)鍛煉學(xué)生自學(xué)軟件的能力及分析問題、解決問題的能力。

      (3)通過課程設(shè)計(jì),使學(xué)生在理論計(jì)算、結(jié)構(gòu)設(shè)計(jì)、工程繪圖、查閱設(shè)計(jì)資料、標(biāo)準(zhǔn)與規(guī)范的運(yùn)用和計(jì)算機(jī)應(yīng)用方面的能力得到訓(xùn)練和提高。

      (4)鞏固、深化和擴(kuò)展學(xué)生的單片機(jī)理論知識。

      (5)培養(yǎng)學(xué)生的團(tuán)隊(duì)合作能力。

      2、項(xiàng)目設(shè)計(jì)正文

      2.1方案設(shè)計(jì)

      2.1.1設(shè)計(jì)思路

      此次項(xiàng)目設(shè)計(jì)的目的是實(shí)現(xiàn)單片機(jī)開機(jī)次數(shù)的記憶及顯示功能,即其復(fù)位斷電關(guān)機(jī)都能準(zhǔn)確的將開機(jī)次數(shù)顯示在LCD1602顯示屏上。根據(jù)對項(xiàng)目設(shè)計(jì)要求和實(shí)際應(yīng)用的分析,選用以單片機(jī)AT89C52為核心,使用24C02串行EEPROM進(jìn)行存儲開機(jī)次數(shù)的方法,使C52單片機(jī)的P2.0口和P2.1口分別控制24C02的數(shù)據(jù)線SDA和時鐘信號線SCK來完成數(shù)據(jù)的讀寫功能,然后用LCD1602顯示屏將24C02中存儲的數(shù)據(jù)顯示出來。

      具體設(shè)計(jì)實(shí)現(xiàn)的邏輯流程圖如圖1所示:

      圖1

      邏輯實(shí)現(xiàn)流程圖

      2.1.2主要元器件

      (1)

      處理器AT89C52,引腳圖如圖2所示:

      圖2

      AT89C52單片機(jī)引腳圖

      AT89C52是一個低電壓,高性能CMOS

      8位單片機(jī),片內(nèi)含8k

      bytes的可反復(fù)擦寫的Flash只讀程序存儲器和256

      bytes的隨機(jī)存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲單元,AT89C52單片機(jī)在電子行業(yè)中有著廣泛的應(yīng)用。

      AT89C52有40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內(nèi)含2個外中斷口,3個16位可編程定時計(jì)數(shù)器,2個全雙工串行通信口,2

      個讀寫口線,AT89C52可以按照常規(guī)方法進(jìn)行編程,也可以在線編程。其將通用的微處理器和Flash存儲器結(jié)合在一起,特別是可反復(fù)擦寫的Flash存儲器可有效地降低開發(fā)成本。

      (2)

      外部存儲器24C02

      串行E2PROM是基于I2C-BUS的存儲器件,遵循二線制協(xié)議,由于其具有接口方便,體積小,數(shù)據(jù)掉電不丟失等特點(diǎn),在儀器儀表及工業(yè)自動化控制中得到大量的應(yīng)用。具有以下幾大特點(diǎn):

      1.寬范圍的工作電壓1.8v~5.5v

      2.低電壓技術(shù):

      1mA典型工作電流

      1uA典型待機(jī)電流

      3.儲存器組織結(jié)構(gòu)

      4.2線串行接口,完全兼容I2C總線

      5.施密特觸發(fā)輸入噪聲抑制

      6.硬件數(shù)據(jù)寫保護(hù)

      7.內(nèi)部與周期(最大5ms)

      8.自動遞增地址

      9.可按照字節(jié)寫

      10.esd保護(hù)大于2.5kV

      11.高可靠性:擦寫壽命:100萬次

      數(shù)據(jù)保持時間:100年

      12.無鉛工藝,符合RoHS標(biāo)準(zhǔn)

      2.2單元電路設(shè)計(jì)

      2.2.1處理器AT89C52引腳的選擇

      本次項(xiàng)目設(shè)計(jì)選擇的引腳分別為P0口、P2口、RES端口。

      P0

      口是一組8

      位漏極開路型雙向I/O

      口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時,每位能吸收電流的方式驅(qū)動8

      個TTL邏輯門電路,對端口P0

      寫“1”時,可作為高阻抗輸入端用。在訪問外部數(shù)據(jù)存儲器或程序存儲器時,這組口線分時轉(zhuǎn)換地址(低8

      位)和數(shù)據(jù)總線復(fù)用,在訪問期間激活內(nèi)部上拉電阻。在Flash編程時,P0

      口接收指令字節(jié),而在程序校驗(yàn)時,輸出指令字節(jié),校驗(yàn)時,要求外接上拉電阻。

      P2口

      是一個帶有內(nèi)部上拉電阻的8

      位雙向I/O

      口,P2的輸出緩沖級可驅(qū)動(吸收或輸出電流)4

      個TTL

      邏輯門電路。對端口P2

      寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口,作輸入口使用時,因?yàn)閮?nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL)。訪問外部程序存儲器或16

      位地數(shù)據(jù)存儲器(例如執(zhí)行MOVX

      @DPTR

      指令)時,P2

      口送出高8

      位地址數(shù)據(jù)。在訪問8

      位地址的外部數(shù)據(jù)存儲器(如執(zhí)行MOVX@RI

      指令)時,P2

      口輸出P2鎖存器的內(nèi)容。Flash編程或校驗(yàn)時,P2亦接收高位地址和一些控制信號。P2.0口和P2.1口分別控制24C02的數(shù)據(jù)線SDA和時鐘信號線SCK來完成數(shù)據(jù)的讀寫功能。

      RST為復(fù)位輸入。當(dāng)振蕩器工作時,RST引腳出現(xiàn)兩個機(jī)器周期以上高電平將使單片機(jī)復(fù)位。

      單片機(jī)引腳圖連接選擇如圖3所示:

      圖3

      單片機(jī)的引腳連接圖

      2.2.2

      RC復(fù)位電路

      復(fù)位電路圖如圖4所示:

      圖4

      復(fù)位電路圖

      系統(tǒng)復(fù)位的工作過程是在加電時,復(fù)位電路通過電容加給RST端一個短暫的高電平信號,此高電平信號隨著VCC對電容的充電過程而逐漸回落,即RST端的高電平持續(xù)時間取決于電容的充電時間。為了保證系統(tǒng)能夠可靠地復(fù)位,RST端的高電平信號必須維持足夠長的時間。在圖4的復(fù)位電路中,當(dāng)VCC掉電時,必然會使RST端電壓迅速下降到0V以下,但是,由于內(nèi)部電路的限制作用,這個負(fù)電壓將不會對器件產(chǎn)生損害。另外,在復(fù)位期間,端口引腳處于隨機(jī)狀態(tài),復(fù)位后,系統(tǒng)將端口置為全“1”態(tài)。如果系統(tǒng)在上電時得不到有效的復(fù)位,則程序計(jì)數(shù)器PC將得不到一個合適的初值,CPU可能會從一個未被定義的位置開始執(zhí)行程序。

      2.2.3

      LCD1602顯示屏的連接

      LCD1602各引腳的功能如下:

      第1腳:VSS為電源地

      第2腳:VDD接5V電源正極

      第4腳:RS為寄存器選擇,高電平1時選擇數(shù)據(jù)寄存器、低電平0時選擇指令寄存器。

      第5腳:RW為讀寫信號線,高電平(1)時進(jìn)行讀操作,低電平(0)時進(jìn)行寫操作。

      第6腳:E(或EN)端為使能(enable)端。

      第7~14腳:D0~D7為8位雙向數(shù)據(jù)端。

      單片機(jī)的P2.5,P2.6,P2.7分別接LCD1602的RS、RW、E端口,如圖5所示:

      圖5

      LCD1602顯示屏的連接

      2.2.4

      24C02的連接

      C52單片機(jī)的P2.0口和P2.1口分別控制24C02的數(shù)據(jù)線SDA和時鐘信號線SCK來完成數(shù)據(jù)的讀寫功能,具體電路圖如圖6所示:

      圖6

      24C02的連接

      2.2.5

      整體電路

      系統(tǒng)整體仿真電路和實(shí)物操作電路如圖7和圖8所示:

      圖7

      整體仿真電路圖

      圖8

      仿真實(shí)物圖

      2.3系統(tǒng)實(shí)現(xiàn)程序

      #include

      #include

      sbit

      SDA

      =

      P2^0;

      //AT24C01串行數(shù)據(jù)

      5腳

      sbit

      SCL

      =

      P2^1;

      //AT24C01串行時鐘

      6腳

      int

      time=0;

      int

      time2=0;

      typedef

      unsigned

      char

      uint8;

      /*

      defined

      for

      unsigned

      8-bits

      integer

      variable

      無符號8位整型變量

      */

      typedef

      signed

      char

      int8;

      /*

      defined

      for

      signed

      8-bits

      integer

      variable

      有符號8位整型變量

      */

      typedef

      unsigned

      char

      BYTE;

      typedef

      unsigned

      int

      WORD;

      typedef

      bit

      BOOL

      ;

      sbit

      rs

      =

      P2^6;

      sbit

      rw

      =

      P2^5;

      sbit

      ep

      =

      P2^7;

      BYTE

      code

      dis1[]

      =

      {“TIME“};

      BYTE

      dis2[10]={“0123456789“};

      BYTE

      dis3[10]={“0123456789“};

      delay(BYTE

      ms)

      {

      //

      延時子程序

      BYTE

      i;

      while(ms--)

      {

      for(i

      =

      0;

      i<

      250;

      i++)

      {

      _nop_();

      _nop_();

      _nop_();

      _nop_();

      }

      }

      }

      BOOL

      lcd_bz()

      {

      //

      測試LCD忙碌狀態(tài)

      BOOL

      result;

      rs

      =

      0;

      rw

      =

      1;

      ep

      =

      1;

      _nop_();

      _nop_();

      _nop_();

      _nop_();

      result

      =

      (BOOL)(P0

      &

      0x80);

      ep

      =

      0;

      return

      result;

      }

      lcd_wcmd(BYTE

      cmd)

      {

      //

      寫入指令數(shù)據(jù)到LCD

      while(lcd_bz());

      rs

      =

      0;

      rw

      =

      0;

      ep

      =

      0;

      _nop_();

      _nop_();

      P0

      =

      cmd;

      _nop_();

      _nop_();

      _nop_();

      _nop_();

      ep

      =

      1;

      _nop_();

      _nop_();

      _nop_();

      _nop_();

      ep

      =

      0;

      }

      lcd_pos(BYTE

      pos)

      {

      //設(shè)定顯示位置

      lcd_wcmd(pos

      |

      0x80);

      }

      lcd_wdat(BYTE

      dat)

      {

      //寫入字符顯示數(shù)據(jù)到LCD

      while(lcd_bz());

      rs

      =

      1;

      rw

      =

      0;

      ep

      =

      0;

      P0

      =

      dat;

      _nop_();

      _nop_();

      _nop_();

      _nop_();

      ep

      =

      1;

      _nop_();

      _nop_();

      _nop_();

      _nop_();

      ep

      =

      0;

      }

      lcd_init()

      {

      //LCD初始化設(shè)定

      lcd_wcmd(0x38);

      delay(1);

      lcd_wcmd(0x0c);

      delay(1);

      lcd_wcmd(0x06);

      delay(1);

      lcd_wcmd(0x01);

      //清除LCD的顯示內(nèi)容

      delay(1);

      }

      ////2402程序2

      void

      AT2401_Delay()

      {;;}

      void

      busy()

      {

      BYTE

      temp;

      temp=0x00;

      rs=0;

      rw=1;

      ep=1;

      while((temp&0x80)==0x80)

      {

      ep=0;

      _nop_();

      ep=1;

      _nop_();

      }

      }

      void

      AT2401_Start()//啟動信號

      {

      SDA=1;

      AT2401_Delay();

      SCL=1;

      AT2401_Delay();

      SDA=0;

      AT2401_Delay();

      }

      void

      AT2401_Stop()//停止信號

      {

      SDA=0;

      AT2401_Delay();

      SCL=1;

      AT2401_Delay();

      SDA=1;

      AT2401_Delay();

      }

      void

      AT2401_Respons()//響應(yīng)

      {

      uint8

      i;

      SCL=1;

      AT2401_Delay();

      while((SDA==1)&&(i<250))

      i++;

      SCL=0;

      AT2401_Delay();

      }

      void

      AT2401_Init()//初始化函數(shù)

      {

      SDA=1;

      AT2401_Delay();

      SCL=1;

      AT2401_Delay();

      }

      void

      AT2401_WByte(uint8

      date)//寫一個字節(jié)

      {

      uint8

      i,temp;

      temp=date;

      for(i=0;i<8;i++)

      {

      temp=temp<<1;

      SCL=0;

      AT2401_Delay();

      SDA=CY;

      AT2401_Delay();

      SCL=1;

      AT2401_Delay();

      }

      SCL=0;

      AT2401_Delay();

      SDA=1;

      AT2401_Delay();

      }

      uint8

      AT2401_RByte()//讀一個字節(jié)

      {

      uint8

      i,k;

      SCL=0;

      AT2401_Delay();

      SDA=1;

      AT2401_Delay();

      for(i=0;i<8;i++)

      {

      SCL=1;

      AT2401_Delay();

      k=(k<<1)|SDA;

      SCL=0;

      AT2401_Delay();

      }

      return

      k;

      }

      void

      AT2401_WAddr(uint8

      address,uint8

      date)//指定地址寫一個數(shù)據(jù)

      {

      AT2401_Start();

      AT2401_WByte(0xa0);

      AT2401_Respons();

      AT2401_WByte(address);

      AT2401_Respons();

      AT2401_WByte(date);

      AT2401_Respons();

      AT2401_Stop();

      }

      uint8

      AT2401_RAddr(uint8

      address)//指定地址讀取一個字節(jié)

      {

      uint8

      date;

      AT2401_Start();

      AT2401_WByte(0xa0);

      AT2401_Respons();

      AT2401_WByte(address);

      AT2401_Respons();

      AT2401_Start();

      AT2401_WByte(0xa1);

      AT2401_Respons();

      date=AT2401_RByte();

      AT2401_Stop();

      return

      date;

      }

      void

      wr_com(BYTE

      com)

      {

      ep=0;

      rs=0;

      rw=0;

      P0=com;

      _nop_();

      ep=1;

      _nop_();

      ep=0;

      }

      void

      wr_data(BYTE

      date)

      {

      busy();

      ep=0;

      rs=1;

      rw=0;

      P0=date;

      _nop_();

      ep=1;

      _nop_();

      ep=0;

      }

      ///////////////////////////////////////

      ///////////////////////////////////////

      main()

      {

      BYTE

      i;

      lcd_init();

      //

      初始化LCD

      AT2401_Init();

      time

      =

      AT2401_RAddr(0x01);

      time2

      =

      AT2401_RAddr(0x02);

      if(time>=9)

      {

      AT2401_WAddr(0x01,0);

      time2+=1;

      }

      time+=1;

      if(time2>9&&time>=9)

      {

      time=0;

      time2=0

      ;

      }

      AT2401_WAddr(0x01,time);

      AT2401_WAddr(0x02,time2);

      lcd_pos(4);

      //

      設(shè)置顯示位置為第一行的第5個字符

      i

      =

      0;

      while(dis1[i]

      !=

      '\0')

      {

      //

      顯示字符“TIME“

      lcd_wdat(dis1[i]);

      i++;

      }

      lcd_pos(0x49);

      //

      設(shè)置顯示位置為第二行第一位字符

      dis2[time];

      lcd_wdat(dis2[time]);

      //

      顯示字符

      delay(1);

      lcd_pos(0x48);

      //

      設(shè)置顯示位置為第二行第二位字符

      dis2[time2];

      lcd_wdat(dis3[time2]);

      //

      顯示字符

      while(1);

      }

      3、項(xiàng)目設(shè)計(jì)總結(jié)

      通過此次課程設(shè)計(jì),使我更加扎實(shí)的掌握了有關(guān)單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)方面的知識,在設(shè)計(jì)過程中雖然遇到了一些問題,但經(jīng)過一次又一次的思考,一遍又一遍的檢查終于找出了原因所在,也暴露出了前期我在這方面的知識欠缺和經(jīng)驗(yàn)不足。實(shí)踐出真知,通過親自動手制作,使我們掌握的知識不再是紙上談兵。

      課程設(shè)計(jì)誠然是一門專業(yè)課,給我很多專業(yè)知識以及專業(yè)技能上的提升,同時又是一門講道課,一門辯思課,給了我許多道,給了我很多思,給了我莫大的空間。同時,設(shè)計(jì)讓我感觸很深。使我對抽象的理論有了具體的認(rèn)識。通過這次課程設(shè)計(jì),我掌握了AT89C52、24C02和LCD1602的基本知識和連接測試,也通過查資料熟悉了外部存儲24C02的工作原理。了解了C語言程序在單片機(jī)系統(tǒng)設(shè)計(jì)中的應(yīng)用,掌握了系統(tǒng)電路的調(diào)試方法。

      在此次的課程設(shè)計(jì)過程中,也對團(tuán)隊(duì)精神的進(jìn)行了考察,我們小組三個人分工合作,查資料、電路設(shè)計(jì)、程序設(shè)計(jì)、硬件實(shí)物仿真都做得有條不紊,我們配合越來越默契,有問題一起解決,在成功后一起體會喜悅。果然是團(tuán)結(jié)就是力量,只有互相之間默契融洽的配合才能換來最終完美的結(jié)果。我認(rèn)為,此次課設(shè)不僅培養(yǎng)了我們獨(dú)立思考、團(tuán)隊(duì)協(xié)作、動手操作的能力,在各種其它能力上也都有了提高。更重要的是,我們學(xué)會了很多自主學(xué)習(xí)的方法。而這是日后最實(shí)用的,真的是受益匪淺。要面對社會的挑戰(zhàn),只有不斷的學(xué)習(xí)、實(shí)踐,再學(xué)習(xí)、再實(shí)踐。這對于我們的將來也有很大的幫助。

      4、參考文獻(xiàn)

      [1]

      張毅剛,彭喜元,董繼成.單片機(jī)原理及應(yīng)用.北京:高等教育出版社,2003.[2]

      史良.LCD12864顯示模塊與微處理器的接口設(shè)計(jì)

      [J].礦業(yè)安全與環(huán)保,1999.項(xiàng)目設(shè)計(jì)

      項(xiàng)目設(shè)計(jì)

      成績

      指導(dǎo)教師

      (簽字)

      ****年**月**日

      下載單片機(jī)開機(jī)次數(shù)記憶器的設(shè)計(jì)及實(shí)現(xiàn)word格式文檔
      下載單片機(jī)開機(jī)次數(shù)記憶器的設(shè)計(jì)及實(shí)現(xiàn).doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦