亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2891|回復(fù): 0
收起左側(cè)

單片機萬年歷(含鬧鐘)思路分析及main.c內(nèi)容(只給出main.c內(nèi)容)

[復(fù)制鏈接]
ID:427492 發(fā)表于 2019-7-27 09:09 | 顯示全部樓層 |閱讀模式
/*************************************************************************************
*                   實驗:萬年歷(DS1302、LCD1602、AT24C04的綜合應(yīng)用)
* 步驟及現(xiàn)象:程序下載前,stc-isp選擇IRC頻率:12MHz,程序下載后,LCD1602顯示時間‘第一
*     行:“12:00:00     2”,第二行:"2019.01.01     0" ’。第一行最右側(cè)的2是周二
*     (有效范圍2000~2100年);第二行最右側(cè)0是關(guān)閉鬧鐘,若是1,則開啟鬧鐘,若是2,則
*     第一行顯示鬧鐘時間,而不是時鐘時間。鬧鐘開關(guān)及鬧鐘時間顯示的位選鍵是按鍵5。
*   (1)若設(shè)置時分秒(按鍵1是位選,按鍵2是加,按鍵3是減)。按按鍵1,小時的那兩位每0.5s
*      閃爍一次,表示可以對時的值按按鍵2一次加1或按按鍵3一次減1;再按按鍵1,分鐘的那兩
*      位每0.5s閃爍一次,表示可以對分的值進行加或減;再按按鍵1,秒的那兩位每0.5s閃爍一
*      次,表示可以對秒進行加或減。再按按鍵1或按按鍵0,退出設(shè)置模式。
*   (2)若設(shè)置年月日(按鍵0是位選,按鍵2是加,按鍵3是減)。按按鍵0,年的前兩位每0.5s閃爍
*      一次,表示可以對年前兩位的值進行加或減;再按按鍵0,年的后兩位每0.5s閃爍一次,表示
*      可以對年后兩位的值進行加或減;再按按鍵0,月的兩位每0.5s閃爍一次,表示可以對月的
*      值進行加或減;再按按鍵0,日的兩位每0.5s閃爍一次,表示可以對日的值進行加或減。再
*      按按鍵0或按按鍵1,退出設(shè)置模式。
*   (3)若設(shè)置鬧鐘(按鍵4是位選鍵,按鍵2是加,按鍵3是減)。現(xiàn)象和(1)一樣。(若開啟鬧鐘
*      后,到達鬧鐘時間,鬧鐘鳴叫,而無人去關(guān)閉鬧鐘,則鬧鐘從響應(yīng)時間開始,鳴叫5s后,自
*      動關(guān)閉,下次時間到達后仍會提醒。)鬧鐘初始化時間"12:01:00"
*************************************************************************************/
  1. #include <stc8.h>
  2. #include "ds1302.h"
  3. #include "display.h"
  4. #include "key.h"
  5. #include "settime.h"
  6. #include "timer0.h"
  7. #include "1602.h"
  8. #include "i2c.h"
  9. #include "delay.h"

  10. sbit speaker = P1^3;             // 蜂鳴器
  11. char TIMED[7];                   // 用于接收ds1302中的數(shù)據(jù),轉(zhuǎn)化為有符號類型,便于界限判定
  12. unsigned char alarm[3]={0,1,12}; // 存放鬧鐘時間(12:01:00鬧鐘初始化時間)
  13. unsigned int num2=0;             // 用于無人關(guān)鬧鐘時,計數(shù),當達到5s后,把鬧鐘響應(yīng)標志置0
  14. unsigned char Aflag = 0;         // 鬧鐘開關(guān)及鬧鐘時間顯示標志
  15. bit Hflag=0, Tflag=0, Sflag=0;   // Hflag閃爍標志,Tflag鬧鐘響應(yīng)標志,Sflag清鬧鐘響應(yīng)標志標志
  16. void main()
  17. {
  18.         unsigned char keys, i;
  19.         P1M1=0x00;P1M0=0x08;      // 蜂鳴器配置為強推挽輸出
  20.         speaker = 1;              // 關(guān)閉蜂鳴器
  21.         Ds1302Init();             // ds1302初始化         
  22.         LCD_Init();               // LCD1602初始化
  23.         Timer0Init();             // 定時器0初始化
  24.         for(i=0;i<3;i++)          // 實驗板第一次下載或復(fù)位后,往AT24C04中寫入鬧鐘初始化時間
  25.         {
  26.                 write_24c04(0x00+i,alarm[i]);
  27.                 Delay_ms(1);
  28.         }
  29.         while(1)
  30.         {
  31.                 keys = key_scan();    // 獲取按鍵按鍵值
  32.                 for(i=0;i<3;i++)      // 工作后,讀出已存入AT24C04中的鬧鐘時間
  33.                 {
  34.                         alarm[i] = read_24c04(0x00+i);
  35.                         Delay_ms(1);
  36.                 }
  37.                 settime(keys);                  // 設(shè)置時間及鬧鐘時間函數(shù),keys=0,設(shè)置年月日,keys=1,設(shè)置時分秒,keys=4,設(shè)置鬧鐘時間
  38.                 Display();            // 工作狀態(tài)下1602顯示函數(shù)
  39.                 if(keys == 5)         // 通過按鍵5設(shè)置是否開啟鬧鐘,Aflag=1開啟,Aflag=0關(guān)閉,Aflag=2查看鬧鐘時間
  40.                 {
  41.                         Aflag++;
  42.                         if(Aflag==3)      // Aflag累加到3后,歸零
  43.                                 Aflag = 0;
  44.                 }
  45.                 if((Aflag==1)&&(TIME[0]==alarm[0])&&(TIME[1]==alarm[1])&&(TIME[2]==alarm[2]))
  46.                 {                     // 判斷是否滿足鬧鐘鳴叫條件
  47.                         Tflag = 1;        // 鬧鐘鳴叫標志置1
  48.                         num2 = 0;         // 鳴叫計數(shù)歸零
  49.                         Sflag = 0;        // 清鬧鐘鳴叫標志置0
  50.                 }
  51.                 if((Tflag == 1)&&(Aflag == 1))// 鳴叫需同時滿足鳴叫標志為1、鬧鐘開啟
  52.                 {
  53.                         speaker = ~speaker;
  54.                         if(Sflag == 1)            // 判斷鳴叫時間是否到5s了
  55.                                 Tflag = 0;            // 5s后,鳴叫標志清0
  56.                 }
  57.                 else
  58.                 {
  59.                         speaker = 0;              // 關(guān)閉蜂鳴器
  60.                         Tflag = 0;               
  61.                 }
  62.         }
  63. }
  64. void TM0_Isr() interrupt 1 using 1
  65. {
  66.         static unsigned char num1=0;                  
  67.         num1++;                      // 進一次中斷值加1,5ms進一次中斷
  68.         if(Tflag == 1)               // 到鬧鐘時間后,num2開始累加
  69.         {
  70.                 num2++;
  71.         }
  72.         if(100 == num1)              // 選中要調(diào)整的時間后,代表這個時間的兩位開始每0.5s閃爍一次   
  73.         {
  74.                 num1 = 0;
  75.                 Hflag = ~Hflag;          // 閃爍標志翻轉(zhuǎn)
  76.         }
  77.         if(1000 == num2)             // 鬧鐘無人關(guān)時,鳴叫5s后,自動關(guān)閉鬧鐘,下次時間到時仍會鳴叫      
  78.         {
  79.                 num2 = 0;
  80.                 Sflag = 1;               // 清鬧鐘標志標志置1
  81.         }
  82. }
復(fù)制代碼

[我是在我之前發(fā)的貼子的基礎(chǔ)上,加了鬧鐘和星期,同時把調(diào)整時間選中位改成了閃爍。這個鏈接是我修改前的模板:(想挑戰(zhàn)自己的就拿這個改,看能不能改成我現(xiàn)在這個版本)ds1302用1602實現(xiàn)時間顯示及調(diào)整的單片機代碼
http://www.denmoz.com/bbs/dpj-164635-1.html
(出處: 單片機論壇)

效果圖.jpg

效果圖.jpg

鬧鐘定的時間.jpg

鬧鐘定的時間.jpg

用到的模塊.jpg

用到的模塊.jpg
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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