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

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

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

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

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

      單片機課程設(shè)計 (51單片機實現(xiàn)電子時鐘)(精選五篇)

      時間:2019-05-14 03:28:18下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《單片機課程設(shè)計 (51單片機實現(xiàn)電子時鐘)》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《單片機課程設(shè)計 (51單片機實現(xiàn)電子時鐘)》。

      第一篇:單片機課程設(shè)計 (51單片機實現(xiàn)電子時鐘)

      湖北文理學院

      單片機課程設(shè)計

      題目:用51單片機實現(xiàn)電子時鐘

      院 部 物理與電子信息工程學院 專 業(yè) 名 稱 電子信息科學與技術(shù) 班 級 1111 姓 名 楊慶月 學 號 2011111136 指 導 教 師 李剛

      2013年12月09日

      目錄

      摘要------------------------------1 1 單片機的相關(guān)知識------------1 1.1 單片機的簡介--------------------1 1.2 單片機的特點--------------------1 1.3 89C52單片機的基本特點------------2 2 電子時鐘--------------------3 2.1電子時鐘的基本特點----------------3 2.2電子時鐘的原理-------------------4 控制系統(tǒng)的硬件設(shè)計---------4 3.1單片機型號的選擇-----------------4 3.2 lcd1602工作的原理---------------4 3.3 鍵盤電路的設(shè)計------------------6 3.4 復位電路設(shè)計-------------------------6

      3.5 時鐘電路設(shè)計-------------------7 3.6 整體電路原理圖-----------------7 控制系統(tǒng)的軟件的設(shè)計------8 4.1程序的設(shè)計----------------------8 4.2程序源代碼----------------------8 5 仿真結(jié)果和實物圖---------------19 5.1仿真結(jié)果------------------------------19 5.2實物圖-19 6 總結(jié)--20

      參考文獻------------------------21

      摘要:單片計算機即單片微型計算機。由 RAM ,ROM,CPU構(gòu)成,定時,計數(shù)和多種接口于一體的微控制器。它體積小,成本低,功能強,廣泛應(yīng)用于智能產(chǎn)業(yè)和工業(yè)自動化上。而 51系列單片機是各單片機中最為典型和最有代表性的一種。這次課程設(shè)計通過對它的學習,應(yīng)用,從而達到學習、設(shè)計、開發(fā)軟、硬的能力。

      本設(shè)計主要設(shè)計了一個基于 AT89C52單片機的電子時鐘。并在 1602上顯示相應(yīng)的時間。并通過一個控制鍵用來實現(xiàn)時間的調(diào)節(jié)和是否進入省電模式的轉(zhuǎn)換。

      具有時鐘和日歷的功能,年限顯示范圍是2013-2099(可修改),且具有閏年自動修正功能

      關(guān)鍵字:單片機;子時鐘;鍵盤控制;LCD1602。單片機識的相關(guān)知識 1.1 單片機簡介

      MCS-51是 INTEL公司在成功推廣的 MCS-48單片機基礎(chǔ)上加以改進而成的 8位單片機。

      這種單片機大約是上世紀 70年代末推出的,內(nèi)部程序可重寫的為 8751,外擴程序的是 8031,一次性生產(chǎn),不可改變程序的是 8051。外形一般為 DIP40封裝。不久又推出了增強型的 8052,其資源更加豐富。以后又采用 CHMOS技術(shù)推出了 80c51,耗電大大降低。到了 90年代,INTEL公司把精力放到更賺錢的計算機上,將 51單片機技術(shù)轉(zhuǎn)讓給了一此其它公司,如 ATMEL Philips等半導體制造公司,使 51系列單片機的市場份額不斷擴大。

      盡管十多年前就有人認為 51單片機會很快淘汰,但事實證明 51單片機經(jīng)過不斷的改進后,由于技術(shù)成熟,使用方便,至今在 8位單片機市場仍然擁有龐大的用戶。特別是 MCS-51技術(shù)的 20年專利期限到期后,大量的兼容型號不斷推出。從上世紀 90年代后期開始,美國 ATMEL公司在掌握快速擦寫的存儲器后,推出了 AT89C系列,此系列在中國獲得了廣泛的應(yīng)用。

      在此之前,由于可擦寫的 8751價格昂貴,國內(nèi)長時間采用 8031+27C64這樣的外擴存程序儲器方式。

      51單片機最初只有 DIP40這種很古老的封裝,后來推出了 CHMOS工藝的80C51后開始有了 PLCC44這種相對較小的方形封裝。AT89C系列中開始有 20腳的 DIP20的精簡型封裝,這極大方便了在一些相對簡單的單片機應(yīng)用,縮小了 PCB的體積。20腳的有 AT89C1051、AT89C1051、AT89C1051,對應(yīng)程序存儲器分別為 1K、2K、4K。

      標準的 51為 4K程序空間,128字節(jié)的 RAM,32條端口,5個中斷,2個定時/計數(shù)器,12個時鐘周期執(zhí)行一條基本指令,最長的除法為 48個周期。52為 8K程序空間,256字節(jié)的 RAM,32條端口,6個中斷,3個定時/計數(shù)器。AT89S51是可在板上直接下載程序的改進型號,并增加了看門狗功能,AT89C51只能在編程器下寫入程序,所以經(jīng)常會有人在 PCB上安裝 IC插座,以便取下來編程更新程序。

      AT的 51系列后來也推出了單周期的 51,但價格沒什么優(yōu)勢,國內(nèi)很少使用。最近幾年宏晶在國內(nèi)大量推廣 STC51系列單片機,最近又推出不少所謂 1T的單

      片機,價格較低

      STC采用串口直接下載程序,寫入程序很方便。

      1.2 單片機的特點.單片機的存儲器ROM 和RAM 時嚴格區(qū)分的。ROM 稱為程序存儲器,只存放 程序,固定常數(shù),及數(shù)據(jù)表格。RAM 則為數(shù)據(jù)存儲器,用作工作區(qū)及存放用戶數(shù) 據(jù)。2.采用面向控制的指令系統(tǒng)。為滿足控制需要,單片機有更強的邏輯控制能力,特別是單片機具有很強的位處理能力。.單片機的I/O 口通常時多功能的。由于單片機芯片上引腳數(shù)目有限,為了 解決實際引腳數(shù)和需要的信號線的矛盾,采用了引腳功能復用的方法,引腳處于 何種功能,可由指令來設(shè)置或由機器狀態(tài)來區(qū)分。.單片機的外部擴展能力很強。在內(nèi)部的各種功能部件不能滿足應(yīng)用的需求 時,均可在外部進行擴展,與許多通用的微機接口芯片兼容,給應(yīng)用系統(tǒng)設(shè)計帶 來了很大的方便。

      1.3 89C52單片機介紹

      P0 口:P0 口為一個8 位漏級開路雙向I/O 口,每腳可吸收8TTL 門電流。當 P1 口的管腳第一次寫1 時,被定義為高阻輸入。P0 能夠用于外部程序數(shù)據(jù)存儲 器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH 編程時,P0 口作為原碼輸入 口,當FIASH 進行校驗時,P0 輸出原碼,此時P0 外部必須被拉高。

      P1 口:P1 口是一個內(nèi)部提供上拉電阻的8 位雙向I/O 口,P1 口緩沖器能接 收輸出4TTL 門電流。P1 口管腳寫入1 后,被內(nèi)部上拉為高,可用作輸入,P1 口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH 編程和校驗時,P1 口作為第八位地址接收。

      P2 口:P2 口為一個內(nèi)部上拉電阻的8 位雙向I/O 口,P2 口緩沖器可接收,輸出4 個TTL 門電流,當P2 口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且 作為輸入。并因此作為輸入時,P2 口的管腳被外部拉低,將輸出電流。這是由 于內(nèi)部上拉的緣故。P2 口當用于外部程序存儲器或16 位地址外部數(shù)據(jù)存儲器 進行存取時,P2 口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu) 勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2 口輸出其特殊功能寄存器的 內(nèi)容。P2 口在FLASH 編程和校驗時接收高八位地址信號和控制信號。

      P3 口:P3 口管腳是8 個帶內(nèi)部上拉電阻的雙向I/O 口,可接收輸出4 個TTL 門電流。當P3 口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸 入,由于外部下拉為低電平,P3 口將輸出電流(ILL)這是由于上拉的緣故。P3 口也可作為AT89C52 的一些特殊功能口,如下表所示: 口管腳備選功能

      P3.0 RXD(串行輸入口)P3.1 TXD(串行輸出口)P3.2 /INT0(外部中斷0)P3.3 /INT1(外部中斷1)P3.4 T0(記時器0 外部輸入)P3.5 T1(記時器1 外 部輸入)P3.6 /WR(外部數(shù)據(jù)存儲器寫選通)P3.7 /RD(外部數(shù)據(jù)存儲器讀選通)P3 口同時為閃爍編程和編程校驗接收一些控制信號。

      RST:復位輸入。當振蕩器復位器件時,要保持RST 腳兩個機器周期的高電平時 間。

      ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的 地位字節(jié)。在FLASH 編程期間,此引腳用于輸入編程脈沖。在平時,ALE 端以不

      變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外

      部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ALE 脈沖。如想禁止ALE 的輸出可在SFR8EH 地址上置0。此時,ALE 只有在執(zhí)行MOVX,MOVC 指令是ALE 才起作用。另外,該引腳被略微拉高。

      如果微處理器在外部執(zhí)行狀態(tài)ALE 禁止,置位無效。PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機 器周期兩次/PSEN 有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN 信號

      將不出現(xiàn)。

      EA/VPP:當/EA 保持低電平時,則在此期間外部程序存儲(0000H-FFFFH),不

      管是否有內(nèi)部程序存儲器。注意加密方式1 時,/EA 將內(nèi)部鎖定為RESET;當/EA 端保持高電平時,此間內(nèi)部程序存儲器。在FLASH 編程期間,此引腳也用于施加 12V 編程電源(VPP)。電子時鐘

      2.1 電子時鐘的基本特點

      現(xiàn)在高精度的計時工具大多數(shù)都使用了石英晶體振蕩器,由于電子鐘、石英 鐘、石英表都采用了石英技術(shù),因此走時精度高,穩(wěn)定性好,使用方便,不需要 經(jīng)常調(diào)試,數(shù)字式電子鐘用集成電路計時時,譯碼代替機械式傳動,用用液晶顯 示器代替指針顯示進而顯示時間,減小了計時誤差,這種表具有時、分、秒顯示 時間的功能,還可以進行時和分的校對,片選的靈活性好。

      2.2 電子時鐘的原理

      該電子時鐘由89C52,1602 液晶等構(gòu)成,采用晶振電路作為驅(qū)動電路,由延時程序和循環(huán)程序達到時分秒的計時,六十秒為一分鐘,六十分鐘為一小時,滿二十四小時為一天。而電路中有四個控制按鍵,一個是選擇,一個進行加數(shù),一個進行減數(shù),還有一個保存。例如按下選擇鍵,然后1602顯示光標,此時可以用加或減來進行調(diào)節(jié),在按下選擇鍵,光標移到不同的單位上,同理進行調(diào)節(jié),最后待日期時間調(diào)節(jié)好后,按下保存鍵,時鐘開始計時??刂葡到y(tǒng)的硬件設(shè)計 3.1 單片機型號的選擇

      通過對51單片機的學習,認為STC89C52 是最理想的電子時鐘開發(fā)芯片。STC89C52,最終認為89C52是一種帶8K 字節(jié)閃爍可編程可擦除只讀存儲器的低電壓,高性能CMOS8位微處理器,器件采用高密度非易失存儲器制造技術(shù)制造,與工業(yè)標準的MCS-52指令集和輸出引腳相兼容。還有一點重要原因,就是采用AT89C52時不能用開發(fā)板進行程序的下載,所以最終選用STC89C52進行設(shè)計。

      3.2 1602 工作原理及顯示電路

      字符型LCD 通常有14 條引腳線或16 條引腳線的LCD,多出來的2 條線是背 光電源線VCC(15 腳)和地線GND(16 腳),其控制原理與14 腳的LCD 完全一樣 1602液晶的基本的操作分為以下四種:

      狀態(tài)字讀操作:輸入RS=低、RW=高、EP=高; 輸出:DB0~7 讀出為狀態(tài)字; 數(shù)據(jù)讀出操作:輸入RS=高、RW=高、EP=高; 輸出:DB0~7 讀出為數(shù)據(jù); 指令寫入操作:輸入RS=低、RW=低、EP=上升沿; 輸出:無; 數(shù)據(jù)寫入操作:輸入RS=高、RW=低、EP=上升沿; 輸出:無。

      如圖 1602模塊的引腳

      LCD1602正面

      LCD1602背面

      1602與單片機連接圖 3.3 鍵盤電路設(shè)計

      本時鐘采用四個按鍵控制,一個(實物圖藍色線24號引腳)是選擇,一個進行加數(shù)(實物圖紫色線25號引腳),一個進行減數(shù)(實物圖灰色線26號引腳),還有一個保存(實物圖白色線27號引腳)。例如按下選擇鍵,然后1602顯示光標,此時可以用加或減來進行調(diào)節(jié),在按下選擇鍵,光標移到不同的單位上,同理進行調(diào)節(jié),最后待日期時間調(diào)節(jié)好后,按下保存鍵,時鐘開始計時。

      3.4 復位電路設(shè)計

      單片機復位有上電復位和手動復位兩種方式,上電復位是接通電源后利用RC充電來實現(xiàn)復位。手動復位是通過人為干預,強制系統(tǒng)復位。

      連接至9號復位引腳

      復位電路如圖所示,可以實現(xiàn)上電復位和手動復位功能。

      3.5 時鐘電路設(shè)計

      系統(tǒng)時鐘源由內(nèi)部時鐘方式產(chǎn)生,時鐘電路由12MH晶振和兩個30PF瓷片電容組成,構(gòu)成自激振蕩,形成振蕩源提供給單片機。電容可在5PF到30PF之間選擇,電容的大小對振蕩頻率有微小影響,可起頻率微調(diào)作用。

      3.6整體電路原理圖 控制系統(tǒng)的軟件設(shè)計 4.1 程序設(shè)計

      由于C 語言程序設(shè)計較匯編可讀性強,可移植性,且可以大大降低編程的難 度和縮短開發(fā)周期,本系統(tǒng)程序采用c 語言設(shè)計。

      4.2 程序源代碼

      #include

      //包含單片機寄存器的頭文件 #include //包含_nop_()函數(shù)定義的頭文件

      #define uchar unsigned char #define uint unsigned int

      sbit RS=P2^0;

      //寄存器選擇位,將RS位定義為P2.0引腳 sbit RW=P2^1;

      //讀寫選擇位,將RW位定義為P2.1引腳 sbit E=P2^2;

      //使能信號位,將E位定義為P2.2引腳 sbit BF=P0^7;

      //忙碌標志位,將BF位定義為P0.7引腳

      uchar code table[]=“2013-12-07 WEEK6”;

      //初始化液晶顯示 16 uchar code table1[]=“TIME: 19-27-50”;

      //14

      uchar count,s1num;char second,minute,hour,day,month,year,week;

      sbit s1=P2^3;

      //功能鍵

      sbit s2=P2^4;

      //加鍵 sbit s3=P2^5;

      //減鍵

      sbit s4=P2^6;

      //保存并退出

      /*

      延時若干毫秒

      */ void delay(uchar n){ uchar i,a,b;for(i=0;i

      for(b=199;b>0;b--)

      for(a=1;a>0;a--);}

      /*********************************************** 函數(shù)功能:判斷液晶模塊的忙碌狀態(tài)

      返回值:result。result=1,忙碌;result=0,不忙

      ************************************************/ uchar BusyTest(void){ bit result;RS=0;//根據(jù)規(guī)定,RS為低電平,RW為高電平時,可以讀狀態(tài)

      RW=1;E=1;

      //E=1,才允許讀寫

      _nop_();

      //空操作

      _nop_();_nop_();_nop_();

      //空操作四個機器周期,給硬件反應(yīng)時間

      result=BF;//將忙碌標志電平賦給result E=0;

      //將E恢復低電平

      return result;}

      /******************************************** 函數(shù)功能:寫指令 入口參數(shù):dictate *********************************************/ void WriteInstruction(uchar dictate){ while(BusyTest()==1);

      //如果忙就等待

      RS=0;//根據(jù)規(guī)定,RS和R/W同時為低電平時,可以寫入指令

      RW=0;E=0;

      //E置低電平(根據(jù)表8-6,寫指令時,E為高脈沖,//就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置“0” _nop_();

      _nop_();

      //空操作兩個機器周期,給硬件反應(yīng)時間

      P0=dictate;

      //將數(shù)據(jù)送入P0口,即寫入指令或地址

      _nop_();_nop_();_nop_();_nop_();

      //空操作四個機器周期,給硬件反應(yīng)時間

      E=1;

      //E置高電平

      _nop_();_nop_();_nop_();_nop_();

      //空操作四個機器周期,給硬件反應(yīng)時間

      E=0;

      //當E由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令 }

      /********************************************* 函數(shù)功能:寫數(shù)據(jù)

      入口參數(shù):y(為字符常量)**********************************************/ void WriteData(uchar y){ while(BusyTest()==1);RS=1;

      //RS為高電平,RW為低電平時,可以寫入數(shù)據(jù)

      RW=0;E=0;

      //E置低電平(根據(jù)表8-6,寫指令時,E為高脈沖,//就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置“0” P0=y;//將數(shù)據(jù)送入P0口,即將數(shù)據(jù)寫入液晶模塊

      _nop_();_nop_();_nop_();_nop_();

      //空操作四個機器周期,給硬件反應(yīng)時間

      E=1;

      //E置高電平

      _nop_();_nop_();_nop_();_nop_();

      //空操作四個機器周期,給硬件反應(yīng)時間

      E=0;

      //當E由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令 }

      /****************************************** 函數(shù)功能:對LCD的顯示模式進行初始化設(shè)置 *******************************************/ void LcdInitiate(void){ uchar num;

      second=50;minute=27;hour=19;week=6;day=7;month=12;year=13;count=0;s1num=0;E=0;delay(15);//延時15ms,首次寫指令時應(yīng)給LCD一段較長的反應(yīng)時間 WriteInstruction(0x38);//顯示模式設(shè)置:16×2顯示,//5×7點陣,8位數(shù)據(jù)接口 delay(5);//延時5ms?,給硬件一點反應(yīng)時間 WriteInstruction(0x38);delay(5);WriteInstruction(0x38);//連續(xù)三次,確保初始化成功 delay(5);WriteInstruction(0x0c);//顯示模式設(shè)置:顯示開,無光標,//光標不閃爍 delay(5);WriteInstruction(0x06);//顯示模式設(shè)置:光標右移,字符不移 delay(5);WriteInstruction(0x01);//清屏幕指令,將以前的顯示內(nèi)容清除 delay(5);WriteInstruction(0x80);for(num=0;num<16;num++)//讓液晶顯示日期 { WriteData(table[num]);delay(5);} WriteInstruction(0x80+0x40);for(num=0;num<14;num++)//讓液晶顯示時間 { WriteData(table1[num]);delay(5);} TMOD=0x01;

      //定時器中斷初始化 TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;

      ET0=1;TR0=1;}

      //-------寫年月日---------------void write_nyr(uchar add,uchar date){ uchar i,j;i=date/10;j=date%10;WriteInstruction(0x80+add);WriteData(0x30+i);WriteData(0x30+j);}

      //--------寫時分秒---------------void write_sfm(uchar add,uchar date){ uchar i,j;i=date/10;j=date%10;WriteInstruction(0x80+0x40+add);WriteData(0x30+i);WriteData(0x30+j);}

      //-------------寫星期-------------void write_week(uchar add,uchar date){ WriteInstruction(0x80+add);WriteData(0x30+date);}

      //---------該年是否是閏年-------------bit leap_year(){ int leap;if((year%4==0&&year%100!=0)||year%400==0)

      leap=1;

      //是閏年

      else

      leap=0;

      //非閏年

      return leap;}

      //----------鍵盤掃描--------------------void keyscan(){ if(s1==0)

      //第一個鍵是否按下

      {

      delay(5);

      if(s1==0)

      {

      while(!s1);

      s1num++;

      if(s1num>7)

      s1num=1;

      if(s1num==1)

      //第一個鍵被按一次

      {

      TR0=0;

      WriteInstruction(0x80+0x40+13);

      WriteInstruction(0x0f);

      }

      if(s1num==2)

      {

      WriteInstruction(0x80+0x40+10);

      }

      if(s1num==3)

      {

      WriteInstruction(0x80+0x40+7);

      }

      if(s1num==4)

      {

      WriteInstruction(0x80+9);

      }

      if(s1num==5)

      {

      WriteInstruction(0x80+6);

      }

      if(s1num==6)

      {

      WriteInstruction(0x80+3);

      }

      if(s1num==7)

      {

      WriteInstruction(0x80+15);

      }

      } }

      if(s1num!=0)

      //如果功能鍵被按下 { if(s2==0)//第二個按下

      {

      delay(5);

      if(s2==0)

      {

      while(!s2);

      if(s1num==1)

      //第一個鍵被按一次,秒鐘加一

      {

      second++;

      if(second==60)

      second=0;

      write_sfm(12,second);

      WriteInstruction(0x80+0x40+13);

      }

      if(s1num==2)

      //第一個鍵被按二次,分鐘加一

      {

      minute++;

      if(minute==60)

      minute=0;

      write_sfm(9,minute);

      WriteInstruction(0x80+0x40+10);

      }

      if(s1num==3)

      //第一個鍵被按三次,時鐘加一

      {

      hour++;

      if(hour==24)

      hour=0;

      write_sfm(6,hour);

      WriteInstruction(0x80+0x40+7);

      }

      if(s1num==4)

      //日期加一

      {

      day++;

      if(day==32)

      day=1;

      write_nyr(8,day);

      WriteInstruction(0x80+9);

      }

      if(s1num==5)

      //月加一

      {

      month++;

      if(month==13)

      month=1;

      write_nyr(5,month);

      WriteInstruction(0x80+6);

      }

      if(s1num==6)

      //年加一

      {

      year++;

      if(year==99)

      year=0;

      write_nyr(2,year);

      WriteInstruction(0x80+3);

      }

      if(s1num==7)

      //星期加一

      {

      week++;

      if(week==8)

      week=1;

      write_week(15,week);

      WriteInstruction(0x80+15);

      } } } if(s3==0)

      //第三個鍵被按下 { delay(5);if(s3==0){

      while(!s3);

      if(s1num==1)

      //秒減一

      {

      second--;

      if(second==-1)

      second=59;

      write_sfm(12,second);

      WriteInstruction(0x80+0x40+13);

      }

      if(s1num==2)

      //分減一

      {

      minute--;

      if(minute==-1)

      minute=59;

      write_sfm(9,minute);

      WriteInstruction(0x80+0x40+10);

      }

      if(s1num==3)

      //時減一

      {

      hour--;

      if(hour==-1)

      hour=23;

      write_sfm(6,hour);

      WriteInstruction(0x80+0x40+7);} if(s1num==4)

      //日減一

      {

      day--;

      if(day==0)

      day=31;

      write_nyr(8,day);

      WriteInstruction(0x80+9);} if(s1num==5)

      //月減一

      {

      month--;

      if(month==0)

      month=12;

      write_nyr(5,month);

      WriteInstruction(0x80+6);} if(s1num==6)

      //年減一

      {

      year--;

      if(year==-1)

      year=99;

      write_nyr(2,year);

      WriteInstruction(0x80+3);} if(s1num==7)

      //日期減一

      {

      week--;

      if(week==0)

      week=7;

      write_week(15,week);

      WriteInstruction(0x80+15);

      } } } if(s4==0)

      //保存并退出 {

      s1num=0;

      WriteInstruction(0x0c);

      TR0=1;

      } } }

      /******************************************

      main function *******************************************/ void main(void){ uchar k=0;LcdInitiate();

      //調(diào)用LCD初始化函數(shù)

      while(1){

      keyscan();

      k=1;} }

      /***************************************** 函數(shù)功能:定時器T0的中斷服務(wù)函數(shù)

      ******************************************/ void timer0()interrupt 1 { count++;if(count==13){

      count=0;

      second++;

      if(second==60)

      //秒計滿60,秒歸0,分+1

      {

      second=0;

      minute++;

      if(minute==60)//分計滿60,分歸0,時+1

      {

      minute=0;

      hour++;

      if(hour==24)//時計滿24,時歸0,星期+1,日+1

      {

      hour=0;

      week++;

      day++;

      if(week==8)

      week=1;//星期計滿7,星期歸1

      if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)//大月三十一天

      {

      if(day==32)

      //大月天數(shù)計滿31,日歸1,月+1

      {

      day=1;

      month++;

      }

      }

      if(month==4||month==6||month==9||month==11)//小月三十天

      {

      if(day==31)

      { //小月天數(shù)計滿30,日歸1,月+1

      day=1;

      month++;

      }

      }

      if(month==2)

      {

      if(leap_year())

      {

      if(day==30)//閏年二月29天??計滿,日歸1,月+1

      {

      day=1;

      month++;

      }

      }

      else

      {

      if(day==29)//非閏年二月28天 計滿,日歸1,月+1

      {

      day=1;

      month++;

      }

      }

      }

      if(month==13)//月計滿12,月歸1,年+1

      {

      month=1;

      year++;

      }

      if(year==99)//年計滿99,年歸0

      {

      year=0;

      }

      write_nyr(2,year);

      }

      write_nyr(5,month);

      }

      write_nyr(8,day);

      write_week(15,week);

      }

      write_sfm(6,hour);

      } write_sfm(9,minute);} write_sfm(12,second);5 仿真結(jié)果和實物圖 5.1 仿真結(jié)果

      5.2 實物圖 總結(jié):

      說句實話,這個時鐘在硬件上沒有什么太多的技術(shù)含量,只有一個單片機的最小系統(tǒng)和一個顯示電路,其實它們可以結(jié)合在一起,但是為了以后的方便,我還是將它們設(shè)計了兩個部分,方便以后最小系統(tǒng)的其他方面的應(yīng)用。還有就是程序,這個時鐘程序如果讓我自己寫的話那我肯定不能再規(guī)定時間內(nèi)完成,所以還是靠外界力量的幫忙。也正是如此,我找到我學習單片機的弱點,那就是程序的編寫,記得室友百度開玩笑說:“程序是單片機的靈魂”,想想當時很搞笑,但仔

      細一想,那還真是個恰當?shù)谋扔鳎绻f單片機沒有程序的輸入,那么它不能完成任何事情。雖然本學期的單片機課程即將結(jié)束,但是我學習單片機的過程還沒有結(jié)束,以后還是要在程序的編寫上多多下工夫。

      此次的電子時鐘設(shè)計給我奠定了一個實踐基礎(chǔ),我會在以后的學習、生活中磨練自己,使自己適應(yīng)于以后的競爭。當遇到不會或是設(shè)計不出來的地方,我們就會在QQ 群里討論或者是同學之間相互幫助。團結(jié)就是力量,無論在現(xiàn)在的學習中還是在以后的工作中,團結(jié)都是至關(guān)重要的,有了團結(jié)會有更多的理念、更多的思維、更多的情感。

      參考文獻

      [1]郭天祥.新概念51單片機C語言教程—— 入門,提高,開發(fā),拓展 全攻略[M].北京:電子工業(yè)出版社,2009.

      第二篇:單片機課程設(shè)計電子時鐘說明書

      《電子時鐘》 課程設(shè)計說明書

      專業(yè)班級:

      11級自動化<3>班

      名: 歐陽明長 李徐軍

      陳龍

      指導教師:

      設(shè)計時間:

      2013--12--17

      物理與電氣工程學院

      2013年12月17日

      摘要

      電子鐘在生活中應(yīng)用非常廣泛,而一種簡單方便的數(shù)字電子鐘則更能受到人們的歡迎。所以設(shè)計一個簡易數(shù)字電子鐘很有必要。本電子鐘采用STC公司的AT89S52單片機為核心,使用12MHz 晶振與單片機AT89S52 相連接,通過軟件編程的方法實現(xiàn)以24小時為一個周期,同時8位7段LED數(shù)碼管(兩個四位一體數(shù)碼管)顯示小時、分鐘和秒的要求,并在計時過程中具有定時功能,當時間到達提前定好的時間進行蜂鳴報時。該電子鐘設(shè)有四個按鍵S12、S13、S14和S15鍵,進行相應(yīng)的操作就可實現(xiàn)小時調(diào)整、分鐘調(diào)整和啟停功能。具有時間顯示、整點報時、校正等功能。走時準確、顯示直觀、運行穩(wěn)定等優(yōu)點。

      關(guān)鍵詞 電子鐘;AT89S52;硬件設(shè)計;軟件設(shè)計

      目錄 設(shè)計課題任務(wù)、功能要求說明及方案介紹……………………………………3 1.1 設(shè)計課題任務(wù)………………………………………………………………3 1.2 功能要求說明………………………………………………………………3 1.3 設(shè)計總體方案介紹及原理說明……………………………………………3 2 設(shè)計課題硬件系統(tǒng)的設(shè)計………………………………………………………3 2.1 設(shè)計課題硬件系統(tǒng)各模塊功能簡要介紹…………………………………4 3 設(shè)計課題軟件系統(tǒng)的設(shè)計………………………………………………………4 3.1 設(shè)計課題軟件系統(tǒng)各模塊功能簡要介紹…………………………………4 3.2 設(shè)計課題軟件系統(tǒng)程序流程框圖…………………………………………4 4 設(shè)計結(jié)論、仿真結(jié)果、誤差分析………………………………………………7 4.1 設(shè)計課題的設(shè)計結(jié)論及使用說明…………………………………………4 4.2 設(shè)計課題的誤差分析………………………………………………………7 4.3 設(shè)計體會……………………………………………………………………7 參考文獻 ……………………………………………………………………………7 附 錄 ……………………………………………………………………………8 1 設(shè)計課題任務(wù)、功能要求說明及方案介紹

      1.1 設(shè)計課題任務(wù)

      設(shè)計一個具有特定功能的電子鐘。具有啟停、時間顯示、報時等功能。并有時間設(shè)定,時間調(diào)整功能。

      1.2 功能要求說明

      設(shè)計一個具有特定功能的電子鐘。電子鐘上電從12時0分0秒開始運行,按下啟停鍵進入時鐘運行狀態(tài);再按啟停鍵暫停運行,并且再次按下時能夠在原來的時間上繼續(xù)計時;運行到整點是能夠自動響鈴,通過外部按鍵可以進行實踐的調(diào)整,并且在運行時相應(yīng)的LED燈等同步亮滅。

      1.3 設(shè)計課題總體方案介紹及工作原理說明

      本電子鐘主要由單片機、4*4獨立鍵盤、顯示接口電路和電源電路構(gòu)成,設(shè) 計課題的總體方案如圖1.1所示:

      圖1.1 總體設(shè)計方案圖

      本電子鐘的所有的程序、參數(shù)均存放在AT89S52的內(nèi)部RAM中。鍵盤采用動態(tài)掃描方式。利用單片機定時器產(chǎn)生定時效果通過編程形成數(shù)字鐘效果,再利用數(shù)碼管動態(tài)掃描顯示單片機內(nèi)部處理的數(shù)據(jù),同時通過端口讀入當前外部控制狀態(tài)來改變程序的不同狀態(tài),實現(xiàn)不同功能。設(shè)計課題硬件系統(tǒng)的設(shè)計 2.1 設(shè)計課題硬件系統(tǒng)各模塊功能簡要介紹

      本設(shè)計的硬件系統(tǒng)主要采用以下基本模塊來實現(xiàn),單片機最小系統(tǒng)模塊,輸入模塊、輸出模塊、電源模塊。

      (1)單片機最小系統(tǒng)模塊:包括8位微控制器AT89S52;電源復位電路;晶振電路。本模塊AT89S52系統(tǒng)控制核心,單片機系統(tǒng)復位由電源上電完成。

      (2)輸入模塊:本模塊共用到了4個按鍵(S12、S13、S14、S15),分別完成時間的調(diào)整、啟停。1個電源開關(guān)(具有復位功能)。

      (3)輸出模塊:本次設(shè)計顯示為8位,采用兩個四位一體數(shù)碼管(共陽極)8個PNP三極管驅(qū)動,并且還有蜂鳴器模塊。(4)電源模塊:USB供電及下載器。

      設(shè)計課題軟件系統(tǒng)的設(shè)計

      3.1 設(shè)計課題軟件系統(tǒng)個模塊功能簡要介紹

      本設(shè)計的軟件系統(tǒng)主要采用以下基本模塊來實現(xiàn),主程序、中斷服務(wù)程序、鍵盤輸入程序模塊、數(shù)碼管及其驅(qū)動模塊和延時模塊。

      主程序:主要是用于對輸入信號的處理、輸出信號的控制和對各個功能程序模塊的控制。

      中斷服務(wù)程序:主要是用于電子鐘的1S延時。鍵盤輸入程序模塊:主要是用于完成特定時間調(diào)整。

      數(shù)碼管及其驅(qū)動模塊:主要是用于驅(qū)動數(shù)碼管及利用數(shù)碼管顯示時間。延時模塊:短延時用于數(shù)據(jù)的動態(tài)顯示,按鍵的判斷。

      3.2 設(shè)計課題軟件系統(tǒng)程序流程框圖

      系統(tǒng)程序采用匯編語言按模塊化方式進行設(shè)計,然后通過Keil軟件開發(fā)平臺將程序轉(zhuǎn)變成可燒寫文件。

      主循環(huán)程序框圖如3.1所示;判斷進位程序如3.2所示; 計時一秒中斷程序如3.3所示; 啟停中斷框圖如3.4所示; 延時子程序框圖如3.5所示; 圖3.1 主循環(huán)程序 5

      圖3.2 判斷進位子程序

      圖3.3 計時一秒中斷

      圖3.4 啟停中斷程序

      圖3.5 延時子程序 設(shè)計結(jié)論、運行結(jié)果、誤差分析

      4.1 設(shè)計課題的設(shè)計結(jié)論及使用說明

      本設(shè)計為基于單片機的電子鐘的設(shè)計。剛開始,我們很多地方理不清頭緒,無從下手,只能從平時的實驗中得到一些方法,但通過認真研究設(shè)計課題,找書上網(wǎng)查資料,確定基本設(shè)計方案,對所用芯片功能進行查找、調(diào)試,設(shè)計中有四個按鍵,其中S12為分鐘加1調(diào)整,S13為小時加1調(diào)整,S14為外部響鈴按鍵,S15為啟停按鍵,另外當整點時間到時,蜂鳴器報警。這樣的結(jié)果與設(shè)計基本相符,基本上完成了設(shè)計任務(wù)。

      4.2 設(shè)計課題的誤差分析

      該電子鐘在運行中存在一定的誤差,誤差產(chǎn)生有三種原因,首先是采用的計時利用中斷來實現(xiàn)。而當電子鐘運行時間1秒時,又得去執(zhí)行中斷程序,這個過程需要幾個機器周期。第二,硬件系統(tǒng)有一定的影響。第三,設(shè)計用到12MHz晶振,計算是滿20次為一秒鐘,實際會慢很多。

      4.3 設(shè)計體會

      本次課程設(shè)計,讓我們?nèi)耸芤娣藴\,認識到了自己的許多缺點和不足,使我深深的感受到了理論聯(lián)系實際的必要性及其重要性。

      參考文獻

      [1] 李全利.單片機原理與接口技術(shù)[M].高等教育出版社.2009.1.[2] 劉文秀.單片機應(yīng)用系統(tǒng)仿真的研究[J].現(xiàn)代電子技術(shù).2005, 第286 期.[3] 胡學海.單片機原理及應(yīng)用系統(tǒng)設(shè)計[M],北京:電子工業(yè)出版社,2005.[4] 李廣第.單片機基礎(chǔ)[M],北京航空航天大學出版社,2006.7.附錄

      程序代碼為:

      ORG 0000H LJMP START ORG 0003H LJMP INTT0 ORG 0013H LJMP INTT1 ORG 000BH LJMP INTT ORG 0100H START:SETB EA SETB ET0 SETB IT0 SETB EX0 SETB IT0 SETB EX1 SETB IT1 MOV R7,#16 MOV TMOD,#01H MOV TH0,#15536/256 MOV TL0,#15536 MOD 256 MOV R0,#12 MOV R1,#0 MOV R2,#0 MOV R6,0FEH CLR TR0 L1:

      LCALL PANDUAN;*****************

      ;記秒

      MOV A,R2

      MOV B,#10

      DIV AB

      MOV P2,#0FDH

      LCALL XIANSHI

      LCALL DELAY

      MOV A,B

      MOV P2,#0FEH

      LCALL XIANSHI

      LCALL DELAY;***************

      ;調(diào)分

      JB P3.0,L40 L41:JB P3.0,L42 LJMP L41 L42:INC R1

      ;計分

      L40: MOV A,R1

      MOV B,#10

      DIV AB

      MOV P2,#0EFH

      LCALL XIANSHI

      LCALL DELAY

      MOV A,B

      MOV P2,#0F7H

      LCALL XIANSHI

      LCALL DELAY

      MOV P2,#0FBH

      MOV P0,#0BFH

      LCALL DELAY;******************

      ;調(diào)時

      JB P3.1,L45 L47:JB P3.1,L46 LJMP L47 L46:INC R0

      ;計時

      L45: MOV A,R0

      MOV B,#10

      DIV AB

      MOV P2,#07FH

      LCALL XIANSHI

      LCALL DELAY

      MOV A,B

      MOV P2,#0BFH

      LCALL XIANSHI

      LCALL DELAY

      MOV P2,#0DFH

      MOV P0,#0BFH

      LCALL DELAY

      ;*************************;判斷5分鐘鬧鈴

      CJNE R1,#5,L51

      CLR P3.5

      MOV P1,R6

      MOV A,R6

      RL A

      MOV R6,A

      LJMP L52 L51:CJNE R1,#6,L52

      SETB P3.5 L52: LJMP L1

      ;***************;執(zhí)行1秒鐘

      INTT:DJNZ R7,L33

      MOV R7,#16

      INC R2

      MOV P1,R6

      MOV A,R6

      RL A

      MOV R6,A L33:RETI;*********************

      ;外部中斷

      INTT0:CPL P3.5

      MOV P1,#0

      RETI;***********************

      ;啟停功能

      INTT1:MOV P1,#0

      LCALL DELAY

      JB P3.3,L97

      CPL TR0

      L97: RETI;**********************

      ;顯示子程序

      XIANSHI:MOV DPTR,#TAB

      MOVC A,@A+DPTR

      MOV P0,A

      RET

      ;**********************

      ;延時子程序

      DELAY:MOV R3,#20

      DEL1:MOV R4,#50

      DEL2:DJNZ R4,DEL2

      DJNZ R3,DEL1

      RET

      ;*******************

      ;判斷進位子程序

      PANDUAN:

      CJNE R2,#60,L31

      MOV R2,#0

      INC R1

      L31:CJNE R1,#60,L32

      MOV R1,#0

      INC R0

      L32:CJNE R0,#24,L35

      MOV R0,#0

      L35:RET

      ;********************

      TAB:DB 0C0H,0F9H,0A4H,0B0H,99H

      DB 92H,82H,0F8H,80H,90H

      END

      第三篇:單片機課程設(shè)計報告,單片機電子時鐘

      題 目:單片機課程設(shè)計報告

      目 錄

      一、設(shè)計目的二、程設(shè)計具體要求

      三、單片機發(fā)展簡史

      四、8051單片機系統(tǒng)簡介

      五、8051單片機內(nèi)部定時器/計數(shù)器簡介

      六、程序電路

      七、程序流程

      八、程序代碼

      九 實驗總結(jié)-要求寫出完整的論文以及心得體會

      十 參考資料及小結(jié)

      原 文 :一.目的1. 進一步熟悉和掌握8051單片機的結(jié)構(gòu)及工作原理。

      2. 掌握單片機的接口技術(shù)及相關(guān)外圍芯片的外特性,控制方法。

      3. 通過課程設(shè)計,掌握以單片機核心的電路設(shè)計的基本方法和技術(shù),了解表關(guān)電路參數(shù)的計算方法。

      4. 通過實際程序設(shè)計和調(diào)試,逐步掌握模塊化程序設(shè)計方法和調(diào)試技術(shù)。

      5. 通過完成一個包括電路設(shè)計和程序開發(fā)的完整過程,使學生了解開發(fā)一單片機應(yīng)用系統(tǒng)的全過程,為今后從事相應(yīng)打下基礎(chǔ)。

      二.課程設(shè)計的體要求

      a)原理圖設(shè)計。

      1. 原理圖設(shè)計要符合項目的工作原理,連線要正確,端了要不得有標號。

      2. 圖中所使用的元器件要合理選用,電阻,電容等器件的參數(shù)要正確標明。

      3. 原理圖要完整,CPU,外圍器件,擴器接口,輸入/輸出裝置要一應(yīng)俱全。

      b)程序調(diào)計

      1. 根據(jù)要求,將總體項能分解成若干個子功能模塊,每個功能模塊完成一個特定的功能。

      2. 根據(jù)總體要求及分解的功能模塊,確定各功能模塊之間的關(guān)系,設(shè)直出完整的程序流程圖。c)程序調(diào)試將設(shè)計完的程序輸入,匯編,排除語法錯誤,生成*OBJ文件。

      1. 按所設(shè)計的原理圖,在實驗平臺上連線,檢查無誤。

      2. 將匯編后生成的*OBJ文件傳送到實驗裝置的,執(zhí)行該程序,檢查該程序、是否達到設(shè)計要求,若未達

      到,修改程序,直到達到要求為止,d)說明書

      1. 原理圖設(shè)計說明

      簡要說明設(shè)計目的,原理圖中所使用的元器件功能及在圖中的作用,各器件的工作過程及順序。

      2. 程序設(shè)計說明

      對程序設(shè)計總體功能及結(jié)構(gòu)進行說明,對各子模塊的功能以及各子模塊之間的關(guān)系作較詳細的描述。

      3. 畫出工作原理圖,程序流程圖并給出程序清單。

      目前,單片機已廣泛應(yīng)用到圖民經(jīng)濟建設(shè)和日常生活的許多領(lǐng)域,成為測控技術(shù)現(xiàn)代化必不可少的重要工具。

      單片機電子時鐘

      作者:佚名來源:本站原創(chuàng)點擊數(shù):

      491更新時間:2007年06月27日

      DS1302是Dallas公司生產(chǎn)的一種實時時鐘芯片。它通過串行方式與單片機進 行數(shù)據(jù)傳送,能夠向單片機提供包括秒、分、時、日、月、年等在內(nèi)的實時時間

      信息,并可對月末日期、閏年天數(shù)自動進行調(diào)整;它還擁有用于主電源和備份電源的雙電源引腳,在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運行。另外,它還能提供31字節(jié)的用于高速數(shù)據(jù)暫存的RAM。鑒于上述特點,DS1302已在許多單片機系統(tǒng)中得到應(yīng)用,為系統(tǒng)提供所需的實時時鐘信息。

      一、DS1302的主要特性

      1.引腳排列

      500)this.width=500 border=0>

      圖1DS1302引腳排列圖

      DS1302的引腳排列如圖1所示,各引腳的功能如下:

      X1,X2——32768Hz晶振引腳端;

      RST——復位端;

      I/O——數(shù)據(jù)輸入/輸出端;

      SCLK——串行時鐘端;

      GND——地;

      VCC2,VCC1——主電源與后備電源引腳端。

      2.主要功能

      DS1302時鐘芯片內(nèi)主要包括移位寄存器、控制邏輯電路、振蕩器、實時時鐘電路以及用于高速暫存的31字節(jié)RAM。DS1302與單片機系統(tǒng)的數(shù)據(jù)傳送依靠RST,I/O,SCLK三根端線即可完成。其工作過程可概括為:首先系統(tǒng)RST引腳驅(qū)動至高電平,然后在作用于SCLK時鐘脈沖的作用下,通過I/O引腳向DS1302輸入地址/命令字節(jié),隨后再在SCLK

      時鐘脈沖的配合下,從I/O引腳寫入或讀出相應(yīng)的數(shù)據(jù)字節(jié)。因此,其與單片機之間的數(shù)據(jù)傳送是十分容易實現(xiàn)的。

      二、時鐘的產(chǎn)生及存在的問題

      (1)在實際使用中,我們發(fā)現(xiàn)DS1302的工作情況不夠穩(wěn)定,主要表現(xiàn)在實時時間的傳送有時會出現(xiàn)誤差,有時甚至整個芯片停止工作。我們對DS1302的工作電路進行了分析,其與單片機系統(tǒng)的連接如圖2所示。從圖中可以看出,DS1302的外部電路十分簡單,惟一外接的元件是32768Hz的晶振。通過實驗我們發(fā)現(xiàn):當外接晶振電路振蕩時,DS1302計時正確;當外接晶振電路停振時,DS1302計時停止。因此,我們認為32768Hz晶振是造成 DS1302工作不穩(wěn)定的主要原因。

      500)this.width=500 border=0>

      圖2DS1302與單片機系統(tǒng)的連接圖

      (2)DS1302時鐘的產(chǎn)生基于外接的晶體振蕩器,振蕩器的頻率為32768Hz。該晶振通過引腳X1、X2直接連接至DS1302,即DS1302是依靠外部晶振與其內(nèi)部的電容配合來產(chǎn)生時鐘脈沖的。由于DS1302在芯片本身已經(jīng)集成了6pF的電容,所以,為了獲得穩(wěn)定可靠的時鐘,必須選用具有6pF負載電容的晶振。

      然而,許多人在選用晶振時僅僅注意了晶振的額定頻率值,而忽視了晶振的負載電容大小,甚至連許多經(jīng)銷商也不能提供所售晶振的負載電容。所以即使在使用中選用了符合32768Hz的晶振,但如果該晶振的負載電容與DS1302提供的6pF不一致時,就會影響晶振的起振或?qū)е抡袷庮l率的偏移,出現(xiàn)上述在應(yīng)用中的問題。

      三、利用輔助電容實現(xiàn)負載匹配

      (1)當所選的晶振負載電容不是6pF時,可以采用增加輔助電容的方法提高或降低DS1302振蕩器的電容性負載,使之與晶體所需的電容值匹配。如果已知晶體的負載電容為CI,若CI<6pF,則可以增加一個并聯(lián)電容CS以產(chǎn)生所需的總負載電容CI,即CI=6pF+CS;若CI>6pF,則可以在晶體的一端增加一個串聯(lián)電容CS,以產(chǎn)生所需的負載電容CI,即1/CI=1/6pF+1/CS,通過計算即可得出應(yīng)增加的輔助電容大小。輔助電容的接法如圖3所示。

      圖3CS連接電路圖

      (2)在使用前對晶體的負載電容并不知道的情況下,通過測定晶體振蕩頻率的方法可以確定該晶體的負載電容。

      對于晶體振蕩器來說,其振蕩頻率與負載電容之間的關(guān)系是確定的。以本文討論的DS1302使用的32768Hz晶振為例:當它工作于所要求的負載電容時,能較準確地產(chǎn)生 32768Hz的頻率;當它的負載電容小于6pF時,其振蕩頻率會正向偏移;當它的負載電容大于6pF時,其振蕩頻率就會負向偏移。因此,對于未知負載電容的晶體應(yīng)首先采用實驗的方法,在其兩端加入輔助電容使晶體起振,然后用頻率計測出振蕩頻率。若測得頻率大于32768Hz,說明負載電容偏?。蝗魷y得頻率小于32768Hz,說明負載電容偏大。對輔助電容逐步調(diào)整,最終使振蕩頻率盡可能接近32768Hz,則此時晶體端所接負載電容的總和就是適合該晶體的負載電容。

      結(jié)論

      以上方法經(jīng)我們在實際工作中多次使用,證明確實有效。它放寬了DS1302在使用中對晶振的條件要求,增強了DS1302在工作中的穩(wěn)定性,對DS1302更廣泛地應(yīng)用具有積極的意義。

      華東交大理工學院_2007-2008 _學年第_ 一 學期

      課程設(shè)計安排計劃

      班級:_05應(yīng)電__課程:_單片機原理及接口技術(shù)_

      一、課程設(shè)計題目:數(shù)碼管時鐘電路的設(shè)計

      二、設(shè)計內(nèi)容及要求:

      LED數(shù)碼管時鐘電路24小時計時方式,時、分、秒用6位數(shù)碼管顯示。選用AT89C2051單片機,12MHZ晶振,6位共陽數(shù)碼管,要求有調(diào)時功能,其他功能學生可自由發(fā)揮。

      三、設(shè)計方法與步驟:

      1.設(shè)計硬件原理電路,選擇元器件、確定其參數(shù)。

      2.設(shè)計印刷電路板電路(用面包板做)、焊接硬件電路。

      3.設(shè)計匯編語言程序,調(diào)試硬件電路和程序。

      4.編寫課程設(shè)計報告。

      四、設(shè)計時間安排:

      1.第十九周:周一、二,設(shè)計硬件原理電路,選擇元器件、確定其參數(shù)。

      周三、四、五,設(shè)計印刷電路板電路(用面包板做)、焊接硬件電路。

      2.第二十周:周一、二,設(shè)計匯編語言程序。

      周三、四,燒錄程序,調(diào)試硬件電路和程序。

      周五,編寫課程設(shè)計報告。

      指導老師: 楊威

      時間: 2007、1

      第四篇:單片機電子時鐘課程設(shè)計報告

      青島理工大學琴島學院 課題名稱:單片機原理及應(yīng)用課程設(shè)計學院:

      專業(yè)班級:

      學號:

      學生:

      指導教師:

      設(shè) 計 報 告

      第五篇:單片機數(shù)字時鐘課程設(shè)計感想

      五.實驗總結(jié)及感想

      在實驗的開始幾天,基本上沒有收獲,不知何從下手,不知所措。為了看得更遠,不妨站在前人的肩膀上,我在整體思路模糊的情況下,在網(wǎng)上大量招資糧,各種與電子時鐘相關(guān)的文章,我閱讀了不少。隨著涉獵的點滴積累,我對電子時鐘的設(shè)計方案已經(jīng)慢慢醞釀而成。有了方向和不少知識儲備后,在接下來的幾天,幾乎每天都有突破,雖然有時只是一句程序的修改或誕生,但那種收獲的感覺很暖人心。

      實驗中遇到了不少問題,接下來總結(jié)一下,共同探討。

      1,按鍵問題。我的設(shè)計中,很多功能選擇是通過按鍵開關(guān)實現(xiàn)的。在仿真中發(fā)現(xiàn),調(diào)整數(shù)值時,有時按鍵反應(yīng)太快,按一次,跳了幾下,使設(shè)置時間,日期很不方便。但是仿真多了之后,找到了按鍵(實際上是按鼠標)的節(jié)奏,對按鍵的掌控力提高了不少,不怎么會出現(xiàn)跳變的情況了。有些開關(guān)我采用了長按鍵的方式來防抖,效果不錯,但是每次都要長按鍵,調(diào)整效率太低,我沒有普及。本來想把所有的按鍵都加延時防抖電路,但仿真中感覺對鍵盤的控制力沒提高多少,有時還是會出問題,這個方案放棄了。索性將板子焊接出來了在調(diào)試軟件吧,仿真畢竟不是那么“真”啊!實際電路調(diào)試中,按鍵反應(yīng)沒有出現(xiàn)過于靈敏的問題,基本可控制。

      出現(xiàn)以上問題,我認為是電路板上焊接點太多,接觸不是很好,影響了信號的傳輸時間,從而解決了按鍵問題!也有可能是按鍵質(zhì)量問題,接觸不良。

      2,P0口開關(guān)問題。P0口比較特殊,它存在高阻態(tài),要使其輸入不是高電平就是低電平,就要接上拉電阻,給其高電平輸入。

      3,音樂鬧鈴問題。在鬧鈴時間到,鬧鈴提醒時,我的數(shù)碼管為熄滅狀態(tài),因為開始我的響鈴程序內(nèi),沒有數(shù)碼管掃描顯示程序。但加入數(shù)碼管顯示子程序后,我的鬧鈴音樂被影響了,一開始不知所措,有點懷疑是顯示程序時間過長,影響音樂的定時(節(jié)拍),我就在響鈴程序中加延時模塊,延時長度逐漸提高,最后出現(xiàn)了類似的問題,看來時顯示程序占用時間太長,使音樂每個音符的節(jié)拍出現(xiàn)了紊亂,音樂功能被遏制了!魚和熊掌不能兼得,我只能犧牲顯示來獲得音樂鬧鈴,但為了彌補顯示,我設(shè)計了閃爍提醒方案,就是在手動或音樂自然停止后,進入當前時間閃爍提示,8秒后若不按返回鍵,則自動跳入主程序。

      在仿真中,老師提供的響鈴電路不能實現(xiàn)功能,但是在我的電路板中效果很好,令人費解!4,中斷沖突問題,為了實現(xiàn)秒表,我在T0中斷嵌套了秒表相關(guān)進位程序,由于秒表要求精度0.01秒,故我的T0中斷定時為就剛好0.01秒,中斷100次,剛好1秒。秒表確實實現(xiàn)了,但是我的鬧鈴音質(zhì)變差了。一開始以為是鬧鈴程序存太多冗余環(huán)節(jié),影響了T1的音樂輸出中斷,但是檢查程序后,發(fā)現(xiàn)沒什么多余的,裁剪無從下手。

      在仿真中,我讓音樂模塊運行,發(fā)現(xiàn)音質(zhì)很好。添加T0中斷服務(wù)程序,但是將中斷進入的間隔變大,即0.05秒進入一次中斷,發(fā)現(xiàn)音質(zhì)有所下降,有滋滋聲,但比原來的好。最后認定應(yīng)該是T0中斷過于頻繁,T1音樂頻率發(fā)生中斷被打破,當單位時間內(nèi)被打破的次數(shù)達到一定程度時,音符和節(jié)拍的對應(yīng)發(fā)生紊亂,最終音質(zhì)變差。

      雖然如此,我的焊接的電路板的表現(xiàn)卻很爭氣,鬧鈴音質(zhì)可以接受!雖然這次實際表現(xiàn)不錯,但問題還是有的,還是要解決的,我的方案是把秒表程序放在T1中斷服務(wù)程序,雖然音樂的發(fā)生要用到T1中斷,但是秒表的顯示和鬧鈴音樂的演奏上不會重合在一起,鬧鈴判斷是在主程序,而秒表實現(xiàn)是在秒表子程序,故原本相互矛盾的兩個功能,在T1中斷服務(wù)程序中找到了共同的歸宿,和諧相處。

      5,顯示數(shù)字分隔問題。本實驗中用8個共陰極數(shù)碼管顯示日歷及其時間,但是8個數(shù)碼管連在一起,顯示過程中不能有效地區(qū)分時,分,秒和年,月,日,數(shù)碼管是兩兩組合起來,形成某位的十位和個位,故用小數(shù)點在適當位置一直保持高亮狀態(tài),形成分隔符,實現(xiàn)方便的讀取數(shù)據(jù)。具體方法是,將需要小數(shù)點位高亮的數(shù)碼管找出來,在動態(tài)顯示掃描到該數(shù)碼管時,先將提取的字段碼的最高位變?yōu)?,利用語句 ORL A,#10000000B 實現(xiàn),修正字碼后,再將字碼送入P1口顯示數(shù)字,如此問題得以解決。

      6,添加倒計時器嘀嘀聲提示功能。這個功能我用到了T1中斷,作為音調(diào)頻率發(fā)生器,但是T1已經(jīng)承擔了音樂鬧鈴的音調(diào)發(fā)生功能,在此通過設(shè)立標志位實現(xiàn)中斷服務(wù)程序的轉(zhuǎn)變。即使我將秒表的實現(xiàn)服務(wù)程序放入T1中斷實現(xiàn),也沒問題,只要選擇標志位判斷就可以了。在此,我們用調(diào)整狀態(tài)指示燈的狀態(tài)來做標志位,具體的說是P0.1口做標志位。

      還有一個問題就是如何使鈴聲有間隔的響,這就牽涉到定時,在此我們用硬件定時,即T1中斷的次數(shù)作為定時參數(shù)。我的設(shè)計是音調(diào)響0.25秒,然后用T1延時0.5秒,由于計數(shù)器工作于方式1時,12MHZ時鐘頻率下時,一次中斷最多定時65536*1us=0.065536秒,為了實現(xiàn)0.5秒的響聲間隔,將T1中斷1次定時為0.05秒,中斷10次后,重新裝音調(diào)發(fā)生計數(shù)初值。對于響鈴時間的設(shè)定原理類似,可以有發(fā)聲頻率求出一次發(fā)聲定時中斷的時間,N次發(fā)聲定時中斷后,使時間變化0.25秒,而后轉(zhuǎn)入發(fā)聲間隔定時程序。

      設(shè)計體會

      以前看別人的一個電子表賣十幾塊錢,心里面有點憤憤不平,現(xiàn)在,自己做過一個電子鐘,才發(fā)現(xiàn),其中的不容易,還有艱辛。其實做其他的事情也是一樣,都會經(jīng)過很多的困難,才能成功。突然想起一句話“不經(jīng)歷風雨,怎么見彩虹”。其實想想,這一個月,也留下了很多美好的回憶。一分耕耘,一分收獲。只有親自用實踐來驗證這句話,在能得其要領(lǐng)。經(jīng)過這次單片機課程設(shè)計,我從一個單片機實踐的門外漢,已經(jīng)越升為略知一二的新手。雖然還有很多有關(guān)單片機的應(yīng)用有待學習,但萬變不離其宗,只要深入了解單片的原理,全部知識點,各個細節(jié),一切設(shè)計皆有可能。還記得那個晚上通宵達旦仿真,不成功,誓不睡覺,很困了,都還在弄著。卻當仿真成功時,沒有一絲睡意,有的只是心中的喜悅通過這次的設(shè)計使我認識到本人對單片機方面的知識知道的太少了,對于書本上的很多知識還不能靈活運用,尤其是對程序設(shè)計語句的理解和運用,不能夠充分理解每個語句的具體含義,導致編程的程序過于復雜,使得需要的存儲空間增大。損耗了過多的內(nèi)存資源。本次的設(shè)計使我從中學到了一些很重要的東西,那就是如何從理論到實踐的轉(zhuǎn)化,怎樣將我所學到的知識運用到我以后的工作中去。只要我們有耐心,夠細心,都可以把它們解決。在大學的課堂的學習只是在給我們灌輸專業(yè)知識,而我們應(yīng)把所學的用到我們現(xiàn)實的生活中去,此次的電子時鐘設(shè)計給我奠定了一個實踐基礎(chǔ),我會在以后的學習、生活中磨練自己,使自己適應(yīng)于以后的競爭,同時在查找資料的過程中我也學到了許多新的知識,在和同學協(xié)作過程中增進同學間的友誼,使我對團隊精神的積極性和重要性有了更加充分的理解。我知道,今后我的路還是很長,我要學的東西也有很多。通過這次實習,我深刻的認識到計算機專業(yè)的路的不平坦,但我會以一種良好的態(tài)度去迎接每一個挫折和挑戰(zhàn)。

      下載單片機課程設(shè)計 (51單片機實現(xiàn)電子時鐘)(精選五篇)word格式文檔
      下載單片機課程設(shè)計 (51單片機實現(xiàn)電子時鐘)(精選五篇).doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


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

      相關(guān)范文推薦

        基于51單片機電子時鐘設(shè)計

        基于51單片機的電子時鐘設(shè)計 摘要 本電子時鐘以STC89C52單片機作為主控芯片,采用DS12C887時鐘芯片,使用1602液晶作為顯示輸出。該時鐘走時精確,具有鬧鐘設(shè)置,以及可同時顯示時間......

        單片機課程設(shè)計-電子萬年歷

        單片機及接口技術(shù)綜合實驗 ——————電子萬年日歷系統(tǒng) 一、題目:電子實時時鐘/萬年日歷系統(tǒng) 二、功能要求:1. 基本要求: ⑴ 顯示準確的北京時間(時、分、秒),可用24小時制式; ⑵......

        單片機課程設(shè)計

        單片機課程設(shè)計 課題: 簡易電子琴設(shè)計 學院:電氣與信息工程學院 專業(yè):電子信息工程 姓名:李琳琳 學號:093411106 指導老師:田巍 河南城建學院 2014年01 月01 日......

        單片機課程設(shè)計

        課 程 設(shè) 計 設(shè)計題目: 基于單片機的8*8點陣顯示數(shù)字設(shè)計 學生姓名: 指導教師: 二級學院: 專業(yè): 班級: 學號: 目 錄 摘要??????????????????????????......

        單片機課程設(shè)計

        基于單片機的火災智能報警控制系統(tǒng)的設(shè)計前言在各種災害中,火災是最經(jīng)常、最普通地威脅公眾安全和社會發(fā)展的災害之一。人類能夠?qū)疬M行利用和控制,是文明進步的一個重要標志......

        單片機課程設(shè)計

        《單片機技術(shù)》課程設(shè)計說明書 音樂盒 院、部:電氣與信息工程學院 學生姓名:劉亮 指導教師:凌云職稱講師 專業(yè):電子信息工程 班級:電子1302班 學號:1330340220 完成時間: 2016年1......

        單片機課程設(shè)計

        單片機課程設(shè)計_報警器 報警器 ORG 0010H START:MOV DPTR,#TAB CLR P3.1 SETB P1 MOV A,P1 CPL A ANL A,#0F0H SWAP A MOV R0,A LCALL DISP1 MOV A,P1 CPL A ANL A,#0FH MOV......

        單片機課程設(shè)計

        單片機課程設(shè)計 --------- 機電汽車工程學院 同組成員:(機091-1) 姓名(學號):......