|
12864時鐘資料包:
單片機(jī)源程序如下:
- /*********************************************************
- 項目名稱: 萬年歷的制作
- 項目目的: 通過制作萬年歷熟悉并掌握51系列的單片機(jī)
- 項目制作時間: 10月12日到10月25日
- 項目制作人: 柳振
- 項目實現(xiàn)功能:1,通過 12864顯示DS1302的當(dāng)前時間
- 2,可以通過按鍵調(diào)節(jié)DS1302的時間并保存調(diào)節(jié)的時間
- 到芯片里面去
- 3,調(diào)節(jié)DS1302時間是屏幕的時間時有友情提示
- 4,實現(xiàn)鬧鐘功能并且能設(shè)定鬧鐘,設(shè)定鬧鐘時屏幕上有
- 友情提示
- 5,設(shè)定的鬧鐘時間能在掉電的時候儲存當(dāng)再次開啟時
- 鬧鐘的時間仍然是上次的鬧鐘時間
- 按s4鬧鈴?fù)V?br />
- 6,紅外按下 1 鍵并且在走動時間時切換屏幕 再按一下時
- 返回走動時間的界面 或者按s2鍵返回原來的界面
- 7,按下 s4鍵之后單片機(jī)進(jìn)入串口通訊 并調(diào)整 DS1302
- 的時分秒的時間 通訊完之后單片機(jī)自動返回原來的界面
- 在通訊時仍然可以走動時間并每隔5 s把時間發(fā)送費電腦
- 通過按s4鍵退出
- **********************************************************/
- #include "Initial.h" //主要用于初始化
- #include "Alarm.h" //主要用于按鍵掃描于紅外掃描
- void main(void) //主函數(shù)
- {
- Initial(); //初始化
-
- while(1) //按鍵掃描主要在alarm.c文件里面
- {
- Key_Scan();
- }
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
alarm文件:
- /************************************************************
- 本文件主要用于寫按鍵處理 與鬧鈴處理
- ************************************************************/
- #include "HongWai.h"//主要用于調(diào)用紅外的函數(shù)
- #include "Alarm.h"
- #include "Delay.h"
- #include "control.h"
- #include "12864.h"
- #include "ds1302.h"
- #include "Uart.h"
- //g_Flag1看鬧鈴 g_Flag2 設(shè)鬧鈴
- bit g_Alarm_Flag1,g_Alarm_Flag2;
- bit g_Uart_Work_Flag;
- bit g_Turn_Poem_Flag;
- uchar g_Alarm_hour,g_Alarm_min;
- uchar g_Set_Alarm_Num; //鬧鈴設(shè)定功能的變量
- uchar g_Set_DS1302_Num; //DS1302的工能設(shè)置時間
- /****************************************************
- 函數(shù)名稱: 設(shè)置1302的時間
- 函數(shù)功能: 調(diào)整DS1302的時間數(shù)值
- 入口參數(shù): 無
- 出口參數(shù): 無
- 備 注: 按s1進(jìn)入設(shè)定時間 再次按下其他的按鍵開始調(diào)節(jié)
- s1設(shè)定的項目增加 s2設(shè)定的項目減小
- s3增加相應(yīng)的數(shù)值 s4減小相應(yīng)的數(shù)值
- *****************************************************/
- void Set_DS1302()
- {
- if(s1 == 0) //功能增加位置鍵
- {
- DelayMs(15); //消抖
- if(s1 == 0)
- {
- while(!s1); //等待按鍵釋放
- Di(); //響
- g_Set_DS1302_Num++; //功能鍵按下次數(shù)
- if(g_Set_DS1302_Num >= 9) //第八次按下
- {
- g_Set_DS1302_Num = 0;
- g_Alarm_Flag1 = 0;
- g_Alarm_Flag2 = 0;
- }
- if(g_Set_DS1302_Num > 0)
- {
- Locate_DS1302(); //一直定位
- }
- }
- }
- if(s2 == 0) //功能位置返回按鍵
- {
- DelayMs(15); //消抖
- if(s2 == 0)
- {
- while(!s2); //等待按鍵釋放
- Di(); //響
- g_Set_DS1302_Num--; //功能鍵按下次數(shù)
- if(g_Set_DS1302_Num <= 0) //清零
- {
- Write_1302_Date(); //寫入 存儲數(shù)據(jù)
- g_Set_DS1302_Num = 0;
- Initial_12864();
- Write_12864_DS1302_Constant();
- }
- if(g_Set_DS1302_Num > 0)
- {
- Locate_DS1302(); //一直定位
- }
- }
- }
-
- if(g_Set_DS1302_Num > 0) //否則進(jìn)行調(diào)整
- {
- if(s3 == 0) //增大鍵調(diào)節(jié)
- {
- DelayMs(5); //消抖
- if(s3== 0)
- {
- Di(); //響
- while(!s3); //等待按鍵釋放
- Increase_DS1302(); //增大DS1302數(shù)值函數(shù)
- }
- }
- if(s4 == 0) //減小調(diào)節(jié)
- {
- DelayMs(5); //消抖
- if(s4== 0)
- {
- while(!s4); //等待按鍵釋放
- Di(); //響
- Decrease_DS1302();//減小數(shù)值的函數(shù)
- }
- }
- }
- }
- /**************************************************
- 函數(shù)名: Set_A()
- 函數(shù)功能: 設(shè)定鬧鈴的時間
- 入口參數(shù): 無
- 出口參數(shù): 無
- 備 注: s1設(shè)定的項目增加 s2設(shè)定的項目減小
- s3增加相應(yīng)的數(shù)值 s4減小相應(yīng)的數(shù)值
- ***************************************************/
- void Set_A() //設(shè)定鬧鈴的時間
- {
- if(s1 == 0) //鬧鈴設(shè)定的項目增加
- {
- DelayMs(15);
- if(s1 == 0)
- {
- Di();
- while(!s1);
- g_Set_Alarm_Num ++; //鬧鈴的功能變量加
- Initial_12864();
- if(g_Set_Alarm_Num >= 3) //退出鬧鈴設(shè)定的功能
- {
- g_Set_Alarm_Num = 0;
- g_Set_DS1302_Num = 0; //讓時間走起來
- Write_12864_DS1302_Constant();
- g_Alarm_Flag2 = 0;
- g_Alarm_Flag1 = 0;
- }
- Locate_A(); //定位改變的鬧鐘數(shù)值
- }
- }
-
- if(s2 == 0) //鬧鈴設(shè)定的項目減小
- {
- DelayMs(15);
- if(s2 == 0)
- {
- Di();
- while(!s2);
- g_Set_Alarm_Num --;
- Initial_12864();
- if(g_Set_Alarm_Num <= 0) //退出鬧鈴設(shè)置
- {
- g_Set_Alarm_Num = 0;
- g_Set_DS1302_Num = 0; //讓時間走起來
- Initial_12864();
- Write_12864_DS1302_Constant();
- g_Alarm_Flag2 = 0;
- g_Alarm_Flag1 = 0;
- }
- Locate_A(); //定位改變的鬧鐘數(shù)值
- }
- }
- if(g_Set_Alarm_Num != 0) //進(jìn)入鬧鈴時分秒的增大減小
- {
- if(s3 == 0) //對鬧鈴時分秒的數(shù)值進(jìn)行增大
- {
- DelayMs(15);
- if(s3 == 0)
- {
- Di();
- while(!s3);
- A_Increase();
- }
- }
-
- if(s4 == 0) //對鬧鈴的數(shù)值進(jìn)行減小
- {
- DelayMs(15);
- if(s4 == 0)
- {
- Di();
- while(!s4);
- A_Decrease();
- }
- }
- }
-
- }
- /***********************************************
- 函數(shù)名: 沒有中斷處理的標(biāo)志位掃描
- 函數(shù)功能: 用于沒有串口中斷的各種各的標(biāo)志位掃描
- 與按鍵掃描 包括鬧鈴 ,DS1302 ,紅外
- 入口參數(shù): 無
- 出口參數(shù): 無
- 備 注: 友情提示在液晶上有顯示
- 按下s1進(jìn)入 DS1302的時間修訂
- 按下s3進(jìn)入 鬧鈴的的查看與修正
- 按下s4進(jìn)入 串口中斷的處理
- ***********************************************/
- void Without_Uart()
- {
- static bit Stop_A_Flag = 0; //停止鬧鈴的標(biāo)志位
-
- if(g_Alarm_Flag1 == 0 && g_Alarm_Flag2 == 0 && g_HongWai_Work_Flag == 0) //DS1302的有關(guān)函數(shù) 主要看行走的時間與DS1302的時間修改
- {
- Set_DS1302(); //設(shè)置DS1302時間
- if(g_Set_DS1302_Num == 0) //當(dāng)功能鍵的數(shù)值為零時進(jìn)行讀取DS1302的所有數(shù)據(jù)
- {
- Read_All_DS1302_Date();
- }
- Display_DS1302_Time();
- }
- if(g_Alarm_Flag1 == 0 && g_Alarm_Flag2 == 0 && g_HongWai_Work_Flag == 0 && g_Set_DS1302_Num == 0)//s3鬧鈴查看與修正
- {
- if(s3 == 0)
- {
- DelayMs(15);
- if(s3 == 0)
- {
- Di();
- while(!s3);
- g_Alarm_Flag1 = 1;
- Initial_12864();
- Remind_Whether_Set_Alarm();
- }
- }
- }
- if(g_Alarm_Flag1 == 1 && g_Alarm_Flag2 == 0 && g_HongWai_Work_Flag == 0) //判斷是否進(jìn)入鬧鈴
- {
- if(s1 == 0) //退出鬧鈴設(shè)定
- {
- DelayMs(15);
- if(s1 == 0)
- {
- Di();
- while(!s1);
- g_Alarm_Flag2 = 0;
- g_Alarm_Flag1 = 0;
- g_Set_DS1302_Num = 0;
- Write_12864_DS1302_Constant(); //寫12864固定的部分
- }
- }
- if(s2 == 0) //進(jìn)入鬧鈴的設(shè)定
- {
- DelayMs(15);
- if(s2 == 0)
- {
- Di();
- while(!s2);
- g_Alarm_Flag2 = 1;
- g_Set_Alarm_Num ++; //開始調(diào)節(jié)分鐘
- Locate_A();
- }
- }
- }
- if(g_Alarm_Flag2 == 1 && g_HongWai_Work_Flag == 0)//設(shè)定鬧鈴的時間
- {
- Set_A();
- Stop_A_Flag = 0; //設(shè)置好后讓鬧鈴繼續(xù)響
- }
-
- if(g_HongWai_Work_Flag == 1)
- {
- if(g_Turn_Poem_Flag == 0)
- {
- Turn_Page_Poem();
- }
- }
- if(g_Alarm_hour == g_hour && g_Alarm_min == g_min && Stop_A_Flag == 0
- && g_Alarm_Flag1 == 0 && g_Alarm_Flag2 == 0 && g_Set_DS1302_Num == 0) //進(jìn)入鬧鐘報響
- {
- Di();
-
- Locate_pos (0,0);
- Write_String ("鬧鈴來了 現(xiàn)在是",0,16);
- Locate_pos (3,0); //友情提示
- Write_String ("按s4退出退出鬧鈴",0,16);
- if(g_sec >= 59)
- {
- Write_12864_DS1302_Constant();
- }
-
- if(s4 == 0) //退出鬧鈴
- {
- DelayMs(15);
- if(s4 == 0)
- {
- Di();
- while(!s4);
- Stop_A_Flag = 1;//鬧鈴標(biāo)志位置一 停止鬧鈴 如果想再次進(jìn)入鬧鈴重新設(shè)定
- Write_12864_DS1302_Constant();
- }
- }
-
- }
-
- IRR_Work(); //紅外工作
- }
- /**************************************************
- 函數(shù)名: Key_Scan()
- 函數(shù)功能: 各種各樣的標(biāo)志位掃描與按鍵掃描
- 入口參數(shù): 無
- 出口參數(shù): 無
- 備 注: 主要被主函數(shù)調(diào)用以便讓整個工程工作
- 主要用于各種各樣的按鍵掃描于標(biāo)志位掃描
- ***************************************************/
- void Key_Scan()
- {
-
- if(g_Uart_Work_Flag == 0) //判斷是否進(jìn)入串口中斷
- {
- if(g_Set_DS1302_Num == 0 && g_Alarm_Flag1 == 0 && g_Alarm_Flag2 == 0)
- {
- if(s4 == 0)
- {
- DelayMs(15);
- if(s4 == 0)
- {
- Di();
- while(!s4);
- g_Uart_Work_Flag = 1;
- Initial_Uart (); //初始化串口
- Remind_Uart_process(); //提示進(jìn)行串口處理
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載地址:
http://www.torrancerestoration.com/bbs/dpj-86188-1.html
|
|