找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4862|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)設(shè)計電子時鐘鬧鐘,lcd1602顯示日期時間、萬年歷

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:722034 發(fā)表于 2020-7-2 19:27 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
    最近在做51單片機(jī)的設(shè)計,要求用定時器中斷來做個電子時鐘,用protues進(jìn)行仿真。有鬧鐘、菜單、萬年歷、時間制式轉(zhuǎn)化(12小時制,24小時制)、掉電保存等功能。
設(shè)計一個完整的鬧鐘程序,實現(xiàn)以下功能:
1.  具有4個以上按鍵,具有確定鍵,返回鍵,上移鍵,下移鍵,保存鍵等,可以通過按鍵設(shè)定時間的時鐘,分鐘,年,月,日
2.  設(shè)定能實現(xiàn)秒鐘的自動計時相加(利用定時器)
3.  具有萬年歷功能,能自動識別潤年與非潤年進(jìn)行日期疊加
4.  具有12小時制和24小時制的切換
5.  采用LCD1602進(jìn)行顯示,上電后先顯示學(xué)生學(xué)號,姓名,然后延遲5秒后進(jìn)入日期和時鐘界面。
6.  可以設(shè)置鬧鐘,當(dāng)時間到鬧鐘時候,具有設(shè)置提出鬧鈴(可以用其中一個led燈或者其他指示設(shè)備表示)
7.  鬧鈴設(shè)置能按周進(jìn)行設(shè)置,可設(shè)計工作日,周末和每天
8.  設(shè)計小型操作系統(tǒng)實現(xiàn)各個數(shù)字字段的修改與確定
9.   能通過i2c外接一個E2ROM,將鬧鐘設(shè)置的數(shù)據(jù)保存,確保掉電重啟后數(shù)據(jù)不會丟失。

#include <reg51.h>                        //51頭文件
#include "lcd.h"
#include "Menu.h"
#include "Clock.h"
#include "E2ROM.h"
#include "I2C.h"
#include "Key.h"
extern char second;
extern unsigned char year;
extern unsigned char alarm_set_flag;
unsigned char menu_select = 0;
unsigned int timer_cnt = 0;
void interrupt_init();
void main()
{        
        interrupt_init();
        Lcd_Init();
        LcdClean();
        i2c_init();
        data_rece();
        while(1)
        {
                switch(menu_select)
                {
                        case 0:        Calendar_display(); break;
                        case 1:        alarm_displaya(); break;
                        case 2:        Lunar_Calendar(); break;
                        case 3: menu_display(); break;
                }
                clock();
                Calendar();
                data_send();
        }
}
/**********鍵盤掃描中斷服務(wù)函數(shù)*********/
void Key_interrupt()         interrupt 2
{
        key_scanf();        
}
/**********時鐘中斷服務(wù)函數(shù)*********/
void TIME_interrupt()         interrupt 1
{
        TH0 = (65536-10000)/256;  //重設(shè)初值
        TH1 = (65536-10000)%256;
        timer_cnt++;
        if(timer_cnt>=100)           
        {
                 second++;
                timer_cnt = 0;
        }

        alarm();        
}
/**********中斷初始化配置*********/
void interrupt_init()
{
        EA = 1;//全局中斷打開

        EX1 = 1;//INT1中斷允許        
        EX1 = 1;//INT0中斷允許
        IT1 = 1;//觸發(fā)方式為下降沿觸發(fā)

        TMOD = 0x01;
        TH0 = (65536-10000)/256;
        TH1 = (65536-10000)%256;
        ET0 = 1;
        TR0 = 1;         //計時開始
}
protues.zip (42.7 KB, 下載次數(shù): 91)

keil.zip (101.57 KB, 下載次數(shù): 87)





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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表