久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2980|回復: 0
打印 上一主題 下一主題
收起左側

單片機自動打鈴系統設計論文下載

[復制鏈接]
跳轉到指定樓層
樓主
ID:342079 發表于 2018-5-31 12:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
目錄
摘要
關鍵詞
引言
第一章  設計方案論證
1.1 設計要求
1.2 設計方案選擇
1.2.1 方案一:數字電路設計的自動打鈴系統
1.2.2 方案二:基于單片機的自動打鈴系統設計
1.2.3 方案確定
1.3 基本方案
1.3.1 設計課題簡要概述
1.3.2 系統軟硬件劃分
1.3.3 單片機選型
1.4 總體設計框圖
第二章  硬件電路設計
2.1 基本原理概述
2.2 主要原件參數及功能簡介
2.2.1 主控器AT89C51
2.2.2 時鐘電路DS1302
2.3 單元電路的設計
2.3.1顯示電路設計
2.3.2 鍵盤接口電路設計
2.3.3 響鈴電路設計
2.4 總體運行進程
第三章  軟件電路設計及流程圖
3.1 基本原理概述
3.1.1 中斷服務程序設計
3.1.2 顯示程序設計和按鍵判斷與按鍵處理程序設計
3.2 流程圖
3.2.1 系統主程序流程圖
3.2.2 系統定時中斷流程圖
第四章 系統程序設計
4.1 程序設計概要
4.2 源程序清單
第五章  自動打鈴硬件原理圖
第六章  畢業設計總結
致謝
參考文獻

摘要
自動打鈴系統,是以一片8位單片機為核心的實時時鐘及控制系統。我們知道單片機的外接石英晶體振蕩器能提供穩定、準確的基準頻率,并經12分頻后向內部定時器提供實時基準頻率信號,設定定時器工作在中斷方式下,連續對此頻率信號進行分頻計數,便可得秒信號,再對秒信號進行計數便可得到分、時等實時時鐘信息。如果石英晶體振蕩器的頻率信號為6MHZ,設定定時器定時工作方式1下,定時器為3CBOH,則定時器每100ms產生1次中斷,在定時器的中斷定時處理程序中,每10次中斷,則向秒計數器加1,秒計數器計數到60則向分計數器進位(并建立分進位標志),分計數器計數到60,則向時計數器進位,如此周而復始的連續計數,便可獲得時、分、秒的信號,建立一個實時時鐘。接下來便可以進行定時處理和打鈴輸出,當主程序檢測到有分進位標志時,便開始比較當前時間(小時與分、存放在RAM中)與信息時間表上的作息時間(小時與分,存放在ROM)是否相同,如有相同者,則進行報時處理并控制打鈴,如有不相同則返回主程序,如此便實現了報時控制的要求。

引言

隨著科技的不斷發展,各種芯片都得到了很好的發展,80C51 同樣如此,從開始的無人問津到現在的隨處可見,紅綠燈,記分牌,電子秒表,遙控器,電飯煲,電視等只要是電子產品,都會和芯片有關,其實芯片并不是什么神秘的高科技,它只是里面裝了一些己編好的程序而己.而這里要介紹的是用匯編語言來編程的一個系統,它能夠讓一個學校或企業集團實現打鈴自動化,總之,一個需要時間系統的機構實現自動提醒功能。

當今時代是一個新技術層出不窮的時代,在電子領域尤其是自動化智能控制領域,傳統的分立元件或數字邏輯電路構成的控制系統,正以前所未有的速度被單片機智能控制系統所取代。單片機具有體積小、功能強、成本低、應用面廣等優點,可以說,智能控制與自動控制的核心就是單片機。目前,一個學習與應用單片機的高潮正在工廠、學校及企事業單位大規模地興起。而本文是用AT89C51單片機設計的一個自動打鈴系統。

第一章  設計方案論證
1.1 設計要求
它可以作為時鐘電路來顯示時間,進行設置,定時打鈴。按照自頂向下設計方法劃分自動打鈴系統的功能。可分為:時間設置電路,計時電路,顯示電路和定時打鈴控制電路等。
以江蘇信息職業技術學院的打鈴情況設計
內容
時間
起床
6:30
早自習
7:30-8:10
第一節課
8:20-9:00
第二節課
9:10-9:50
第三節課
10:00-10:40
第四節課
10:50-11:30
第五節課
13:30-14:10
第六節課
14:20-15:00
第七節課
15:20-16:00
第八節課
16:10-16:50
晚自習
19:00-20:30
熄燈
22:30

1.2 設計方案選擇
1.2.1 方案一:數字電路設計的自動打鈴系統
利用函數信號發生器來進行脈沖信號輸出,利用74160N來設置十進制和六進制的進位輸出。利用數碼顯示器來顯示時間,利用或門、與門、非門、與非門、等電路元件進行組合實現打鈴的控制。
1.2.2 方案二:基于單片機的自動打鈴系統設計
單片機內部存儲器設三個字節分別存放時鐘的時、分、秒信息。利用定時器與軟件結合實現1秒定時中斷,沒產生一次中斷,存儲器內相應的秒值加1;若秒值達到60,則將其清零,并將相應的分字節值加1;若分值達到60,則清零分字節,并將時字節值加1;若時值達到24,則將時字節清零。建立完一個實時時鐘后接下來進行定時處理和打鈴輸出,當主程序檢測到有分進位標志時,便開始比較當前時間與信息時間表上的作息時間是否相同,相同者,則進行報時處理并控制打鈴,不相同則返回主程序。
1.2.3 方案確定
方案一的設計只能事先設定打鈴時間不能完全自動打鈴,且在修改打鈴時間上存在一定的困難。而方案二中的設計能完全實現自動化,詮釋了我們這次畢業設計的主題。并在修改打鈴時間上有了很大的方便,只需修改一部分程序便能實現不同的需要。
因此我選擇方案二進行設計。
1.3 基本方案
1.3.1 設計課題簡要概述
自動打鈴裝置用于工廠、學校等地的時間控制,本設計是按照學校作息時問設定的,模擬了電了鐘顯示時、分、秒。還根據學校的作息時間按時打鈴,本系統有4 個按鈕,分別用來調時、調分、秒和強制打鈴及強制關鈴,以保證始終與標準時間相吻合。
首先設計出本系統的硬件基本框圖,根據框圖設計電氣原理圖,簡要概述基本原理,按照設計技術參數設計出各部分程序。
1.3.2 系統軟硬件劃分
由于需要最小系統設計,因此,極大地介于系統的硬件成本,所有能用軟件實現的功能都用軟件完成,如按鍵的去抖,采用延時,顯示部分用動態顯示等,這樣硬件部分的設計可以采用單片機最小系統,所謂最小系統時僅有程序存儲器和時鐘及復位電路的單片機系統。
1.3.3 單片機選型
根據課題的具體內容,任務要求,計時、校時、定時、鍵盤顯示等功能,經多方面考慮,所選系統選項用.與MSC-51單片機完全兼容的AT89C51 低功耗單片機。
1.4 設計框圖
圖一 整體框圖

