1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉
標題:
我的12864超級時鐘制作資料 帶紅外遙控 鬧鈴 按鍵 完整源碼
[打印本頁]
作者:
51黑電子迷
時間:
2017-5-28 17:33
標題:
我的12864超級時鐘制作資料 帶紅外遙控 鬧鈴 按鍵 完整源碼
12864時鐘資料包:
0.png
(55.64 KB, 下載次數(shù): 45)
下載附件
2017-5-28 17:26 上傳
單片機源程序如下:
/*********************************************************
項目名稱: 萬年歷的制作
項目目的: 通過制作萬年歷熟悉并掌握51系列的單片機
項目制作時間: 10月12日到10月25日
項目制作人: 柳振
項目實現(xiàn)功能:1,通過 12864顯示DS1302的當前時間
2,可以通過按鍵調(diào)節(jié)DS1302的時間并保存調(diào)節(jié)的時間
到芯片里面去
3,調(diào)節(jié)DS1302時間是屏幕的時間時有友情提示
4,實現(xiàn)鬧鐘功能并且能設(shè)定鬧鐘,設(shè)定鬧鐘時屏幕上有
友情提示
5,設(shè)定的鬧鐘時間能在掉電的時候儲存當再次開啟時
鬧鐘的時間仍然是上次的鬧鐘時間
按s4鬧鈴?fù)V?br />
6,紅外按下 1 鍵并且在走動時間時切換屏幕 再按一下時
返回走動時間的界面 或者按s2鍵返回原來的界面
7,按下 s4鍵之后單片機進入串口通訊 并調(diào)整 DS1302
的時分秒的時間 通訊完之后單片機自動返回原來的界面
在通訊時仍然可以走動時間并每隔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進入設(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) //否則進行調(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) //進入鬧鈴時分秒的增大減小
{
if(s3 == 0) //對鬧鈴時分秒的數(shù)值進行增大
{
DelayMs(15);
if(s3 == 0)
{
Di();
while(!s3);
A_Increase();
}
}
if(s4 == 0) //對鬧鈴的數(shù)值進行減小
{
DelayMs(15);
if(s4 == 0)
{
Di();
while(!s4);
A_Decrease();
}
}
}
}
/***********************************************
函數(shù)名: 沒有中斷處理的標志位掃描
函數(shù)功能: 用于沒有串口中斷的各種各的標志位掃描
與按鍵掃描 包括鬧鈴 ,DS1302 ,紅外
入口參數(shù): 無
出口參數(shù): 無
備 注: 友情提示在液晶上有顯示
按下s1進入 DS1302的時間修訂
按下s3進入 鬧鈴的的查看與修正
按下s4進入 串口中斷的處理
***********************************************/
void Without_Uart()
{
static bit Stop_A_Flag = 0; //停止鬧鈴的標志位
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) //當功能鍵的數(shù)值為零時進行讀取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) //判斷是否進入鬧鈴
{
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) //進入鬧鈴的設(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) //進入鬧鐘報響
{
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;//鬧鈴標志位置一 停止鬧鈴 如果想再次進入鬧鈴重新設(shè)定
Write_12864_DS1302_Constant();
}
}
}
IRR_Work(); //紅外工作
}
/**************************************************
函數(shù)名: Key_Scan()
函數(shù)功能: 各種各樣的標志位掃描與按鍵掃描
入口參數(shù): 無
出口參數(shù): 無
備 注: 主要被主函數(shù)調(diào)用以便讓整個工程工作
主要用于各種各樣的按鍵掃描于標志位掃描
***************************************************/
void Key_Scan()
{
if(g_Uart_Work_Flag == 0) //判斷是否進入串口中斷
{
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(); //提示進行串口處理
}
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載地址:
http://m.raoushi.com/bbs/dpj-86188-1.html
作者:
348652560
時間:
2017-6-15 17:50
非常好
作者:
wjwjwjwj
時間:
2017-6-16 08:05
看了下,感覺非常好
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1