第二章  硬件電路設計2.1 基本原理概述
本系統主要由主控模塊,時鐘模塊,顯示模塊,鍵盤接口模塊等4 部分構成。通過內部定時產生中斷,從而使驅動電鈴打鈴。設定51 單片機工作在定時器工作方式1 ,每100ms產生一次中斷,利用軟件將基準100ms 單元進行累加,當定時器產生10 次中斷就產生lS 信號,這是秒單元加1 。同理,對分單元和時單元計數從而產生秒,分,時的值,通過六位七段顯示器進行顯示。由于動態顯示法需要數據所存等硬件,接口較復雜,考慮顯示只有六位,且系統沒有其他浮躁的處理程序,所有采用動態掃描LED 的顯示。
本系統采用四個按鍵,當時鐘時間和設置時間一直時,驅動程序動作,進行打鈴,每次打鈴30S
2.2 主要原件參數及功能簡介2.2.1 主控器AT89C51
AT89C51 公司生產的AT89C51 單片機用高性能的靜態89C51 設計,由先進工藝制造,并帶有非易失性FLASH 程序存儲器,它是· 種高性能、低功耗的8 位CMOS 微處理芯片,市場應用最多,主要特點有:
有4K 的FLASH 程序存儲器
256 字節內部RAM
電源控制模式:時鐘可停止和恢復,空閑模式,掉電模式
6個中斷源
4個中斷優先級
4個8位I/O口
全雙工增強型UART
2個16位定時、計數器
圖二  AT89C51
2.2.2 DS1302
1)性能特性
DS1302與單片機之間能簡單地采用同步串行的方式進行通信,僅需用到三個口線:1.RSE復位,2.I/O數據線,3.SCLK 串行時鐘。時鐘/RAM 的讀/寫數據以一個字節或多達31 個字節的字符組方式通信。DS1302 工作時功耗很低,保持數據和時鐘信息時功率小十1mW 。提供秒分時日日期。月年的信息,每月的天數和閏年的天數可自動調整時鐘,操作可通過AM/PM 指示決定采用24 或12 小時格式。
2)管腳描述
XI XZ 32.768KHz 晶振管腳
GND 接地
RST 復位腳
I/O 數據輸入/輸出引腳
SCLK 串行時鐘
Vcc1,Vcc2 電源供電管腳
DS1302 串行時鐘芯片8 腳 DIP
DS1302S 串行時鐘芯片8 腳 SOIC 200mil
DS1302Z 串行時鐘芯片8 腳 SOIC 150mil
圖三  DS1302
2.3 單元電路的設計2.3.1顯示電路設計
顯示部分采用普通的LCD1602顯示
圖四  顯示電路
2.3.2 鍵盤接口電路設計
由于鍵盤只有四個,采用獨立式按鈕,用查詢法完成讀健功能。


圖五  按鍵電路

2.3.3 響鈴電路設計
響鈴電路用到了蜂鳴器、三極管、1K電阻。蜂鳴器兩端分別接地和三極管。三極管一段電源另一端與電阻相連并接入AT89C51的P3.7接口。
圖六  響鈴電路
2.4 總體運行進程
首先實現24小時制電子鐘,在8位數碼管顯示,顯示為時分秒,實現的格式為:23-59-59。到達預定時間啟動蜂鳴器開始打鈴,打鈴的方式分為起床、熄燈和上下課鈴兩種。系統使用了4個按鍵,3只按鍵用來調整時間,另一只為強制打鈴按鈕。通過選擇鍵選擇調整位,選中位閃爍,按增加鍵為選中位加1,按減少鍵為選中位減1。按強制打鈴按鈕是實現強制打鈴或者強制關閉打鈴。









第三章  軟件電路設計及流程圖3.1 基本原理概述
主程序首先是初始化部分,主要是計時單元清零,中斷初始化,堆棧指針初始化,啟動定時器工作,然后是調用顯示子程序。主程序的起始存儲地址是0000H單元,但由于本系統用了定時器T0的中斷,中斷服務程序入口地址為000BH,因此從0000H單元起存放一條短調轉指令AJMP,使真正的主程序從0300H單元開始存放。
3.1.1 中斷服務程序設計
單片機內部的定時/計數器T0定時100ms,即0.1s,10次中斷即為1秒,60秒為1分,60分為1小時,24小時為一天,如此循環,從而實現計時功能。
編寫中斷服務程序關鍵要注意:1.現場保護,本系統中是累加器A和程序狀態字PSW值的保護。2.計時處理時采用的確十進制,因此時,分,秒單元加1后要進行十進制調整,即要執行DAA指令,還要注意的是時計到24就回零,分和秒計到60就回零。3.中斷返回前的現場恢復。
3.1.2 顯示程序設計和按鍵判斷與按鍵處理程序設計
顯示采用的是動態顯示,段控和位控都經過反相器,顯示的字形代碼是共陽的顯示代碼,位控信號輸出時是高電平有效,在校時時,采用的是點亮小數點信位調節器標志,哪位小數點亮表示調整的是該為的值。
顯示子程序的第一部分是拆字,顯示緩沖區是2FH—2AH;第二部分是查字型碼,輸出段控和位控信號,由于采用的是動態顯示,所以每出輸出一位的段控和位控信號要延時一定的時間,使LED顯示器顯示的字符時穩定的。
按鍵判斷程序有編寫時應注意按鍵的去抖動,該系統采用的是延時去抖動的方法,延時是通過調用子程序來實現的,每個按鍵按下后都要等待釋放后再返回。
按鍵處理程序中的按鍵式校時的,所以進入按鍵處理程序后就關閉定時中斷,對于動能鍵注意設置顯示標志。
3.2 流程圖3.2.1 系統主程序流程圖
3.2.2 系統定時中斷流程圖
第四章 系統程序設計4.1 程序設計概要
程序名稱:51 單片機自動掃鈴機控制系統
說明:實現24 小時制電子鐘,8 位數碼管顯示,顯示時分秒顯示格式:23-59-59(小時十位如果為0 則不顯示)。
到預定時問啟動蜂鳴器模擬打鈴,蜂鳴器BEEP: P3.7。
打鈴方式分起床、熄幻鈴和上、下課鈴兩種。
系統使用4 只按鍵,3 只按鍵用來調整時間,另一只為鬧鐘按鈕即定時掃鈴。
鍵SET_KFY: PI.0;通過選擇鍵選擇調整位,選中位閃爍。
增加鍵ADD_KEY:PI.1;按一次使選中位加1。
減少鍵DEC_KEY: PI.2;按一次使選中位位。1
如果長按ADD_KEY 或DEC_KEY,識別后則進行調時快進,此時停止閃爍。
如果選中位是秒,則按增加鍵或減少鍵都是將秒清零。
定時掃鈴鍵DALING_KEY: P1.3;用來強制打鈴或強制關閉鈴聲PO 口輸出數碼管段選信號,P2 口輸出數碼管位選信號。晶振12M

第五章  自動打鈴硬件原理圖
第六章  畢業設計總結
完成自動打鈴系統設計的畢業設計我能綜合運用電子技術課程中的所學到的理論知識來完成自動打鈴機的設計和分析電路,學會了在虛擬的環境下創建電路,計算和調整參數,我能靈活的應用protcl99se 軟件畫圖,并且掌握了一定的單片片機知識,通過這門課的設計我還有以下幾點收獲:
1、有利于基礎知識的掌握
通過這次設計我親手做,自己思考,將理論知識上升到實踐的高度,從而進一步打破了單片機的神秘面紗。
2、有利于邏輯思維的鍛煉。
在許多常規可生的日常學習中我們不難發現這樣一個現象,不少學生的思維常處于混亂的狀態,寫作文來前言不搭后語,解起數學題來步驟混亂,這些都是缺乏思維訓練的結果,程序設計是公認的,最能直接有效的訓練學生的創造思維,培養分析問題解決問題的能力的方法之一。即使見到陌生的程序,從任務分析,確定算法界面布局,縮寫代碼到調試運行,都能順利完成。
整個過程需要我們有條理的構思,這之間有猜測設計,判斷思維的抽象思維訓練,又有分析問題解決問題,預測日標等能力的培養。
致謝
在本文的撰寫過程中,導師王琦華給予了悉心的指導和關心,使我克服了眾多困難終于完成了畢業設計的撰寫工作。導師淵博的知識、嚴謹求實的治學態度及敬業精神,給我留下了深刻的印象,并將在我今后的人生道路上產生深遠的影響,在此論文完成之際,謹向導師致以崇高的敬意和衷心的感謝!
再一次感謝所有關心我、幫助我的人!

單片機源程序如下:
  1. #include <reg52.h>                       //調用單片機頭文件
  2. #define uchar unsigned char  //無符號字符型 宏定義              變量范圍0~255
  3. #define uint  unsigned int              //無符號整型 宏定義              變量范圍0~65535
  4. #include "eeprom52.h"

  5. bit flag_200ms ;
  6. bit flag_100ms ;
  7. sbit beep = P3^7;                //蜂鳴器定義
  8. bit flag_beep_en;
  9. uint clock_value;     //用作鬧鐘用的

  10. uchar menu_1,menu_2;

  11. uchar key_time,flag_value;      //用做連加的中間變量
  12. bit key_500ms  ;

  13. //#include "key.h"
  14. #include "ds1302.h"
  15. #include "lcd1602.h"

  16. uchar fen1=0x30,shi1=0x06;                //第1個打鈴的時間                            起床
  17. uchar fen2=0x30,shi2=0x07;                //第2個打鈴的時間                            早自習
  18. uchar fen3=0x10,shi3=0x08;                //第3個打鈴的時間                            早自習下         
  19. uchar fen4=0x20,shi4=0x08;                //第4個打鈴的時間                            第一節上課   
  20. uchar fen5=0x00,shi5=0x09;                //第5個打鈴的時間                            第一節下課
  21. uchar fen6=0x10,shi6=0x09;                //第6個打鈴的時間                            第二節上課     
  22. uchar fen7=0x50,shi7=0x09;                //第7個打鈴的時間                            第二節下課  
  23. uchar fen8=0x00,shi8=0x10;                //第8個打鈴的時間                            第三節上課  
  24. uchar fen9=0x40,shi9=0x10;                //第9個打鈴的時間                            第三節下課
  25. uchar fen10=0x50,shi10=0x10;                //第10個打鈴的時間 第四節上課
  26. uchar fen11=0x30,shi11=0x11;                //第11個打鈴的時間 第四節下課
  27. uchar fen12=0x30,shi12=0x13;                //第12個打鈴的時間 第五節上課
  28. uchar fen13=0x10,shi13=0x14;                //第13個打鈴的時間 第五節下課
  29. uchar fen14=0x20,shi14=0x14;                //第14個打鈴的時間 第六節上課
  30. uchar fen15=0x00,shi15=0x15;                //第15個打鈴的時間 第六節下課
  31. uchar fen16=0x20,shi16=0x15;                //第16個打鈴的時間 第七節上課
  32. uchar fen17=0x00,shi17=0x16;                //第17個打鈴的時間 第七節下課
  33. uchar fen18=0x10,shi18=0x16;                //第18個打鈴的時間 第八節上課
  34. uchar fen19=0x50,shi19=0x16;                //第19個打鈴的時間 第八節下課
  35. uchar fen20=0x00,shi20=0x19;                //第20個打鈴的時間 晚自習上課
  36. uchar fen21=0x30,shi21=0x20;                //第21個打鈴的時間 晚自習下課
  37. uchar fen22=0x30,shi22=0x22;                //第22個打鈴的時間 熄燈
  38. uchar fen23=0x00,shi23=0x00;                //第23個打鈴的時間
  39. uchar fen24=0x00,shi24=0x00;                //第24個打鈴的時間
  40. uchar fen25=0x00,shi25=0x00;                //第25個打鈴的時間
  41. uchar fen26=0x00,shi26=0x00;                //第26個打鈴的時間


  42. /******************把數據保存到單片機內部eeprom中******************/
  43. void write_eeprom()
  44. {
  45.               SectorErase(0x2000);
  46.               byte_write(0x2000, fen1);                 //第1個打鈴的時間
  47.               byte_write(0x2001, shi1);
  48.               byte_write(0x2002, fen2);                 //第2個打鈴的時間
  49.               byte_write(0x2003, shi2);
  50.               byte_write(0x2004, fen3);                 //第3個打鈴的時間
  51.               byte_write(0x2005, shi3);
  52.               byte_write(0x2006, fen4);                 //第4個打鈴的時間
  53.               byte_write(0x2007, shi4);
  54.               byte_write(0x2008, fen5);                 //第5個打鈴的時間
  55.               byte_write(0x2009, shi5);
  56.               byte_write(0x2010, fen6);                 //第6個打鈴的時間
  57.               byte_write(0x2011, shi6);
  58.               byte_write(0x2012, fen7);                 //第7個打鈴的時間
  59.               byte_write(0x2013, shi7);
  60.               byte_write(0x2014, fen8);                 //第8個打鈴的時間
  61.               byte_write(0x2015, shi8);
  62.               byte_write(0x2016, fen9);                 //第9個打鈴的時間
  63.               byte_write(0x2017, shi9);
  64.               byte_write(0x2018, fen10);                 //第10個打鈴的時間
  65.               byte_write(0x2019, shi10);
  66.               byte_write(0x2020, fen11);                 //第11個打鈴的時間
  67.               byte_write(0x2021, shi11);
  68.               byte_write(0x2022, fen12);                 //第12個打鈴的時間
  69.               byte_write(0x2023, shi12);
  70.               byte_write(0x2024, fen13);                 //第13個打鈴的時間
  71.               byte_write(0x2025, shi13);
  72.               byte_write(0x2026, fen14);                 //第14個打鈴的時間
  73.               byte_write(0x2027, shi14);
  74.               byte_write(0x2028, fen15);                 //第15個打鈴的時間
  75.               byte_write(0x2029, shi15);                              
  76.               byte_write(0x2030, fen16);                 //第16個打鈴的時間
  77.               byte_write(0x2031, shi16);
  78.               byte_write(0x2032, fen17);                 //第17個打鈴的時間
  79.               byte_write(0x2033, shi17);
  80.               byte_write(0x2034, fen18);                 //第18個打鈴的時間
  81.               byte_write(0x2035, shi18);
  82.               byte_write(0x2036, fen19);                 //第19個打鈴的時間
  83.               byte_write(0x2037, shi19);
  84.               byte_write(0x2038, fen20);                 //第20個打鈴的時間
  85.               byte_write(0x2039, shi20);
  86.               byte_write(0x2040, fen21);                 //第21個打鈴的時間
  87.               byte_write(0x2041, shi21);
  88.               byte_write(0x2042, fen22);                 //第22個打鈴的時間
  89.               byte_write(0x2043, shi22);
  90.               byte_write(0x2044, fen23);                 //第23個打鈴的時間
  91.               byte_write(0x2045, shi23);
  92.               byte_write(0x2046, fen24);                 //第24個打鈴的時間
  93.               byte_write(0x2047, shi24);                                                                                   
  94.               byte_write(0x2048, fen25);                 //第25個打鈴的時間
  95.               byte_write(0x2049, shi25);                                                                                   
  96.               byte_write(0x2050, fen26);                 //第26個打鈴的時間
  97.               byte_write(0x2051, shi26);                                                                                   
  98.               byte_write(0x2058, a_a);            
  99. }

  100. /******************把數據從單片機內部eeprom中讀出來*****************/
  101. void read_eeprom()
  102. {
  103.               fen1  = byte_read(0x2000);                //第1個打鈴的時間
  104.               shi1  = byte_read(0x2001);
  105.               fen2  = byte_read(0x2002);                //第2個打鈴的時間
  106.               shi2  = byte_read(0x2003);
  107.               fen3  = byte_read(0x2004);                //第3個打鈴的時間
  108.               shi3  = byte_read(0x2005);
  109.               fen4  = byte_read(0x2006);                //第4個打鈴的時間
  110.               shi4  = byte_read(0x2007);
  111.               fen5  = byte_read(0x2008);                //第5個打鈴的時間
  112.               shi5  = byte_read(0x2009);
  113.               fen6  = byte_read(0x2010);                //第6個打鈴的時間
  114.               shi6  = byte_read(0x2011);
  115.               fen7  = byte_read(0x2012);                //第7個打鈴的時間
  116.               shi7  = byte_read(0x2013);
  117.               fen8  = byte_read(0x2014);                //第8個打鈴的時間
  118.               shi8  = byte_read(0x2015);
  119.               fen9  = byte_read(0x2016);                //第9個打鈴的時間
  120.               shi9  = byte_read(0x2017);
  121.               fen10  = byte_read(0x2018);                //第10個打鈴的時間
  122.               shi10  = byte_read(0x2019);
  123.               fen11  = byte_read(0x2020);                //第11個打鈴的時間
  124.               shi11  = byte_read(0x2021);
  125.               fen12  = byte_read(0x2022);                //第12個打鈴的時間
  126.               shi12  = byte_read(0x2023);
  127.               fen13  = byte_read(0x2024);                //第13個打鈴的時間
  128.               shi13  = byte_read(0x2025);
  129.               fen14  = byte_read(0x2026);                //第14個打鈴的時間
  130.               shi14  = byte_read(0x2027);
  131.               fen15  = byte_read(0x2028);                //第15個打鈴的時間
  132.               shi15  = byte_read(0x2029);
  133.               fen16  = byte_read(0x2030);                //第16個打鈴的時間
  134.               shi16 = byte_read(0x2031);
  135.               fen17  = byte_read(0x2032);                //第17個打鈴的時間
  136.               shi17  = byte_read(0x2033);
  137.               fen18  = byte_read(0x2034);                //第18個打鈴的時間
  138.               shi18  = byte_read(0x2035);
  139.               fen19  = byte_read(0x2036);                //第19個打鈴的時間
  140.               shi19  = byte_read(0x2037);
  141.               fen20  = byte_read(0x2038);                //第20個打鈴的時間
  142.               shi20  = byte_read(0x2039);
  143.               fen21  = byte_read(0x2040);                //第21個打鈴的時間
  144.               shi21  = byte_read(0x2041);
  145.               fen22  = byte_read(0x2042);                //第22個打鈴的時間
  146.               shi22  = byte_read(0x2043);
  147.               fen23  = byte_read(0x2044);                //第23個打鈴的時間
  148.               shi23  = byte_read(0x2045);
  149.               fen24  = byte_read(0x2046);                //第24個打鈴的時間
  150.               shi24  = byte_read(0x2047);
  151.               fen25  = byte_read(0x2048);                //第25個打鈴的時間
  152.               shi25  = byte_read(0x2049);
  153.               fen26  = byte_read(0x2050);                //第26個打鈴的時間
  154.               shi26  = byte_read(0x2051);
  155.               a_a      = byte_read(0x2058);
  156. }

  157. /**************開機自檢eeprom初始化*****************/
  158. void init_eeprom()
  159. {
  160.               read_eeprom();                            //先讀
  161.               if(a_a != 2)                            //新的單片機初始單片機內問eeprom
  162.               {
  163.                             a_a = 2;
  164.                             fen1=0x30,shi1=0x06;                //第1個打鈴的時間                            起床
  165.                             fen2=0x30,shi2=0x07;                //第2個打鈴的時間                            早自習
  166.                             fen3=0x10,shi3=0x08;                //第3個打鈴的時間                            早自習下         
  167.                             fen4=0x20,shi4=0x08;                //第4個打鈴的時間                            第一節上課   
  168.                             fen5=0x00,shi5=0x09;                //第5個打鈴的時間                            第一節下課
  169.                             fen6=0x10,shi6=0x09;                //第6個打鈴的時間                            第二節上課     
  170.                             fen7=0x50,shi7=0x09;                //第7個打鈴的時間                            第二節下課  
  171.                             fen8=0x00,shi8=0x10;                //第8個打鈴的時間                            第三節上課  
  172.                             fen9=0x40,shi9=0x10;                //第9個打鈴的時間                            第三節下課
  173.                             fen10=0x50,shi10=0x10;                //第10個打鈴的時間 第四節上課
  174.                             fen11=0x30,shi11=0x11;                //第11個打鈴的時間 第四節下課
  175.                             fen12=0x30,shi12=0x13;                //第12個打鈴的時間 第五節上課
  176.                             fen13=0x10,shi13=0x14;                //第13個打鈴的時間 第五節下課
  177.                             fen14=0x20,shi14=0x14;                //第14個打鈴的時間 第六節上課
  178.                             fen15=0x00,shi15=0x15;                //第15個打鈴的時間 第六節下課
  179.                             fen16=0x20,shi16=0x15;                //第16個打鈴的時間 第七節上課
  180.                             fen17=0x00,shi17=0x16;                //第17個打鈴的時間 第七節下課
  181.                             fen18=0x10,shi18=0x16;                //第18個打鈴的時間 第八節上課
  182.                             fen19=0x50,shi19=0x16;                //第19個打鈴的時間 第八節下課
  183.                             fen20=0x00,shi20=0x19;                //第20個打鈴的時間 晚自習上課
  184.                             fen21=0x30,shi21=0x20;                //第21個打鈴的時間 晚自習下課
  185.                             fen22=0x30,shi22=0x22;                //第22個打鈴的時間 熄燈
  186.                             fen23=0x00,shi23=0x00;                //第23個打鈴的時間
  187.                             fen24=0x00,shi24=0x00;                //第24個打鈴的時間
  188.                             fen25=0x00,shi25=0x00;                //第25個打鈴的時間
  189.                             fen26=0x00,shi26=0x00;                //第25個打鈴的時間
  190.                             write_eeprom();                 //保存數據
  191.               }            
  192. }


  193. /******************1ms 延時函數*******************/
  194. void delay_1ms(uint q)
  195. {
  196.               uint i,j;
  197.               for(i=0;i<q;i++)
  198.                             for(j=0;j<120;j++);
  199. }

  200. /*************定時器0初始化程序***************/
  201. void init_1602_ds1302()
  202. {
  203.               write_sfm2_ds1302(2,3,nian);            
  204.               write_sfm2_ds1302(2,6,yue);            
  205.               write_sfm2_ds1302(2,9,ri);            
  206.               write_sfm2_ds1302(1,2,shi);            
  207.               write_sfm2_ds1302(1,5,fen);            
  208.               write_sfm2_ds1302(1,8,miao);
  209.               write_sfm1(1,14,week);                           
  210. }                                                                                                                                

  211. /*************定時器0初始化程序***************/
  212. void init_time0()               
  213. {
  214.               EA   = 1;                              //開總中斷
  215.               TMOD = 0X01;                //定時器0、工作方式1
  216.               ET0  = 1;                              //開定時器0中斷
  217.               TR0  = 1;                              //允許定時器0定時
  218. }

  219. /*************鬧鐘報警函數***************/
  220. void menu_dis()
  221. {
  222.               static uchar mm,value;
  223.               if(flag_100ms == 1)                              //100ms執行一次
  224.               {
  225.                             flag_100ms = 0;
  226.                             {            
  227.                                           if(miao == 0)
  228.                                           if(((fen == fen1) && (shi == shi1) && (shi1 != 0)) ||
  229.                                              ((fen == fen2) && (shi == shi2) && (shi2 != 0)) ||              //第2個打鈴時間判斷
  230.                                              ((fen == fen3) && (shi == shi3) && (shi3 != 0)) ||              //第3個打鈴時間判斷
  231.                                              ((fen == fen4) && (shi == shi4) && (shi4 != 0)) ||              //第4個打鈴時間判斷
  232.                                              ((fen == fen5) && (shi == shi5) && (shi5 != 0)) ||              //第5個打鈴時間判斷
  233.                                              ((fen == fen6) && (shi == shi6) && (shi6 != 0)) ||              //第6個打鈴時間判斷
  234.                                              ((fen == fen7) && (shi == shi7) && (shi7 != 0)) ||              //第7個打鈴時間判斷
  235.                                              ((fen == fen8) && (shi == shi8) && (shi8 != 0)) ||              //第8個打鈴時間判斷
  236.                                              ((fen == fen9) && (shi == shi9) && (shi9 != 0)) ||              //第9個打鈴時間判斷
  237.                                              ((fen == fen10) && (shi == shi10) && (shi10 != 0)) ||              //第10個打鈴時間判斷
  238.                                              ((fen == fen11) && (shi == shi11) && (shi11 != 0)) ||              //第11個打鈴時間判斷
  239.                                              ((fen == fen12) && (shi == shi12) && (shi12 != 0)) ||              //第12個打鈴時間判斷
  240.                                              ((fen == fen13) && (shi == shi13) && (shi13 != 0)) ||              //第13個打鈴時間判斷
  241.                                              ((fen == fen14) && (shi == shi14) && (shi14 != 0)) ||              //第14個打鈴時間判斷
  242.                                              ((fen == fen15) && (shi == shi15) && (shi15 != 0)) ||              //第15個打鈴時間判斷
  243.                                              ((fen == fen16) && (shi == shi16) && (shi16 != 0)) ||              //第16個打鈴時間判斷
  244.                                              ((fen == fen17) && (shi == shi17) && (shi17 != 0)) ||              //第17個打鈴時間判斷
  245.                                              ((fen == fen18) && (shi == shi18) && (shi18 != 0)) ||              //第18個打鈴時間判斷
  246.                                              ((fen == fen19) && (shi == shi19) && (shi19 != 0)) ||              //第19個打鈴時間判斷
  247.                                              ((fen == fen20) && (shi == shi20) && (shi20 != 0)) ||              //第20個打鈴時間判斷
  248.                                              ((fen == fen21) && (shi == shi21) && (shi21 != 0)) ||              //第21個打鈴時間判斷
  249.                                              ((fen == fen22) && (shi == shi22) && (shi22 != 0)) ||              //第22個打鈴時間判斷
  250.                                              ((fen == fen23) && (shi == shi23) && (shi23 != 0)) ||              //第23個打鈴時間判斷
  251.                                              ((fen == fen24) && (shi == shi24) && (shi24 != 0)) ||              //第24個打鈴時間判斷
  252.                                              ((fen == fen25) && (shi == shi25) && (shi25 != 0)) ||              //第25個打鈴時間判斷
  253.                                              ((fen == fen26) && (shi == shi26) && (shi26 != 0))               //第26個打鈴時間判斷
  254.                                                         )
  255.                                                         flag_beep_en = 1;              //打鈴蜂鳴器響的標志位                                                      
  256.                                           if(flag_beep_en == 1)              //打鈴以被打開
  257.                                           {
  258.                                                         clock_value++;
  259.                                                         beep = ~beep;                 //蜂鳴器叫3秒
  260.                                                         //  15 秒后自動關閉鬧鐘
  261.                                                         value ++;
  262.                                                         if(value >= 10)
  263.                                                         {
  264.                                                                       value = 0;
  265.                                                                       mm++;
  266.                                                                       if(mm >= 15)
  267.                                                                       {
  268.                                                                                     mm = 0;
  269.                                                                                     flag_beep_en = 0;
  270.                                                                                     beep = 1;
  271.                                                                       }
  272.                                                         }                                                                     
  273.                                           }
  274.                             }            
  275.               }
  276. }


  277. /********************獨立按鍵程序*****************/
  278. uchar key_can;              //按鍵值

  279. void key()              //獨立按鍵程序
  280. {
  281.               static uchar key_new;
  282.               key_can = 20;                   //按鍵值還原
  283.               P3 |= 0x78;                     //對應的按鍵IO口輸出為1
  284.               if((P3 & 0x78) != 0x78)                            //按鍵按下
  285.               {
  286.                             delay_1ms(1);                                 //按鍵消抖動
  287.                             if(((P3 & 0x78) != 0x78) && (key_new == 1))
  288.                             {                                                                                    //確認是按鍵按下
  289.                                           key_new = 0;
  290.                                           switch(P3 & 0x78)
  291.                                           {
  292.                                                         case 0x70:  key_can = 4;  break;              //得到按鍵值
  293.                                                         case 0x68:  key_can = 3;  break;              //得到按鍵值
  294.                                                         case 0x58:  key_can = 2;  break;              //得到按鍵值
  295.                                                         case 0x38:  key_can = 1;  break;              //得到按鍵值
  296.                                           }
  297. //                                          write_sfm2(1,0,key_can);                                                        //顯示按鍵值
  298.                             }                                         
  299.               }
  300.               else
  301.                             key_new = 1;            
  302. }


  303. /**********************設置函數************************/
  304. void key_with()
  305. {
  306.               if(key_can == 1)              //設置鍵
  307.               {
  308.                             menu_1++;
  309.                             if(menu_1 == 1)                //設置時間
  310.                             {
  311.                                           menu_2 = 1;
  312.                                           write_string(1,0,"    -  -    W:  ");                                         
  313.                                           write_string(2,0," 20  -  -       ");            
  314.                             }
  315.                             menu_2 = 1;
  316.                             if(menu_1 > 15)    //回到正常顯示
  317.                             {
  318.                                           menu_1 = 0;
  319.                                           write_guanbiao(1,2,0);                //關閉光標
  320.                                           init_1602_dis_csf();      //初始化液晶顯示                           
  321.                             }
  322.               }
  323.               if(key_can == 2)              //選擇鍵
  324.               {
  325.                             flag_200ms = 1;
  326.                             if(menu_1 == 1)                              //設置時間
  327.                             {
  328.                                           menu_2 ++;
  329.                                           if(menu_2 > 7)
  330.                                                         menu_2 = 1;
  331.                             }
  332.                             if(menu_1 != 1)                            //設置
  333.                             {
  334.                                           menu_2 ++;
  335.                                           if(menu_2 > 4)
  336.                                                         menu_2 = 1;                                                      
  337.                             }
  338.               }
  339.               if(menu_1 == 1)
  340.               {
  341.                             if(menu_2 == 1)                              //設置時
  342.                             {
  343.                                           if(key_can == 3)              //加
  344.                                           {
  345.                                                         shi+=0x01;
  346.                                                         if((shi & 0x0f) >= 0x0a)
  347.                                                                       shi = (shi & 0xf0) + 0x10;
  348.                                                         if(shi >= 0x24)
  349.                                                                       shi = 0;
  350.                                           }                           
  351.                                           if(key_can == 4)              //減
  352.                                           {
  353.                                                         if(shi == 0x00)
  354.                                                                       shi = 0x24;
  355.                                                         if((shi & 0x0f) == 0x00)
  356.                                                                       shi = (shi | 0x0a) - 0x10;
  357.                                                         shi -- ;
  358.                                           }                                                                       
  359.                             }
  360.                             if(menu_2 == 2)                              //設置分
  361.                             {
  362.                                           if(key_can == 3)              //加
  363.                                           {
  364.                                                         fen+=0x01;
  365.                                                         if((fen & 0x0f) >= 0x0a)
  366.                                                                       fen = (fen & 0xf0) + 0x10;
  367.                                                         if(fen >= 0x60)
  368.                                                                       fen = 0;
  369.                                           }                           
  370.                                           if(key_can == 4)              //減               
  371.                                           {
  372.                                                         if(fen == 0x00)
  373.                                                                       fen = 0x5a;
  374.                                                         if((fen & 0x0f) == 0x00)
  375.                                                                       fen = (fen | 0x0a) - 0x10;
  376.                                                         fen -- ;
  377.                                           }            
  378.                             }
  379.                             if(menu_2 == 3)                              //設置秒
  380.                             {
  381.                                           if(key_can == 3)              //加
  382.                                           {
  383.                                                         miao+=0x01;
  384.                                                         if((miao & 0x0f) >= 0x0a)
  385.                                                                       miao = (miao & 0xf0) + 0x10;
  386.                                                         if(miao >= 0x60)
  387.                                                                       miao = 0;
  388.                                           }            
  389.                                           if(key_can == 4)              //減               
  390.                                           {
  391.                                                         if(miao == 0x00)
  392.                                                                       miao = 0x5a;
  393.                                                         if((miao & 0x0f) == 0x00)
  394.                                                                       miao = (miao | 0x0a) - 0x10;
  395.                                                         miao -- ;                                         
  396.                                           }
  397.                             }
  398.                             if(menu_2 == 4)                              //設置星期
  399.                             {
  400.                                           if(key_can == 3)              //加
  401.                                           {
  402.                                               week+=0x01;
  403.                                                         if((week & 0x0f) >= 0x0a)
  404.                                                                       week = (week & 0xf0) + 0x10;
  405.                                                         if(week >= 0x08)
  406.                                                                       week = 1;
  407.                                           }                           
  408.                                           if(key_can == 4)              //減               
  409.                                           {
  410.                                                         if(week == 0x01)
  411.                                                                       week = 0x08;
  412.                                                         if((week & 0x0f) == 0x00)
  413.                                                                       week = (week | 0x0a) - 0x10;
  414.                                                         week -- ;
  415.                                           }            
  416.                             }
  417.                             if(menu_2 == 5)                              //設置年
  418.                             {
  419.                                           if(key_can == 3)              //加
  420.                                           {
  421.                                               nian+=0x01;
  422.                                                         if((nian & 0x0f) >= 0x0a)
  423.                                                                       nian = (nian & 0xf0) + 0x10;
  424.                                                         if(nian >= 0x9a)
  425.                                                                       nian = 1;
  426.                                           }                           
  427.                                           if(key_can == 4)              //減               
  428.                                           {
  429.                                                         if(nian == 0x01)
  430.                                                                       nian = 0x9a;
  431.                                                         if((nian & 0x0f) == 0x00)
  432.                                                                       nian = (nian | 0x0a) - 0x10;
  433.                                                         nian -- ;                           
  434.                                           }            
  435.                             }
  436.                             if(menu_2 == 6)                              //設置月
  437.                             {
  438.                                           if(key_can == 3)              //加
  439.                                           {
  440.                                               yue+=0x01;
  441.                                                         if((yue & 0x0f) >= 0x0a)
  442.                                                                       yue = (yue & 0xf0) + 0x10;
  443.                                                         if(yue >= 0x13)
  444.                                                                       yue = 1;
  445.                                           }                           
  446.                                           if(key_can == 4)              //減               
  447.                                           {
  448.                                                         if(yue == 0x01)
  449.                                                                       yue = 0x13;
  450.                                                         if((yue & 0x0f) == 0x00)
  451.                                                                       yue = (yue | 0x0a) - 0x10;
  452.                                                         yue -- ;                                                                     
  453.                                           }            
  454.                             }
  455.                             if(menu_2 == 7)                              //設置日
  456.                             {
  457.                                           if(key_can == 3)              //加
  458.                                           {
  459.                                 ri+=0x01;
  460.                                           if((ri & 0x0f) >= 0x0a)
  461.                                                         ri = (ri & 0xf0) + 0x10;
  462.                                           if(ri >= 0x32)
  463.                                                         ri = 0;                                         
  464.                                           }                           
  465.                                           if(key_can == 4)              //減               
  466.                                           {
  467.                                                         if(ri == 0x01)
  468.                                                                       ri = 0x32;
  469.                                                         if((ri & 0x0f) == 0x00)
  470.                                                                       ri = (ri | 0x0a) - 0x10;
  471.                                                         ri -- ;                                         
  472.                                           }            
  473.                             }
  474.                             write_sfm2_ds1302(1,2,shi);                 //顯示時
  475.                             write_sfm2_ds1302(1,5,fen);                 //顯示分
  476.                             write_sfm2_ds1302(1,8,miao);                 //顯示秒
  477.                             write_sfm1(1,14,week);                 //顯示星期                                                                     
  478.                             write_sfm2_ds1302(2,3,nian);                 //顯示年
  479.                             write_sfm2_ds1302(2,6,yue);                 //顯示月
  480.                             write_sfm2_ds1302(2,9,ri);                 //顯示日
  481.                             switch(menu_2)                 // 光標顯示
  482.                             {
  483.                                           case 1:  write_guanbiao(1,2,1);  break;
  484.                                           case 2:  write_guanbiao(1,5,1);  break;
  485.                                           case 3:  write_guanbiao(1,8,1);  break;
  486.                                           case 4:  write_guanbiao(1,14,1); break;
  487.                                           case 5:  write_guanbiao(2,3,1);  break;
  488.                                           case 6:  write_guanbiao(2,6,1);  break;
  489.                                           case 7:  write_guanbiao(2,9,1);  break;
  490.                             }
  491.                             write_time();                 //把時間寫進去
  492.               }            
  493. /***************設置1 2打鈴時間*********************/
  494.               if(menu_1 == 2)
  495.               {            
  496. /////////////////////                 第1個打鈴時間
  497.                             if(menu_2 == 1)                              //設置打鈴時
  498.                             {
  499.                                           if(key_can == 3)              //加            
  500.                                                         set_ds1302time(1,&shi1,0x24);                           
  501.                                           if(key_can == 4)              //減               
  502.                                                         set_ds1302time(0,&shi1,0x24);                           
  503.                             }
  504.                             if(menu_2 == 2)                              //設
  505.                             {
  506.                                           if(key_can == 3)              //加
  507.                                                         set_ds1302time(1,&fen1,0x60);                           
  508.                                           if(key_can == 4)              //減               
  509.                                                         set_ds1302time(0,&fen1,0x60);                           
  510.                             }            
  511. /////////////////////                 第2個打鈴時間            
  512.                             if(menu_2 == 3)                              //設置打鈴分
  513.                             {
  514.                                           if(key_can == 3)              //加              第2個打鈴時間
  515.                                                         set_ds1302time(1,&shi2,0x24);                           
  516.                                           if(key_can == 4)              //減               
  517.                                                         set_ds1302time(0,&shi2,0x24);                           
  518.                             }
  519.                             if(menu_2 == 4)                              //設
  520.                             {
  521.                                           if(key_can == 3)              //加
  522.                                                         set_ds1302time(1,&fen2,0x60);                           
  523.                                           if(key_can == 4)              //減               
  524.                                                         set_ds1302time(0,&fen2,0x60);                           
  525.                             }
  526.                             write_string(1,0," set1 00:00    ");                                         
  527.                             write_string(2,0," set2 00:00      ");            
  528.                             write_sfm2_ds1302(1,6,shi1);                 //顯示時
  529.                             write_sfm2_ds1302(1,9,fen1);                 //顯示分
  530.                             write_sfm2_ds1302(2,6,shi2);                 //顯示時
  531.                             write_sfm2_ds1302(2,9,fen2);                 //顯示分
  532.                             switch(menu_2)                 // 光標顯示
  533.                             {
  534.                                           case 1:  write_guanbiao(1,6,1);  break;
  535.                                           case 2:  write_guanbiao(1,9,1);  break;
  536.                                           case 3:  write_guanbiao(2,6,1);  break;
  537.                                           case 4:  write_guanbiao(2,9,1);  break;
  538.                             }            
  539.                             write_eeprom();     //保存鬧鐘時間
  540.               }            
  541. /***************設置3 4打鈴時間*********************/
  542.               if(menu_1 == 3)
  543.               {            
  544. /////////////////////                 第1個打鈴時間
  545.                             if(menu_2 == 1)                              //設置打鈴時
  546.                             {
  547.                                           if(key_can == 3)              //加            
  548.                                                         set_ds1302time(1,&shi3,0x24);                           
  549.                                           if(key_can == 4)              //減               
  550.                                                         set_ds1302time(0,&shi3,0x24);                           
  551.                             }
  552.                             if(menu_2 == 2)                              //設
  553.                             {
  554.                                           if(key_can == 3)              //加
  555.                                                         set_ds1302time(1,&fen3,0x60);                           
  556.                                           if(key_can == 4)              //減               
  557.                                                         set_ds1302time(0,&fen3,0x60);                           
  558.                             }            
  559. /////////////////////                 第2個打鈴時間            
  560.                             if(menu_2 == 3)                              //設置打鈴分
  561.                             {
  562.                                           if(key_can == 3)              //加              第2個打鈴時間
  563.                                                         set_ds1302time(1,&shi4,0x24);                           
  564.                                           if(key_can == 4)              //減               
  565.                                                         set_ds1302time(0,&shi4,0x24);                           
  566.                             }
  567.                             if(menu_2 == 4)                              //設
  568.                             {
  569.                                           if(key_can == 3)              //加
  570.                                                         set_ds1302time(1,&fen4,0x60);                           
  571.                                           if(key_can == 4)              //減               
  572.                                                         set_ds1302time(0,&fen4,0x60);                           
  573.                             }
  574.                             write_string(1,0," set3 00:00    ");                                         
  575.                             write_string(2,0," set4 00:00      ");            
  576.                             write_sfm2_ds1302(1,6,shi3);                 //顯示時
  577.                             write_sfm2_ds1302(1,9,fen3);                 //顯示分
  578.                             write_sfm2_ds1302(2,6,shi4);                 //顯示時
  579.                             write_sfm2_ds1302(2,9,fen4);                 //顯示分
  580.                             switch(menu_2)                 // 光標顯示
  581.                             {
  582.                                           case 1:  write_guanbiao(1,6,1);  break;
  583.                                           case 2:  write_guanbiao(1,9,1);  break;
  584.                                           case 3:  write_guanbiao(2,6,1);  break;
  585.                                           case 4:  write_guanbiao(2,9,1);  break;
  586.                             }            
  587.                             write_eeprom();     //保存鬧鐘時間
  588.               }            
  589. /***************設置5 6打鈴時間*********************/
  590.               if(menu_1 == 4)
  591.               {            
  592. /////////////////////                 第5個打鈴時間
  593.                             if(menu_2 == 1)                              //設置打鈴時
  594.                             {
  595.                                           if(key_can == 3)              //加            
  596.                                                         set_ds1302time(1,&shi5,0x24);                           
  597.                                           if(key_can == 4)              //減               
  598.                                                         set_ds1302time(0,&shi5,0x24);                           
  599.                             }
  600.                             if(menu_2 == 2)                              //設
  601.                             {
  602.                                           if(key_can == 3)              //加
  603.                                                         set_ds1302time(1,&fen5,0x60);                           
  604.                                           if(key_can == 4)              //減               
  605.                                                         set_ds1302time(0,&fen5,0x60);                           
  606.                             }            
  607. /////////////////////                 第6個打鈴時間            
  608.                             if(menu_2 == 3)                              //設置打鈴分
  609.                             {
  610.                                           if(key_can == 3)              //加            
  611.                                                         set_ds1302time(1,&shi6,0x24);                           
  612.                                           if(key_can == 4)              //減               
  613.                                                         set_ds1302time(0,&shi6,0x24);                           
  614.                             }
  615.                             if(menu_2 == 4)                              //設
  616.                             {
  617.                                           if(key_can == 3)              //加
  618.                                                         set_ds1302time(1,&fen6,0x60);                           
  619.                                           if(key_can == 4)              //減               
  620.                                                         set_ds1302time(0,&fen6,0x60);                           
  621.                             }
  622.                             write_string(1,0," set5 00:00    ");                                         
  623.                             write_string(2,0," set6 00:00      ");            
  624.                             write_sfm2_ds1302(1,6,shi5);                 //顯示時
  625.                             write_sfm2_ds1302(1,9,fen5);                 //顯示分
  626.                             write_sfm2_ds1302(2,6,shi6);                 //顯示時
  627.                             write_sfm2_ds1302(2,9,fen6);                 //顯示分
  628.                             switch(menu_2)                 // 光標顯示
  629.                             {
  630.                                           case 1:  write_guanbiao(1,6,1);  break;
  631.                                           case 2:  write_guanbiao(1,9,1);  break;
  632.                                           case 3:  write_guanbiao(2,6,1);  break;
  633.                                           case 4:  write_guanbiao(2,9,1);  break;
  634.                             }            
  635.                             write_eeprom();     //保存鬧鐘時間
  636.               }            
  637. /***************設置7 8打鈴時間*********************/
  638.               if(menu_1 == 5)
  639.               {            
  640. /////////////////////                 第7個打鈴時間
  641.                             if(menu_2 == 1)                              //設置打鈴時
  642.                             {
  643.                                           if(key_can == 3)              //加            
  644.                                                         set_ds1302time(1,&shi7,0x24);                           
  645.                                           if(key_can == 4)              //減               
  646.                                                         set_ds1302time(0,&shi7,0x24);                           
  647.                             }
  648.                             if(menu_2 == 2)                              //設
  649.                             {
  650.                                           if(key_can == 3)              //加
  651.                                                         set_ds1302time(1,&fen7,0x60);                           
  652.                                           if(key_can == 4)              //減               
  653.                                                         set_ds1302time(0,&fen7,0x60);                           
  654.                             }            
  655. /////////////////////                 第8個打鈴時間            
  656.                             if(menu_2 == 3)                              //設置打鈴分
  657.                             {
  658.                                           if(key_can == 3)              //加            
  659.                                                         set_ds1302time(1,&shi8,0x24);                           
  660.                                           if(key_can == 4)              //減               
  661.                                                         set_ds1302time(0,&shi8,0x24);                           
  662.                             }
  663.                             if(menu_2 == 4)                              //設
  664.                             {
  665.                                           if(key_can == 3)              //加
  666.                                                         set_ds1302time(1,&fen8,0x60);                           
  667.                                           if(key_can == 4)              //減               
  668.                                                         set_ds1302time(0,&fen8,0x60);                           
  669.                             }
  670.                             write_string(1,0," set7 00:00    ");                                         
  671.                             write_string(2,0," set8 00:00      ");            
  672.                             write_sfm2_ds1302(1,6,shi7);                 //顯示時
  673.                             write_sfm2_ds1302(1,9,fen7);                 //顯示分
  674.                             write_sfm2_ds1302(2,6,shi8);                 //顯示時
  675.                             write_sfm2_ds1302(2,9,fen8);                 //顯示分
  676.                             switch(menu_2)                 // 光標顯示
  677.                             {
  678.                                           case 1:  write_guanbiao(1,6,1);  break;
  679.                                           case 2:  write_guanbiao(1,9,1);  break;
  680.                                           case 3:  write_guanbiao(2,6,1);  break;
  681.                                           case 4:  write_guanbiao(2,9,1);  break;
  682.                             }            
  683.                             write_eeprom();     //保存鬧鐘時間
  684.               }            
  685. /***************設置9 10打鈴時間*********************/
  686.               if(menu_1 == 6)
  687.               {            
  688. /////////////////////                 第9個打鈴時間
  689.                             if(menu_2 == 1)                              //設置打鈴時
  690.                             {
  691.                                           if(key_can == 3)              //加            
  692.                                                         set_ds1302time(1,&shi9,0x24);                           
  693.                                           if(key_can == 4)              //減               
  694.                                                         set_ds1302time(0,&shi9,0x24);                           
  695.                             }
  696.                             if(menu_2 == 2)                              //設
  697.                             {
  698.                                           if(key_can == 3)              //加
  699.                                                         set_ds1302time(1,&fen9,0x60);                           
  700.                                           if(key_can == 4)              //減               
  701.                                                         set_ds1302time(0,&fen9,0x60);                           
  702.                             }            
  703. /////////////////////                 第10個打鈴時間            
  704.                             if(menu_2 == 3)                              //設置打鈴分
  705.                             {
  706.                                           if(key_can == 3)              //加            
  707.                                                         set_ds1302time(1,&shi10,0x24);                           
  708.                                           if(key_can == 4)              //減               
  709.                                                         set_ds1302time(0,&shi10,0x24);                           
  710.                             }
  711.                             if(menu_2 == 4)                              //設
  712.                             {
  713.                                           if(key_can == 3)              //加
  714.                                                         set_ds1302time(1,&fen10,0x60);                           
  715.                                           if(key_can == 4)              //減               
  716.                                                         set_ds1302time(0,&fen10,0x60);                           
  717.                             }
  718.                             write_string(1,0," set9 00:00    ");                                         
  719.                             write_string(2,0,"set10 00:00    ");            
  720.                             write_sfm2_ds1302(1,6,shi9);                 //顯示時
  721.                             write_sfm2_ds1302(1,9,fen9);                 //顯示分
  722.                             write_sfm2_ds1302(2,6,shi10);                 //顯示時
  723.                             write_sfm2_ds1302(2,9,fen10);                 //顯示分
  724.                             switch(menu_2)                 // 光標顯示
  725.                             {
  726.                                           case 1:  write_guanbiao(1,6,1);  break;
  727.                                           case 2:  write_guanbiao(1,9,1);  break;
  728.                                           case 3:  write_guanbiao(2,6,1);  break;
  729.                                           case 4:  write_guanbiao(2,9,1);  break;
  730.                             }            
  731.                             write_eeprom();     //保存鬧鐘時間
  732.               }                                         

  733. /***************設置9 10打鈴時間*********************/
  734.               if(menu_1 == 6)
  735.               {            
  736. /////////////////////                 第9個打鈴時間
  737.                             if(menu_2 == 1)                              //設置打鈴時
  738.                             {
  739.                                           if(key_can == 3)              //加            
  740.                                                         set_ds1302time(1,&shi9,0x24);                           
  741.                                           if(key_can == 4)              //減               
  742.                                                         set_ds1302time(0,&shi9,0x24);                           
  743. ……………………

  744. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
單片機自動打鈴系統設計畢業論文.doc (845.5 KB, 下載次數: 67)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩一区二区三区精品 | 91在线免费视频 | 日日夜夜天天 | 99久久精品国产毛片 | 国产精品久久影院 | 亚洲欧美精品在线观看 | japanhd成人| www中文字幕| 中文字幕精品一区二区三区精品 | 成年免费视频 | 成人在线免费视频 | 国产成人精品一区二 | 亚洲欧洲小视频 | 毛片软件| 国产高清视频 | 亚洲天堂999 | 自拍偷拍亚洲欧美 | 国产精品日韩欧美一区二区 | 国产成人免费 | 特一级毛片| 国产精品永久在线观看 | 亚洲欧美国产毛片在线 | 91免费观看国产 | 国产日韩欧美一区 | 中文字幕亚洲精品 | 欧美一区二区三区在线播放 | 人人天天操 | 91视视频在线观看入口直接观看 | 性欧美精品一区二区三区在线播放 | 国产精品久久久久久久久久久新郎 | 精品av | 欧美视频在线一区 | 亚洲一区二区三区四区五区中文 | 好好的日在线视频 | 亚洲二区在线 | 成人性视频在线 | 成人一区二区三区 | 97超碰人人 | 国产一区h| 欧美h版 | 日韩在线中文 |