欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 全新STC12C5A60S2單片機+LCD19264大屏萬年歷農歷生肖節氣節日顯示+鬧鐘+溫濕度+臺燈 [打印本頁]

作者: 1860774xxxx    時間: 2022-12-26 15:24
標題: 全新STC12C5A60S2單片機+LCD19264大屏萬年歷農歷生肖節氣節日顯示+鬧鐘+溫濕度+臺燈
本帖最后由 1860774xxxx 于 2022-12-26 15:28 編輯

這是舊版 退役拆解了



新版


與電路圖所示 共設置4個按鍵 短按開關臺燈 加減鍵調光 長按進入菜單

1.臺燈 加入PCA PWM 調光
STC12C5A60S2的PCA PWM非常好用 設置簡單無極調節 0-255可調




2.加入3種時鐘字體
宋體字體


數碼字體


創意字體



3.新增平潤年顯示 其他生肖農歷公歷節氣





4.新增功能菜單


時鐘設置


2組鬧鐘設置 采用軟開關 并保全到EEPROM 調電數據不丟失


設置
時鐘字體 宋體 數碼 創意 3種選擇 默認 數碼
按鍵燈 全亮模式 單點模式 2種選擇 默認 全亮模式
背光 10秒 20秒 30秒 1分鐘 2分鐘 3分鐘 可調 時間到自動關閉背光燈 默認30秒
按鍵聲  默開
整點報時 起點6 7 8 9 10可調  止點18 19 20 21 22 23可調  默認 開 8時-21時  意思是8時到21時范圍內報時 否則免打擾以上數據設置后保全到EEPROM 數據不會丟失





下載前須知
固件版本在v7.1及以上可用



部分程序
#include <STC12C5A60S2.H>   //此文件中定義了單片機的一些特殊功能寄存器
#define uchar unsigned char //宏定義無符號字符形數據類型進行聲明定義 定義名稱uchar 所占位數8位 范圍0~255
#define uint unsigned int   //宏定義無符號整形數據類型進行聲明定義 定義名稱uint 所占位數16位 范圍0~65535

#include "Delay.h"         //全局通用延時頭文件
#include "LCD_ks0108ZK.h"  //屏字庫 適合ks0108控制器的12864屏/19264屏
#include "LCD_ks0108.h"    //屏驅動 適合ks0108控制器的12864屏/19264屏
#include "ds3231.h"        //ds3231時鐘芯片驅動
#include "rqzh.h"          //日期轉換
#include "dht11.h"         //DHT11濕度溫度驅動
#include "STC12C5A60S2_EEPROM.h" //STC12C5A60S2內部存儲驅動

/*按鍵與按鍵燈*/
sbit anjian1LED=P2^7;  //按鍵燈1
sbit anjian1=P2^6;     //臺燈/設置按鍵
sbit anjian2LED=P2^5;  //按鍵燈2
sbit anjian2=P2^4;     //加按鍵
sbit anjian3LED=P2^3;  //按鍵燈3
sbit anjian3=P2^2;     //減按鍵
sbit anjian4LED=P2^1;  //按鍵燈4
sbit anjian4=P2^0;     //提出/關閉響鈴按鍵

sbit fmq=P3^2;         //有源蜂鳴器
sbit beiguangLED=P3^3; //屏幕背光


bit taidengLED; //臺燈開關變量 =1開燈 =0關燈
bit anjian1sf,anjian2_3sf,anjian4sf; //用于按鍵釋放標記
bit qingpingsf;   //用于清屏釋放標記
bit fb_shizwz,fb_nzwz,fb_szwz; //功能菜單頁面下的"時鐘""鬧鐘""設置"文字反白標記 =1反白 =0取消反白
bit fbs_nian,fbs_yue,fbs_ri,fbs_shi,fbs_fen,fbs_miao; //設置時鐘時 年月日時分秒反白 =1反白 =0取消反白
bit nz1_kg,nz2_kg,nz1_xl,nz2_xl;  //鬧鐘1 鬧鐘2 開關變量 =1鬧鐘開 =0鬧鐘關  鬧鐘1 鬧鐘2 響鈴變量 =1響鈴 =0不響鈴
bit fb_nz1_shi,fb_nz1_fen,fb_nz1_kg,fb_nz2_shi,fb_nz2_fen,fb_nz2_kg;      //設置鬧鐘時分開關反白 =1反白 =0取消反白
bit xianshiyemian; //顯示頁面變量 =0時鐘頁面 =1功能一級菜單頁面
bit zdbs_kg,fb_zdbs_kg,zdbs;  //整點報時開關 =1開 =0關,反白整點報時開關   =1反白 =0取消反白
bit fb_zdbs_qd,fb_zdbs_zd; //整點報時 起點止點反白  =1反白 =0取消反白
bit fb_bgsc;  //背光時長反白 =1反白 =0取消反白
bit jdms,fb_jdms; //鍵燈模式變量 鍵燈模式反白  =1反白 =0取消反白
bit fb_shizhongzt; //時鐘字體變量反白=1反白 =0取消反白
bit anjiansy_kg,fb_anjiansy; //按鍵聲音開關 =1開 =0關  按鍵聲音反白標志   =1反白 =0取消反白 按鍵聲音釋放

uchar LED_mun;    //臺燈調光變量
uchar shizhongzt; //時鐘字體變量
uchar shezhixx;  //設置選項變量
uchar zdbs_qd,zdbs_zd;   //整點報時允許范圍 起點止點變量
uchar shezhiym;    //二級菜單頁面 =0鐘時設置頁面 =1鬧鐘設置頁面 =2設置頁面
uchar anjianjsbl;  //按鍵計數變量 實現長按短按功能
uchar gncdym;      //功能菜單頁面選項變量
uchar shizhongsz;  //時鐘設置選項變量
uchar nz1_shi,nz1_fen,nz2_shi,nz2_fen,nz1_fen_Stop,nz2_fen_Stop; //鬧鐘1 鬧鐘2 變量
uchar naozhongsz;  //鬧鐘設置選項變量  
uchar pingbgjs,miaojs,miaomun,bgsc; //用于屏背光自動控制定時計數標志

uchar naozhonglx,anjians; //鬧鐘鈴響計數變量   按鍵計數變量

/*按鍵功能函數*/
void anjiangn()
{
        /*按鍵1臺燈與功能按鍵 */
        if(anjian1==0) //判斷按鍵是否按下
        {
                if(jdms==1)anjian1LED=0; //按鍵燈1單點模式
               
                if(xianshiyemian==0) //以下操作在時鐘頁面有效
                {
                        if(anjianjsbl<=100)anjianjsbl++; //給按鍵計數變量設置最大范圍值 范圍內anjianjsbl++  否則停止anjianjsbl++
                        if(anjianjsbl>=20) //長按約大于3秒
                        {
                                if(qingpingsf==0)ClearDisplay(); //LCD清屏
                          xianshiyemian=1;  //進入功能菜單頁面
                                qingpingsf=1;    //釋放LCD清屏 防止一直清屏         
                        }
                }
                else  //xianshiyemian=1已進入功能菜單頁面  以下操作在功能菜單頁面有效
                {        
                        if(anjian1sf==0) //給與限制條件 每次操作只允許運行一次
                        {
                                if(shezhiym==0) //功能菜單頁面
                                {
                                  switch(gncdym) //功能菜單頁面選項變量
          {
                  case 1:if(qingpingsf==0)ClearDisplay();shezhiym=1;qingpingsf=1;break;  //進入二級菜單時鐘設置頁面
                                          case 2:if(qingpingsf==0)ClearDisplay();shezhiym=2;qingpingsf=1;break;  //進入二級菜單鬧鐘設置頁面
                                          case 3:if(qingpingsf==0)ClearDisplay();shezhiym=3;qingpingsf=1;break;  //進入二級菜單設置頁面
                                  }
                          }
                                else if(shezhiym==1) //進入二級菜單時鐘設置頁面
                                {
                                  shizhongsz++; //時鐘 秒分時日月年 設置選項變量
                                        if(shizhongsz==7)shizhongsz=1;        
                                }
                          else if(shezhiym==2) //進入二級菜單鬧鐘設置頁面
                                {
                                        naozhongsz++; //鬧鐘1分時開關 鬧鐘2分時開關 設置選項變量
                                        if(naozhongsz==7)naozhongsz=1;
                                }
                                else //進入二級菜單設置頁面
                                {
                                        shezhixx++;  //設置選項變量
                                  if(shezhixx==8)shezhixx=1;
                                }
                                       
                          anjian1sf=1; //完成操作按鍵1釋放 等待下一次執行
                        }                                 
          }        
        }
        else  //短按開關臺燈
        {
                if(xianshiyemian==0) //以下操作在時鐘頁面有效
                {
            if(anjianjsbl>0&&anjianjsbl<15)taidengLED=~taidengLED; //當時間小于約3秒 臺燈開關
            anjianjsbl=0;  //完成操作按鍵計數復位清零
                }  
                if(jdms==1)anjian1LED=1;   //松手關閉按鍵1燈
                qingpingsf=0;  //完成操作清屏釋放標記復位清零
                anjian1sf=0;   //完成操作按鍵1釋放標記復位清零
        }
         
        
        /*按鍵2加與按鍵3減按鍵*/
        if(anjian2==0||anjian3==0) //判斷按鍵是否按下
        {
                if(jdms==1)
                {
                        if(anjian2==0)anjian2LED=0; //按鍵燈2單點模式
                        if(anjian3==0)anjian3LED=0; //按鍵燈3單點模式
                }
               
        
                if(xianshiyemian==0)
                {
                        if(anjian2==0)
                        {
                          if(LED_mun<255)LED_mun=LED_mun+5; //臺燈調光加
                                Delay_ms(10); //延時一段時間 如果還沒松開 繼續加減
                        }
                        if(anjian3==0)
                        {
                          if(LED_mun>10)LED_mun=LED_mun-5;  //臺燈調光減
                                Delay_ms(10); //延時一段時間 如果還沒松開 繼續加減
                        }
                }
                else //以下操作在功能菜單頁面有效
                {
                  if(shezhiym==0) //功能菜單頁面
                  {
                          if(anjian2_3sf==0) //給與限制條件 每次操作只允許運行一次
                          {
                                  if(anjian2==0)if(gncdym<3)gncdym=gncdym+1;else(gncdym=1); //功能菜單頁面 功能菜單頁面選項變量 ++
                                        if(anjian3==0)if(gncdym>1)gncdym=gncdym-1;else(gncdym=3); //功能菜單頁面 功能菜單頁面選項變量 --
                                  anjian2_3sf=1; //完成操作按鍵釋放
                          }
                  }
                  else if(shezhiym==1) //時鐘設置頁面
                  {
                                switch(shizhongsz)
        {
                case 1:if(anjian2==0)if(miao<59)miao=miao+1;else(miao=0); //調整秒+
                                               if(anjian3==0)if(miao>0)miao=miao-1;else(miao=59); //調整秒-1
                                               Ds3231Init();  //停止時鐘 調整時鐘數據寫入ds3231
                                   Delay_ms(200); //延時一段時間 如果還沒松開 繼續加減
                                               break;  
                                       
                case 2:if(anjian2==0)if(fen<59)fen=fen+1;else(fen=0); //調整分+
                                               if(anjian3==0)if(fen>0)fen=fen-1;else(fen=59); //調整分-1
                                               Ds3231Init();  //停止時鐘 調整時鐘數據寫入ds3231
                                   Delay_ms(200); //延時一段時間 如果還沒松開 繼續加減
                                               break;
                                       
                                        case 3:if(anjian2==0)if(shi<23)shi=shi+1;else(shi=0);  //調整時+1
                                               if(anjian3==0)if(shi>0)shi=shi-1;else(shi=23); //調整時-1
                                               Ds3231Init();  //停止時鐘 調整時鐘數據寫入ds3231
                                   Delay_ms(200); //延時一段時間 如果還沒松開 繼續加減
                                               break;
                                       
                                        case 4:if(yue==2)
                                               {
                                                                         if(nian_r==0) //閏年
                                                                         {
                                                                                      /*...如果是閏年2月只有29天.....*/
                                                                           if(anjian2==0)if(ri<29)ri=ri+1;else(ri=1);        //調整日+1
                                                                                 if(anjian3==0)if(ri>1)ri=ri-1;else(ri=29);        //調整日-1
                                                                         }
                                                                         else //平年
                                                                         {
                                                                                     /*....如果是平年2月只有28天.....*/
                                                                           if(anjian2==0)if(ri<28)ri=ri+1;else(ri=1);        //調整日+1
                                                                                 if(anjian3==0)if(ri>1)ri=ri-1;else(ri=28);        //調整日-1
                                                                         }
                                                                 }
                                                                 else
                                                                 {
                                                                         if(yue_dx==0) //大月
                                                                         {
                                                                                     /*1,3,5,7,8,10,12月有31天 為大月*/
                                                                           if(anjian2==0)if(ri<31)ri=ri+1;else(ri=1); //調整日+1
                                                                                 if(anjian3==0)if(ri>1)ri=ri-1;else(ri=31); //調整日-1
                                                                         }
                                                                         else //小月
                                                                         {     /*4,6,9,11月只有30天 為小月*/
                                                                           if(anjian2==0)if(ri<30)ri=ri+1;else(ri=1);        //調整日+1
                                                                                 if(anjian3==0)if(ri>1)ri=ri-1;else(ri=30);        //調整日-1
                                                                         }
                                                                 }
                                                                 rilijs();      //日歷自動計算函數
                                               Ds3231Init();  //停止時鐘 調整時鐘數據寫入ds3231
                                   Delay_ms(200); //延時一段時間 如果還沒松開 繼續加減
                                               break;
                                                                 
                                        case 5:if(anjian2==0)if(yue<12)yue=yue+1;else(yue=1);         //調整月+1
                                               if(anjian3==0)if(yue>1)yue=yue-1;else(yue=12); //調整月-1
                                                                 rilijs();      //日歷自動計算函數
                                               Ds3231Init();  //停止時鐘 調整時鐘數據寫入ds3231
                                   Delay_ms(200); //延時一段時間 如果還沒松開 繼續加減
                                               break;               
                                                                 
          case 6:if(anjian2==0)if(nian<99)nian=nian+1;else(nian=0);  //調整年+1
                                               if(anjian3==0)if(nian>0)nian=nian-1;else(nian=99); //調整年-1
                                                                 rilijs();      //日歷自動計算函數
                                               Ds3231Init();  //停止時鐘 調整時鐘數據寫入ds3231
                                   Delay_ms(200); //延時一段時間 如果還沒松開 繼續加減
                                               break;         
        }
            }
                        else if(shezhiym==2) //鬧鐘設置頁面
                        {
                                switch(naozhongsz)
                                {
                                  case 1:if(anjian2==0)nz1_kg=1; //調整鬧鐘1開
                                               if(anjian3==0)nz1_kg=0; //調整鬧鐘1關
                                               break;
          case 2:if(anjian2==0)if(nz1_fen<59)nz1_fen=nz1_fen+1;else(nz1_fen=0); //調整鬧鐘1分+
                                               if(anjian3==0)if(nz1_fen>0)nz1_fen=nz1_fen-1;else(nz1_fen=59); //調整鬧鐘1分-
                                   Delay_ms(200); //延時一段時間 如果還沒松開 繼續加減
                                               break;        
          case 3:if(anjian2==0)if(nz1_shi<23)nz1_shi=nz1_shi+1;else(nz1_shi=0); //調整鬧鐘1時+
                                               if(anjian3==0)if(nz1_shi>0)nz1_shi=nz1_shi-1;else(nz1_shi=23); //調整鬧鐘1時-
                                   Delay_ms(200); //延時一段時間 如果還沒松開 繼續加減
                                               break;        
          case 4:if(anjian2==0)nz2_kg=1; //調整鬧鐘2開
                                               if(anjian3==0)nz2_kg=0; //調整鬧鐘2關
                                               break;
          case 5:if(anjian2==0)if(nz2_fen<59)nz2_fen=nz2_fen+1;else(nz2_fen=0); //調整鬧鐘2分+
                                               if(anjian3==0)if(nz2_fen>0)nz2_fen=nz2_fen-1;else(nz2_fen=59); //調整鬧鐘2分-
                                   Delay_ms(200); //延時一段時間 如果還沒松開 繼續加減
                                               break;        
          case 6:if(anjian2==0)if(nz2_shi<23)nz2_shi=nz2_shi+1;else(nz2_shi=0); //調整鬧鐘2時+
                                               if(anjian3==0)if(nz2_shi>0)nz2_shi=nz2_shi-1;else(nz2_shi=23); //調整鬧鐘2時-
                                   Delay_ms(200); //延時一段時間 如果還沒松開 繼續加減
                                               break;                                       
                                }   
                        }
                        else //設置選項頁面
                        {
                          switch(shezhixx)
                                {
                                                /*時鐘字體設置*/
                                  case 1:if(anjian2==0)
                                               {
                                                                         if(anjian2_3sf==0) //給與限制條件 每次操作只允許運行一次
                                                                         {
                                                                           if(shizhongzt<2)shizhongzt=shizhongzt+1;else(shizhongzt=0); //時鐘字體選項+
                                                                                 anjian2_3sf=1; //完成操作按鍵釋放
                                                                         }
                                                                 }
                                               
                                                                 if(anjian3==0)
                                               {
                                                                         if(anjian2_3sf==0) //給與限制條件 每次操作只允許運行一次
                                                                         {
                                                                           if(shizhongzt>0)shizhongzt=shizhongzt-1;else(shizhongzt=2); //時鐘字體選項-
                                                                                 anjian2_3sf=1; //完成操作按鍵釋放
                                                                         }
                                                                 }
                                               break;
                                                                 
                                                /*鍵燈模式設置*/
                                  case 2:if(anjian2==0)jdms=1; //單點模式
                                               if(anjian3==0)jdms=0; //全亮模式
                                               break;
                                       
                                              /*背光時長設置*/
                                        case 3:if(anjian2==0)
                                               {
                                                                         if(anjian2_3sf==0) //給與限制條件 每次操作只允許運行一次
                                                                         {
                                                                           if(bgsc<5)bgsc=bgsc+1;else(bgsc=0); //時鐘字體選項+
                                                                                 anjian2_3sf=1; //完成操作按鍵釋放
                                                                         }
                                                                 }
                                                                 if(anjian3==0)
                                               {
                                                                         if(anjian2_3sf==0) //給與限制條件 每次操作只允許運行一次
                                                                         {
                                                                           if(bgsc>0)bgsc=bgsc-1;else(bgsc=5); //時鐘字體選項-
                                                                                 anjian2_3sf=1; //完成操作按鍵釋放
                                                                         }
                                                                 }
                                               break;
                                                                 
                                                                         /*按鍵聲音設置*/
                                  case 4:if(anjian2==0)anjiansy_kg=1; //按鍵聲音開
                                               if(anjian3==0)anjiansy_kg=0; //按鍵聲音關
                                               break;
                                                                 
                                                                                            /*整點報時聲音設置*/
                                                                      /*允許時間 起點6-11可調  止點18-23可調*/
                                  case 5:if(anjian2==0)zdbs_kg=1; //整點報時開
                                               if(anjian3==0)zdbs_kg=0; //整點報時關
                                               break;
                                                                 
                                        case 6:if(anjian2==0)if(zdbs_qd<11)zdbs_qd=zdbs_qd+1; //調整整點報時起點+
                                               if(anjian3==0)if(zdbs_qd>6)zdbs_qd=zdbs_qd-1;//調整整點報時起點-
                                   Delay_ms(200); //延時一段時間 如果還沒松開 繼續加減
                                               break;        
                                                                 
                                        case 7:if(anjian2==0)if(zdbs_zd<23)zdbs_zd=zdbs_zd+1; //調整整點報時止點+
                                               if(anjian3==0)if(zdbs_zd>18)zdbs_zd=zdbs_zd-1;//調整整點報時止點-
                                   Delay_ms(200); //延時一段時間 如果還沒松開 繼續加減
                                               break;
                                }
                        }
                        
    }                 
         }
         else
         {
                 if(jdms==1)
                 {
                   anjian2LED=1;   //松手關閉按鍵2燈
                   anjian3LED=1;   //松手關閉按鍵3燈
                 }
                 anjian2_3sf=0; //完成操作按鍵2與按鍵3釋放標記復位清零 等待下一次執行
         }
        
         
        /*按鍵4返回與關閉響鈴按鍵*/
        if(anjian4==0) //判斷按鍵是否按下
        {
          if(jdms==1)anjian4LED=0; //按鍵燈4單點模式
                        
                if(anjian4sf==0) //給與限制條件 每次操作只允許運行一次
                {   
                        if(xianshiyemian==0) //在時鐘頁面中操作
                        {
                                if(nz1_xl==1||nz2_xl==1) //鬧鐘1或者2正在響鈴時
                                {
                                         nz1_xl=0;  //按下關閉鬧鐘1響鈴
                                         nz2_xl=0;  //按下關閉鬧鐘2響鈴
                                }
                        }
                        else  //在功能菜單頁面中操作
                        {
                                if(shezhiym==0) //返回時鐘頁面處理
                                {
                                         /*返回時鐘頁面前操作*/
                                        fb_shizwz=0;    //時鐘文字取消反白
                                        fb_nzwz=0;      //鬧鐘文字取消反白
                                        fb_szwz=0;      //設置文字取消反白
                                        gncdym=0;       //功能菜單頁面選項變量復位清零
                                  ClearDisplay(); //LCD清屏
                                        /*完成操作*/
                                  xianshiyemian=0; //返回時鐘頁面
                                }
                                else  //返回功能菜單頁面處理
                                {
                                /*返回功能菜單頁面前操作*/
                                        if(shezhiym==1&&shizhongsz!=0)shizhongsz=0;   //在退出時鐘設置選項變量復位清零
                                  if((shezhiym==2&&naozhongsz!=0)||(shezhiym==3&&shezhixx!=0)) //在退出鬧鐘設置與設置選項頁面前 把設置好的數據保存到EEPROM1扇區
                                        {
                                                IapEraseSector(EEPROM_0);         //EEPROM_1扇區擦除 地址0x0000-0x01ff
                              IapProgramByte(EEPROM_0,nz1_kg);  //存儲鬧鐘1開關狀態到EEPROM_0 地址0x0000
                                          IapProgramByte(EEPROM_1,nz1_fen); //存儲鬧鐘1分到EEPROM_1 地址0x0001
                                          IapProgramByte(EEPROM_2,nz1_shi); //存儲鬧鐘1時到EEPROM_2 地址0x0002
                                                        
                                          IapProgramByte(EEPROM_3,nz2_kg);  //存儲鬧鐘2開關狀態到EEPROM_3 地址0x0003
                                                IapProgramByte(EEPROM_4,nz2_fen); //存儲鬧鐘2分到EEPROM_4 地址0x0004
                                          IapProgramByte(EEPROM_5,nz2_shi); //存儲鬧鐘2時到EEPROM_5 地址0x0005
                                                        
                                          IapProgramByte(EEPROM_6,shizhongzt);    //存儲時鐘字體到EEPROM_6 地址0x0006
                                                IapProgramByte(EEPROM_7,jdms);          //存儲鍵燈模式到EEPROM_7 地址0x0007
                                                IapProgramByte(EEPROM_8,bgsc);          //存儲背光時長到EEPROM_8 地址0x0008
                                                IapProgramByte(EEPROM_9,anjiansy_kg);   //存儲按鍵聲音到EEPROM_9 地址0x0009
                                                IapProgramByte(EEPROM_0a,zdbs_kg);      //存儲整點報時開關到EEPROM_0a 地址0x000a
                                                IapProgramByte(EEPROM_0b,zdbs_qd);      //存儲整點報時起點到EEPROM_0b 地址0x000b
                                                IapProgramByte(EEPROM_0c,zdbs_zd);      //存儲整點報時止點到EEPROM_0c 地址0x000c
                                                        
                                                naozhongsz=0;   //鬧鐘設置選項變量復位清零
                                                shezhixx=0; //設置選項變量復位清零
                                        }
                                                
                                        ClearDisplay(); //LCD清屏
                                        /*完成操作*/
                                        shezhiym=0; //返回功能菜單頁面  
                                }
                        }
                        anjian4sf=1;  //完成操作按鍵4釋放
                }
        }
        else
        {
                anjian4sf=0; //完成操作按鍵4釋放標記復位清零 等待下一次執行
                if(jdms==1)anjian4LED=1;
        }
}

/*EEPROM讀出初始化*/
void EEPROM_AInit()
{
        /*方式一*/
        /*從未擦寫個的EEPROM數據是空白的 讀出也是錯誤的!*/
  /*需要判斷EEPROM==0xff數據空白 如果數據是空白跳過EEPROM讀出*/
        if(IapReadByte(EEPROM_0)!=0xff)nz1_kg=IapReadByte(EEPROM_0);  //讀出EEPROM_0 鬧鐘1開關狀態 地址0x0000
        if(IapReadByte(EEPROM_1)!=0xff)nz1_fen=IapReadByte(EEPROM_1); //讀出EEPROM_1 鬧鐘1分數據 地址0x0001
        if(IapReadByte(EEPROM_2)!=0xff)nz1_shi=IapReadByte(EEPROM_2); //讀出EEPROM_2 鬧鐘1時數據 地址0x0002
  if(IapReadByte(EEPROM_3)!=0xff)nz2_kg=IapReadByte(EEPROM_3);  //讀出EEPROM_3 鬧鐘2開關狀態 地址0x0003
        if(IapReadByte(EEPROM_4)!=0xff)nz2_fen=IapReadByte(EEPROM_4); //讀出EEPROM_4 鬧鐘2分數據 地址0x0004
        if(IapReadByte(EEPROM_5)!=0xff)nz2_shi=IapReadByte(EEPROM_5); //讀出EEPROM_5 鬧鐘1時數據 地址0x0005
        
        /*方式二*/
        /*從未擦寫個的EEPROM數據是空白 需要變量重新初始化 也可以做為出廠默認*/
        /*用戶自行設置后出廠默認會直接跳過*/
        shizhongzt=IapReadByte(EEPROM_6);             //讀出EEPROM_6 時鐘字體狀態 地址0x0006
        if(IapReadByte(EEPROM_6)==0xff)shizhongzt=1;  //判斷時鐘字體數據是否空白 如果空白重新初始化 默認數碼字體 否則數據不是空白直接跳過
        
        jdms=IapReadByte(EEPROM_7);             //讀出EEPROM_7 鍵燈模式狀態 地址0x0007
        if(IapReadByte(EEPROM_7)==0xff)jdms=0;  //判斷鍵燈模式數據是否空白 如果空白重新初始化 默認全亮 否則數據不是空白直接跳過
        
        bgsc=IapReadByte(EEPROM_8);             //讀出EEPROM_8 背光時長狀態 地址0x0008
        if(IapReadByte(EEPROM_8)==0xff)bgsc=2;  //判斷背光時長數據是否空白 如果空白重新初始化 默認30秒 否則數據不是空白直接跳過
        
        anjiansy_kg=IapReadByte(EEPROM_9);             //讀出EEPROM_9 按鍵聲音開關狀態 地址0x0009
        if(IapReadByte(EEPROM_9)==0xff)anjiansy_kg=1;  //判斷按鍵聲音數據是否空白 如果空白重新初始化 默認開 否則數據不是空白直接跳過
        
        zdbs_kg=IapReadByte(EEPROM_0a);             //讀出EEPROM_0a 整點報時開關狀態 地址0x000a
        if(IapReadByte(EEPROM_0a)==0xff)zdbs_kg=1;  //判斷整點報時開關數據是否空白 如果空白重新初始化 默認開 否則數據不是空白直接跳過
        
        zdbs_qd=IapReadByte(EEPROM_0b);             //讀出EEPROM_0b 整點報時開關狀態 地址0x000b
        if(IapReadByte(EEPROM_0b)==0xff)zdbs_qd=8;  //判斷整點報時起點數據是否空白 如果空白重新初始化 默認起點8時 否則數據不是空白直接跳過
        
        zdbs_zd=IapReadByte(EEPROM_0c);             //讀出EEPROM_0c 整點報時開關狀態 地址0x000c
        if(IapReadByte(EEPROM_0c)==0xff)zdbs_zd=21;  //判斷整點報時止點數據是否空白 如果空白重新初始化 默認止點21時 否則數據不是空白直接跳過
}


/*背光時長 作為開機設置*/
void beiguangsc()
{
        switch(bgsc)
        {
                case 0:miaomun=10;break;   //10秒設置
                case 1:miaomun=20;break;   //20秒設置
                case 2:miaomun=30;break;   //30秒設置
                case 3:miaomun=60;break;   //1分鐘設置
                case 4:miaomun=120;break;  //2分鐘設置
                case 5:miaomun=180;break;  //3分鐘設置
        }
}

/*背光控制*/
void beiguangkz()
{
        if(taidengLED==1||anjian1==0||anjian2==0||anjian3==0||anjian4==0||nz1_xl==1||nz2_xl==1) //背光跟隨臺燈 如果臺燈開著 那么背光就一直亮 與任意鍵開屏背光
        {
          beiguangLED=0;  //開背光
                TR0=0;          //關閉定時器0
                pingbgjs=0;     //定時計數清零
    miaojs=0;                    //定時計數清零
        }
        else  //否則臺燈關閉下或者沒有按鍵操作下
        {
                if(beiguangLED==0)TR0=1;  // 打開定時器0 開始定時器計時
                else  //時間到了 背光關閉后
                {
                        TR0=0;      //關閉定時器0
                        pingbgjs=0; //定時計數清零
                        miaojs=0;   //定時計數清零
                }        
        }
}


/*鍵燈全亮模式  .....單點模式放在按鍵里操作*/
void jiandengmoshi()
{
        if(beiguangLED==0) //鍵燈跟隨背光 背光開鍵燈亮 背光關鍵燈滅
        {
                if(jdms==0) //如果是全亮模式
    {                        
                        anjian1LED=0; //按鍵燈1亮
                  anjian2LED=0; //按鍵燈2亮
                  anjian3LED=0; //按鍵燈3亮
                  anjian4LED=0; //按鍵燈4亮
                }
               
        }
        else //如果背光關了 按鍵燈也跟著關閉
        {
          anjian1LED=1; //按鍵燈1滅
                anjian2LED=1; //按鍵燈2滅
                anjian3LED=1; //按鍵燈3滅
                anjian4LED=1; //按鍵燈4滅
        }
}


/*DS3231時鐘初始化*/
void DS3231_szcqh()
{        
        uint niana;
        
        Ds3231ReadTime();  //讀取ds3231時間數據
        niana=nian+2000;
        
  if(niana<2020||yue==0||ri==0)  //若讀取的月日數據都為0則執行以下程序 否則直接跳過此程序
  {
          nian=22;  //初始化年 22年
    yue=01;   //初始化月 1月
    ri=01;    //初始化日 1日
    zhou=06;  //初始化周 周6
    shi=12;   //初始化時 12時
    fen=00;   //初始化分 00分
    miao=00;  //初始化秒 00秒
                rilijs();     //日歷自動計算函數
                Ds3231Init(); //把初始化好后的時間數據寫入Ds3231時鐘芯片
  }
}

/*鬧鐘對比*/
void naozhong()
{
        if(nz1_kg==1||nz2_kg==1)
        {
    /*鬧鐘開關圖標顯示*/
          if(nz1_kg==1&&nz2_kg==0)Disp_16x16(8,0,0,ZM5_16x16[5]);      //如果鬧鐘1打開 顯示鬧鐘1圖標
    else if(nz1_kg==0&&nz2_kg==1)Disp_16x16(8,0,0,ZM5_16x16[6]); //如果鬧鐘2打開 顯示鬧鐘2圖標
    else if(nz1_kg==1&&nz2_kg==1)Disp_16x16(8,0,0,ZM5_16x16[7]); //如果鬧鐘1 鬧鐘2都打開 顯示鬧鐘1/2圖標
          else Disp_16x16(8,0,0,ZM5_16x16[0]); //否則如果鬧鐘1或鬧鐘2關閉 取消顯示鬧鐘圖標

          /*鬧鐘1對比*/
          if(nz1_kg==1) //如果鬧鐘1打開 開始鬧鐘對比
          {
            if(shi==nz1_shi&&fen==nz1_fen&&miao==0)
                  {
                          nz1_fen_Stop=nz1_fen+30;  //限制約束響鈴時間條件變量 若不手動關閉響鈴 30分后自動關閉響鈴
                          nz1_xl=1;   //時間到鬧鐘1響鈴
                  }
               
                  if(nz1_xl==1,shi==nz1_shi&&fen==nz1_fen_Stop)nz1_xl=0;  //限制約束響鈴時間到關閉響鈴 最多只允許響鈴30分鐘
          }
        
          /*鬧鐘2對比*/
          if(nz2_kg==1) //如果鬧鐘1打開 開始鬧鐘對比
          {
            if(shi==nz2_shi&&fen==nz2_fen&&miao==0)
                  {
                          nz2_fen_Stop=nz2_fen+30;  //限制約束響鈴時間條件變量 若不手動關閉響鈴 30分后自動關閉響鈴
                          nz2_xl=1; //時間到鬧鐘2響鈴
                  }
               
                  if(nz2_xl==1,shi==nz2_shi&&fen==nz2_fen_Stop)nz2_xl=0; //限制約束響鈴時間到關閉響鈴 最多只允許響鈴30分鐘
          }
  }
}


     /*整點報時*/
/*允許時間 起點6-11可調  止點18-23可調*/
/*在允許時間報時 否則不報時*/
/*例如:設置允許時間為8-21 可允許8時到21時內報時 */
void zhengdianbaoshi()
{
  if(zdbs_kg==1) //判斷整點報時是否打開
        {
          if(shi>=zdbs_qd&&shi<=zdbs_zd) //判斷報時時間是否在許可范圍
                {
                  if(fen==0&&miao==0) //如果時間=00分 =00秒 開啟報時
                         {
                                if(nz1_xl!=1||nz2_xl!=1)zdbs=1; //鬧鐘響時不允許報時
                        }
                        else(zdbs=0);   
                }
        }
}

/*蜂鳴器協調 采用定時器1控制蜂鳴器響應時間與次數  包括鬧鐘鬧鐘鈴響 整點報時聲音 按鍵聲音*/
void fmqxt()
{
  /*鬧鐘1與鬧鐘2蜂鳴器響鈴程序 滴滴滴~ 3聲*/
          if(zdbs==1||nz1_xl==1||nz2_xl==1||anjiansy_kg==1&&(anjian1==0||anjian2==0||anjian3==0||anjian4==0))
          {
                        if(zdbs==1)fmq=0; //報時響聲時長1秒 不需要定時器計數
            TR1=1; //開定時器1
          }
                else
                {
                        fmq=1; //關閉響鈴后 蜂鳴器停止響應
                        TR1=0; //關定時器1
                        naozhonglx=0;
                        anjians=0;
                }
}

/**********************************
*函數名稱:PCA_Init(void)
*輸入    :無
*輸出    :無
*調用說明:外部調用
*函數說明:PWM模塊初始化
***********************************/
void PCA_Init()
{
        CCON = 0;                                //PCA初始化
        CMOD = 0x00;                        //空閑時不計數,不產生中斷,時鐘源為Sysclk/12,PWM頻率大約為4KHz
        CL = 0x00;                                //PCA低8位清零
        CH = 0x00;                                //PCA高8位清零

        CCAPM0 = 0x42;                        //8位PWM模式,無中斷
        //CCAP0H = 0;                        //PWM0占空比(調節此處值調節PWM占空比 0~255)
        //CCAP0L = 0;                        //PWM0占空比(調節此處值調節PWM占空比0~255)
        
        CR = 1;                                        //啟動PCA計數器
}

/*臺燈控制程序*/
void taidengkz()
{
        if(taidengLED==1) //開臺燈
        {
    CCAP0H=LED_mun; //LED_mun變量 10——255 范圍可調
          CCAP0L=LED_mun;        
                if(xianshiyemian==0)
                {
                        Disp_8x16(11,0,0,ZM_8x16[LED_mun%1000/100]);
                        Disp_8x16(12,0,0,ZM_8x16[LED_mun%100/10]);
                        Disp_8x16(13,0,0,ZM_8x16[LED_mun%10]);
                        Disp_16x16(7,0,0,ZM5_16x16[4]); //如果臺燈打開顯示臺燈圖標
                }
        }
        else //關臺燈
        {
                CCAP0H=0;  //當CCAP0H=0時 已經關閉了
          CCAP0L=0;
          if(xianshiyemian==0)
                {
                        Disp_8x16(11,0,0,ZM_8x16[15]);
                        Disp_8x16(12,0,0,ZM_8x16[15]);
                        Disp_8x16(13,0,0,ZM_8x16[15]);
                        Disp_16x16(7,0,0,ZM5_16x16[0]);  //否則如果臺燈關閉不顯示臺燈圖標
                }
        }

}

/*主函數*/
void main()
{
        TMOD=0x11;      //定時器0與定時器1打開
  TH0=0x0D1;
  TL0=0x20;       //給定時器0賦初值,定時1ms
        TH1=0x0D1;
  TL1=0x20;       //給定時器1賦初值,定時1ms
  ET0=1;          //打開定時器0中斷允許
  TR0=1;          //打開定時器0
        ET1=1;          //打開定時器1中斷允許
  //TR1=1;          //打開定時器1
        EA=1;           //打開總中斷
        
        PCA_Init();     //PCA PWM初始化
        LED_mun=255;    //默認臺燈最亮
        DS3231_szcqh(); //DS3231時鐘初始化
        beiguangLED=0;  //剛通電屏背光開
        EEPROM_AInit(); //EEPROM讀出初始化
        beiguangsc();   //開機讀出背光時長
        LCD_AInit();    //LCD屏初始化
        ClearDisplay(); //LCD清屏
        while(1)
        {
               
                fmqxt();           //運行蜂鳴器協調程序
                anjiangn();        //運行按鍵功能程序
                beiguangkz();      //運行背光控制程序
                jiandengmoshi();   //運行鍵燈全亮模式程序
                zhengdianbaoshi(); //運行整點報時程序
                taidengkz();       //運行臺燈控制程序
               
               

                if(xianshiyemian==0) //xianshiyemian=0時鐘頁面
                {
                        Ds3231ReadTime(); //不在時鐘設置下運行時鐘數據
                        naozhong();       //運行鬧鐘對比 只允許在時間頁面運行
                        
                        /*年月日顯示*/
                  Disp_8x16(0,0,0,ZM_8x16[2]);       //
            Disp_8x16(1,0,0,ZM_8x16[0]);       //
                  Disp_8x16(2,0,0,ZM_8x16[nian/10]); //
                  Disp_8x16(3,0,0,ZM_8x16[nian%10]); //年
                  Disp_8x16(4,0,0,ZM_8x16[10]);      //-
                  Disp_8x16(5,0,0,ZM_8x16[yue/10]);  //
                  Disp_8x16(6,0,0,ZM_8x16[yue%10]);  //月
                  Disp_8x16(7,0,0,ZM_8x16[10]);      //-
                  Disp_8x16(8,0,0,ZM_8x16[ri/10]);   //
                  Disp_8x16(9,0,0,ZM_8x16[ri%10]);   //日
               
                        
                        /*時分秒顯示*/
                        switch(shizhongzt) //時鐘字體選擇
                        {
                          case 0:Disp_16x32(0,8,0,ZM_16x32[shi/10]);  //     宋體
                     Disp_16x32(1,8,0,ZM_16x32[shi%10]);  //時
                           Disp_16x32(2,8,0,ZM_16x32[10]);      //:
                           Disp_16x32(3,8,0,ZM_16x32[fen/10]);  //
                     Disp_16x32(4,8,0,ZM_16x32[fen%10]);  //分
                           Disp_16x32(5,8,0,ZM_16x32[10]);      //:
                     Disp_16x32(6,8,0,ZM_16x32[miao/10]); //
                     Disp_16x32(7,8,0,ZM_16x32[miao%10]); //秒*/
                                       break;
                                 
                                case 1:Disp_16x32(0,8,0,ZM1_16x32[shi/10]);  //    數碼
                     Disp_16x32(1,8,0,ZM1_16x32[shi%10]);  //時
                           Disp_16x32(2,8,0,ZM1_16x32[10]);      //:
                           Disp_16x32(3,8,0,ZM1_16x32[fen/10]);  //
                     Disp_16x32(4,8,0,ZM1_16x32[fen%10]);  //分
                           Disp_16x32(5,8,0,ZM1_16x32[10]);      //:
                     Disp_16x32(6,8,0,ZM1_16x32[miao/10]); //
                     Disp_16x32(7,8,0,ZM1_16x32[miao%10]); //秒*/
                                       break;
                                
                                case 2:Disp_16x32(0,8,0,ZM2_16x32[shi/10]);  //    創意
                     Disp_16x32(1,8,0,ZM2_16x32[shi%10]);  //時
                           Disp_16x32(2,8,0,ZM2_16x32[10]);      //:
                           Disp_16x32(3,8,0,ZM2_16x32[fen/10]);  //
                     Disp_16x32(4,8,0,ZM2_16x32[fen%10]);  //分
                           Disp_16x32(5,8,0,ZM2_16x32[10]);      //:
                     Disp_16x32(6,8,0,ZM2_16x32[miao/10]); //
                     Disp_16x32(7,8,0,ZM2_16x32[miao%10]); //秒*/
                                       break;
                        }
                        
                  
               
                        
                        /*星期顯示*/
                        Disp_16x16(5,3,0,ZM_16x16[18]); //星
                  Disp_16x16(6,3,0,ZM_16x16[19]); //期
      switch(zhou)
      {
              case 1:Disp_16x16(7,3,0,ZM_16x16[1]);break;  //星期一
              case 2:Disp_16x16(7,3,0,ZM_16x16[2]);break;  //星期二
              case 3:Disp_16x16(7,3,0,ZM_16x16[3]);break;  //星期三
              case 4:Disp_16x16(7,3,0,ZM_16x16[4]);break;  //星期四
              case 5:Disp_16x16(7,3,0,ZM_16x16[5]);break;  //星期五
              case 6:Disp_16x16(7,3,0,ZM_16x16[6]);break;  //星期六
              case 7:Disp_16x16(7,3,0,ZM_16x16[17]);break; //星期天
      }
                        
                        nonglixs();//顯示農歷
                        
                        pingrunjs();  //閏年平年計算
                        gljr();       //公歷節日計算
                        nonglijrjs(); //農歷節日計算
                        jiqijs();     //節氣計算
                        
                        if(gljrjs!=0&&nljs==0&&jieqijs==0) //如果當天只有公歷節日 輪番顯示生肖公歷節日顯示  
                        {
                                if(miao>=0&&miao<30)shengxiaoxs(); //顯示生肖及閏平年
              if(miao>=30&&miao<=59)gljxs();     //公歷節日顯示
                        }
                        else if(gljrjs==0&&nljs!=0&&jieqijs==0) //如果當天只有農歷節日  輪番顯示生肖農歷節日
                        {
                          if(miao>=0&&miao<30)shengxiaoxs();  //顯示生肖及閏平年
              if(miao>=30&&miao<=59)nonglijrxs(); //顯示農歷節日
                        }
                        else if(gljrjs==0&&nljs==0&&jieqijs!=0) //如果當天只有節氣 輪番顯示生肖節氣
                        {
                          if(miao>=0&&miao<30)shengxiaoxs();  //顯示生肖及閏平年
              if(miao>=30&&miao<=59)jieqixs();    //顯示節氣
                        }
                        
                        else if(gljrjs!=0&&nljs!=0&&jieqijs==0) //如果當天同時有公歷節日和農歷節日 輪番顯示生肖公歷節日農歷節日
                        {
                          if(miao>=0&&miao<20)shengxiaoxs();  //顯示生肖及閏平年
              if(miao>=20&&miao<40)gljxs();       //顯示公歷節日
                                if(miao>=40&&miao<=59)nonglijrxs(); //顯示農歷節日
                        }
                  else if(gljrjs!=0&&nljs==0&&jieqijs!=0) //如果當天同時有公歷節日和節氣 輪番顯示生肖公歷節日節氣
                        {
                          if(miao>=0&&miao<20)shengxiaoxs();  //顯示生肖及閏平年
              if(miao>=20&&miao<40)gljxs();       //顯示公歷節日
                                if(miao>=40&&miao<=59)jieqixs();    //顯示節氣
                        }
                        else if(gljrjs==0&&nljs!=0&&jieqijs!=0) //如果當天同時有農歷節日和節氣 輪番顯示生肖農歷節日節氣
                        {
                          if(miao>=0&&miao<20)shengxiaoxs();  //顯示生肖及閏平年
              if(miao>=20&&miao<40)nonglijrxs();  //顯示農歷節日
                                if(miao>=40&&miao<=59)jieqixs();    //顯示節氣
                        }
                        else if(jieqijs!=0&&nljs!=0&&gljrjs!=0) //如果當天同時有公歷節日農歷節日生肖 輪番顯示生肖公歷節日農歷節日節氣
            {
                    if(miao>=0&&miao<15)shengxiaoxs(); //顯示生肖及閏平年
                    if(miao>=15&&miao<30)gljxs();      //公歷節日顯示
                    if(miao>=30&&miao<45)nonglijrxs(); //農歷節日顯示
                    if(miao>=45&&miao<=59)jieqixs();   //顯示節氣
            }
            else shengxiaoxs(); //如果沒有其他節日只顯示生肖及閏平年
                        
                        
                        /*溫濕度顯示*/
                        DHT11_receive();          //讀取濕度溫度函數
            Disp_8x16(18,1,0,ZM_8x16[11]);
            Disp_8x16(20,1,0,ZM_8x16[RH/10]);      //濕度
            Disp_8x16(21,1,0,ZM_8x16[RH%10]);
            Disp_8x16(22,1,0,ZM_8x16[12]);
               
            Disp_8x16(18,2,0,ZM_8x16[13]);
            Disp_8x16(20,2,0,ZM_8x16[TH/10]);      //溫度
            Disp_8x16(21,2,0,ZM_8x16[TH%10]);
            Disp_8x16(22,2,0,ZM_8x16[14]);        
                        
                        if(nz1_xl==0&&nz2_xl==0) //如果沒有鬧鐘鈴響 顯示小動物
                        {
                    if(miao>=0&&miao<5)
                          {
                                  Disp_16x16(9,0,0,ZM5_16x16[1]);        
                                  Disp_16x16(10,0,0,ZM5_16x16[0]);
                            Disp_16x16(11,0,0,ZM5_16x16[0]);
                          }
                    else if(miao>=5&&miao<10)
                    {
                            Disp_16x16(9,0,0,ZM5_16x16[0]);
                            Disp_16x16(10,0,0,ZM5_16x16[2]);
                                  Disp_16x16(11,0,0,ZM5_16x16[0]);
                    }
                    else if(miao>=10&&miao<15)
                    {
                                  Disp_16x16(9,0,0,ZM5_16x16[0]);
                      Disp_16x16(10,0,0,ZM5_16x16[0]);
                            Disp_16x16(11,0,0,ZM5_16x16[3]);
                    }
                    else if(miao>=15&&miao<20)
                          {
                                  Disp_16x16(9,0,0,ZM5_16x16[0]);        
                                  Disp_16x16(10,0,0,ZM5_16x16[0]);
                            Disp_16x16(11,0,0,ZM5_16x16[0]);
                          }
                    else
                    {
                            Disp_16x16(9,0,0,ZM5_16x16[1]);
                      Disp_16x16(10,0,0,ZM5_16x16[2]);
                            Disp_16x16(11,0,0,ZM5_16x16[3]);
                    }
                        }
                        else      //有鬧鐘鈴響 則顯示當前鬧鐘
                        {
                                if(nz1_xl==1)
                                {
                                  Disp_8x16(18,0,0,ZM1_8x16[nz1_shi/10]);   //
                      Disp_8x16(19,0,0,ZM1_8x16[nz1_shi%10]);  //鬧鐘1時
                Disp_8x16(20,0,0,ZM1_8x16[11]);                   //:
                      Disp_8x16(21,0,0,ZM1_8x16[nz1_fen/10]);  //
                      Disp_8x16(22,0,0,ZM1_8x16[nz1_fen%10]);  //鬧鐘1分
                                        Disp_8x16(23,0,0,ZM1_8x16[12]);
                                }
                                
                                if(nz2_xl==1)
                                {
                                  Disp_8x16(18,0,0,ZM1_8x16[nz2_shi/10]);   //
                      Disp_8x16(19,0,0,ZM1_8x16[nz2_shi%10]);  //鬧鐘2時
                Disp_8x16(20,0,0,ZM1_8x16[11]);                   //:
                      Disp_8x16(21,0,0,ZM1_8x16[nz2_fen/10]);  //
                      Disp_8x16(22,0,0,ZM1_8x16[nz2_fen%10]);  //鬧鐘2分
                                        Disp_8x16(23,0,0,ZM1_8x16[12]);
                                }
                        
                        }
                }
                else//xianshiyemian=1已進入功能菜單頁面
                {
                        if(nz1_xl==1||nz2_xl==1) //如果已進入功能菜單頁面 則強行關閉鬧鐘響鈴
                        {
                          nz1_xl=0;
                          nz2_xl=0;
                        }
                        if(shezhiym==0) //功能菜單頁面
                        {
                                Ds3231ReadTime(); //不在時鐘設置下運行時鐘數據
                                
                          Disp_64x48(0,0,0,ZM_64x48[0]);  //顯示時鐘圖標
                    Disp_64x48(1,0,0,ZM_64x48[1]);  //顯示鬧鐘圖標
              Disp_64x48(2,0,0,ZM_64x48[2]);  //顯示設置圖標
                        
                          if(gncdym==1)fb_shizwz=1;else(fb_shizwz=0); //=1反白 =0取消反白
                    Disp_16x16(1,3,fb_shizwz,ZM5_16x16[10]);     //顯示文字"時"
                    Disp_16x16(2,3,fb_shizwz,ZM5_16x16[12]);     //顯示文字"鐘"
                        
                          if(gncdym==2)fb_nzwz=1;else(fb_nzwz=0);     //=1反白 =0取消反白
                    Disp_16x16(5,3,fb_nzwz,ZM5_16x16[11]);       //顯示文字"鬧"
                    Disp_16x16(6,3,fb_nzwz,ZM5_16x16[12]);       //顯示文字"鐘"
                        
                          if(gncdym==3)fb_szwz=1;else(fb_szwz=0);     //=1反白 =0取消反白
                    Disp_16x16(9,3,fb_szwz,ZM5_16x16[13]);       //顯示文字"設"
                    Disp_16x16(10,3,fb_szwz,ZM5_16x16[14]);      //顯示文字"置"
                        }
                        
                        else if(shezhiym==1) //shezhiym=0已進入時鐘設置頁面
                  {
                                //當進入時鐘設置后 沒按下加減鍵時鐘依然保持運行
                                //否則按下加減鍵設置時鐘生效 寫入Ds3231時鐘芯片 松開按鍵后恢復運行時鐘數據
                                if(shizhongsz==0)Ds3231ReadTime(); //不在時鐘設置下運行時鐘數據
                                else
                                {
                                  if(anjian2!=0&&anjian3!=0)Ds3231ReadTime(); //不在時鐘設置下運行時鐘數據
                                }
                                       
                    Disp_16x16(5,0,0,ZM5_16x16[10]);   //顯示文字"時"
                    Disp_16x16(6,0,0,ZM5_16x16[12]);   //顯示文字"鐘"
                                
                                Disp_16x16(2,2,0,ZM5_16x16[15]);   //顯示文字"時"
                    Disp_16x16(3,2,0,ZM5_16x16[16]);   //顯示文字"間"
                                Disp_16x16(2,3,0,ZM5_16x16[17]);   //顯示文字"日"
                    Disp_16x16(3,3,0,ZM5_16x16[18]);   //顯示文字"期"
                                
                                if(shizhongsz==3)fbs_shi=1;else(fbs_shi=0);   //=1反白 =0取消反白
                                Disp_8x16(9,2,fbs_shi,ZM1_8x16[shi/10]);      //
              Disp_8x16(10,2,fbs_shi,ZM1_8x16[shi%10]);     //時
                                
                    Disp_8x16(11,2,0,ZM1_8x16[11]);               //:
                                
                                if(shizhongsz==2)fbs_fen=1;else(fbs_fen=0);   //=1反白 =0取消反白
                    Disp_8x16(12,2,fbs_fen,ZM1_8x16[fen/10]);     //
              Disp_8x16(13,2,fbs_fen,ZM1_8x16[fen%10]);     //分
                                
                    Disp_8x16(14,2,0,ZM1_8x16[11]);               //:
                                
                                if(shizhongsz==1)fbs_miao=1;else(fbs_miao=0); //=1反白 =0取消反白
              Disp_8x16(15,2,fbs_miao,ZM1_8x16[miao/10]);   //
              Disp_8x16(16,2,fbs_miao,ZM1_8x16[miao%10]);   //秒*/
                                
                                if(shizhongsz==6)fbs_nian=1;else(fbs_nian=0); //=1反白 =0取消反白
                                Disp_8x16(9,3,fbs_nian,ZM1_8x16[2]);          //
              Disp_8x16(10,3,fbs_nian,ZM1_8x16[0]);         //
                    Disp_8x16(11,3,fbs_nian,ZM1_8x16[nian/10]);   //
                    Disp_8x16(12,3,fbs_nian,ZM1_8x16[nian%10]);   //年
                                
                    Disp_8x16(13,3,0,ZM1_8x16[10]);               //-
                                
                                if(shizhongsz==5)fbs_yue=1;else(fbs_yue=0);   //=1反白 =0取消反白
                    Disp_8x16(14,3,fbs_yue,ZM1_8x16[yue/10]);     //
                    Disp_8x16(15,3,fbs_yue,ZM1_8x16[yue%10]);     //月
                                
                    Disp_8x16(16,3,0,ZM1_8x16[10]);               //-
                                
                                if(shizhongsz==4)fbs_ri=1;else(fbs_ri=0);     //=1反白 =0取消反白
                    Disp_8x16(17,3,fbs_ri,ZM1_8x16[ri/10]);       //
                    Disp_8x16(18,3,fbs_ri,ZM1_8x16[ri%10]);       //日
                        }
                                
                        
                  else if(shezhiym==2) //shezhiym=1已進入鬧鐘設置頁面
                  {
                                Ds3231ReadTime(); //不在時鐘設置下運行時鐘數據
                                
                    Disp_16x16(5,0,0,ZM5_16x16[11]);   //顯示文字"鬧"
                    Disp_16x16(6,0,0,ZM5_16x16[12]);   //顯示文字"鐘"
                                
                                /*顯示時鐘*/
                                Disp_8x16(8,1,0,ZM1_8x16[shi/10]);     //
              Disp_8x16(9,1,0,ZM1_8x16[shi%10]);     //時        
                    Disp_8x16(10,1,0,ZM1_8x16[11]);        //:
                    Disp_8x16(11,1,0,ZM1_8x16[fen/10]);    //
              Disp_8x16(12,1,0,ZM1_8x16[fen%10]);    //分
                    Disp_8x16(13,1,0,ZM1_8x16[11]);        //:
              Disp_8x16(14,1,0,ZM1_8x16[miao/10]);   //
              Disp_8x16(15,1,0,ZM1_8x16[miao%10]);   //秒*/
                                
                                /*鬧鐘1*/
                                Disp_16x16(2,2,0,ZM5_16x16[19]);   //顯示文字"鬧"
                    Disp_16x16(3,2,0,ZM5_16x16[20]);   //顯示文字"鐘"
                                Disp_8x16(8,2,0,ZM1_8x16[1]);     //顯示數字"1"
                                
                                if(naozhongsz==3)fb_nz1_shi=1;else(fb_nz1_shi=0);
                                Disp_8x16(10,2,fb_nz1_shi,ZM1_8x16[nz1_shi/10]);   //
                    Disp_8x16(11,2,fb_nz1_shi,ZM1_8x16[nz1_shi%10]);  //鬧鐘時
                                
              Disp_8x16(12,2,0,ZM1_8x16[11]);                   //:
                                
                                if(naozhongsz==2)fb_nz1_fen=1;else(fb_nz1_fen=0);
                    Disp_8x16(13,2,fb_nz1_fen,ZM1_8x16[nz1_fen/10]);  //
                    Disp_8x16(14,2,fb_nz1_fen,ZM1_8x16[nz1_fen%10]);  //鬧鐘分
                                
                                if(naozhongsz==1)fb_nz1_kg=1;else(fb_nz1_kg=0);
                                if(nz1_kg==1)Disp_16x16(8,2,fb_nz1_kg,ZM5_16x16[21]); //如果鬧鐘1打開 顯示文字"開"
                                else Disp_16x16(8,2,fb_nz1_kg,ZM5_16x16[22]);  //如果鬧鐘1關閉 顯示文字"關"
                                       
                                 
                                
                                /*鬧鐘2*/
                                Disp_16x16(2,3,0,ZM5_16x16[19]);   //顯示文字"鬧"
                    Disp_16x16(3,3,0,ZM5_16x16[20]);   //顯示文字"鐘"
                                Disp_8x16(8,3,0,ZM1_8x16[2]);     //顯示數字"2"
                                
                                if(naozhongsz==6)fb_nz2_shi=1;else(fb_nz2_shi=0); //=1反白 =0取消反白
                                Disp_8x16(10,3,fb_nz2_shi,ZM1_8x16[nz2_shi/10]);  //
                    Disp_8x16(11,3,fb_nz2_shi,ZM1_8x16[nz2_shi%10]);  //鬧鐘時
                                
              Disp_8x16(12,3,0,ZM1_8x16[11]);                   //:
                                
                                if(naozhongsz==5)fb_nz2_fen=1;else(fb_nz2_fen=0);  //=1反白 =0取消反白
                    Disp_8x16(13,3,fb_nz2_fen,ZM1_8x16[nz2_fen/10]);   //
                    Disp_8x16(14,3,fb_nz2_fen,ZM1_8x16[nz2_fen%10]);  //鬧鐘分
                                
                                if(naozhongsz==4)fb_nz2_kg=1;else(fb_nz2_kg=0);        //=1反白 =0取消反白
                                if(nz2_kg==1)Disp_16x16(8,3,fb_nz2_kg,ZM5_16x16[21]); //如果鬧鐘2打開 顯示文字"開"
                                else Disp_16x16(8,3,fb_nz2_kg,ZM5_16x16[22]);  //如果鬧鐘2關閉 顯示文字"關"
                  }
                        
                  else //shezhiym=2已進入設置頁面
                  {
                                Ds3231ReadTime(); //不在時鐘設置下運行時鐘數據
                                
                    Disp_16x16(5,0,0,ZM5_16x16[13]);   //顯示文字"設"
                    Disp_16x16(6,0,0,ZM5_16x16[14]);   //顯示文字"置"
                                
                                /*時鐘字體設置*/
                                Disp_16x16(0,1,0,ZM5_16x16[23]);   //顯示文字"字"
                                Disp_16x16(1,1,0,ZM5_16x16[24]);   //顯示文字"體"
                                Disp_16x16(2,1,0,ZM5_16x16[8]);   //顯示單向箭頭圖標
                                
                                if(shezhixx==1)fb_shizhongzt=1;else(fb_shizhongzt=0);//=1反白 =0取消反白
                                switch(shizhongzt)
        {
                case 0:Disp_16x16(3,1,fb_shizhongzt,ZM5_16x16[25]);Disp_16x16(4,1,fb_shizhongzt,ZM5_16x16[24]); break; //顯示文字"宋體"
                case 1:Disp_16x16(3,1,fb_shizhongzt,ZM5_16x16[26]);Disp_16x16(4,1,fb_shizhongzt,ZM5_16x16[27]);break;  //顯示文字"數碼"
                case 2:Disp_16x16(3,1,fb_shizhongzt,ZM5_16x16[28]);Disp_16x16(4,1,fb_shizhongzt,ZM5_16x16[29]);break;  //顯示文字"創意"
        }
                                
                                
                                /*按鍵燈設置*/
                                Disp_16x16(7,1,0,ZM5_16x16[30]);   //顯示文字"鍵"
                                Disp_16x16(8,1,0,ZM5_16x16[31]);   //顯示文字"燈"
                                Disp_16x16(9,1,0,ZM5_16x16[8]);    //顯示單向箭頭圖標
                                
                                if(shezhixx==2)fb_jdms=1;else(fb_jdms=0); //=1反白 =0取消反白
                                if(jdms==0)
                                {
                                        Disp_16x16(10,1,fb_jdms,ZM5_16x16[32]);   //顯示文字"全"
                                  Disp_16x16(11,1,fb_jdms,ZM5_16x16[33]);   //顯示文字"亮"
                                }
                                else
                                {
                                        Disp_16x16(10,1,fb_jdms,ZM5_16x16[34]);   //顯示文字"單"
                                  Disp_16x16(11,1,fb_jdms,ZM5_16x16[35]);   //顯示文字"點"
                                }
                                
                                
                                
                                /*背光時長*/
                                Disp_16x16(0,2,0,ZM5_16x16[36]);   //顯示文字"背"
                                Disp_16x16(1,2,0,ZM5_16x16[37]);   //顯示文字"光"
                                Disp_16x16(2,2,0,ZM5_16x16[8]);   //顯示單向箭頭圖標
                                
                                if(shezhixx==3)fb_bgsc=1;else(fb_bgsc=0); //=1反白 =0取消反白
                                switch(bgsc)
        {
                case 0:Disp_8x16(6,2,fb_bgsc,ZM1_8x16[1]);  //10秒設置
                                               Disp_8x16(7,2,fb_bgsc,ZM1_8x16[0]);
                                               Disp_16x16(4,2,0,ZM5_16x16[38]);
                                               Disp_16x16(5,2,0,ZM5_16x16[20]);
                                               miaomun=10;
                                               break;
                                               
                case 1:Disp_8x16(6,2,fb_bgsc,ZM1_8x16[2]);  //20秒設置
                                               Disp_8x16(7,2,fb_bgsc,ZM1_8x16[0]);
                                               Disp_16x16(4,2,0,ZM5_16x16[38]);
                                               Disp_16x16(5,2,0,ZM5_16x16[20]);
                                               miaomun=20;
                                               break;
                                       
                case 2:Disp_8x16(6,2,fb_bgsc,ZM1_8x16[3]);  //30秒設置
                                               Disp_8x16(7,2,fb_bgsc,ZM1_8x16[0]);
                                               Disp_16x16(4,2,0,ZM5_16x16[38]);
                                               Disp_16x16(5,2,0,ZM5_16x16[20]);
                                               miaomun=30;
                                               break;
                                       
                case 3:Disp_8x16(6,2,0,ZM1_8x16[12]);      //1分鐘設置
                                               Disp_8x16(7,2,fb_bgsc,ZM1_8x16[1]);
                                               Disp_16x16(4,2,0,ZM5_16x16[39]);
                                                                 Disp_16x16(5,2,0,ZM5_16x16[20]);
                                                                 miaomun=60;
                                                                 break;
                                                                 
                case 4:Disp_8x16(6,2,0,ZM1_8x16[12]);      //2分鐘設置
                                               Disp_8x16(7,2,fb_bgsc,ZM1_8x16[2]);
                                                                 Disp_16x16(4,2,0,ZM5_16x16[39]);
                                                                 Disp_16x16(5,2,0,ZM5_16x16[20]);
                                                                 miaomun=120;
                                                                 break;
                                                                 
                case 5:Disp_8x16(6,2,0,ZM1_8x16[12]);      //3分鐘設置
                                               Disp_8x16(7,2,fb_bgsc,ZM1_8x16[3]);
                                                                 Disp_16x16(4,2,0,ZM5_16x16[39]);
                                                                 Disp_16x16(5,2,0,ZM5_16x16[20]);
                                                                 miaomun=180;
                                                                 break;
        }
                                
                                
                                /*按鍵聲音*/
                                Disp_16x16(7,2,0,ZM5_16x16[30]);   //顯示文字"鍵"
                                Disp_16x16(8,2,0,ZM5_16x16[40]);   //顯示文字"聲"
                                Disp_16x16(9,2,0,ZM5_16x16[8]);    //顯示單向箭頭圖標
                                
                                if(shezhixx==4)fb_anjiansy=1;else(fb_anjiansy=0); //=1反白 =0取消反白
                                if(anjiansy_kg==1)Disp_16x16(10,2,fb_anjiansy,ZM5_16x16[21]); //按鍵聲音開
                                else Disp_16x16(10,2,fb_anjiansy,ZM5_16x16[22]); //按鍵聲音開
                                
                                
                                /*整點報時*/
                                Disp_16x16(0,3,0,ZM5_16x16[41]);   //顯示文字"報"
                                Disp_16x16(1,3,0,ZM5_16x16[15]);   //顯示文字"時"
                                Disp_16x16(2,3,0,ZM5_16x16[8]);    //顯示單向箭頭圖標
                                
                                if(shezhixx==5)fb_zdbs_kg=1;else(fb_zdbs_kg=0); //=1反白 =0取消反白
                                if(zdbs_kg==1)Disp_16x16(3,3,fb_zdbs_kg,ZM5_16x16[21]);   //顯示文字"開"
                                else Disp_16x16(3,3,fb_zdbs_kg,ZM5_16x16[22]);   //顯示文字"關"
                                
                                if(shezhixx==6)fb_zdbs_qd=1;else(fb_zdbs_qd=0); //=1反白 =0取消反白
                                Disp_8x16(10,3,fb_zdbs_qd,ZM1_8x16[zdbs_qd/10]);   //
              Disp_8x16(11,3,fb_zdbs_qd,ZM1_8x16[zdbs_qd%10]);   //整點報時允許范圍 起點
                    Disp_16x16(6,3,0,ZM5_16x16[9]);                    //顯示雙向箭頭圖標   

        if(shezhixx==7)fb_zdbs_zd=1;else(fb_zdbs_zd=0); //=1反白 =0取消反白                                
              Disp_8x16(14,3,fb_zdbs_zd,ZM1_8x16[zdbs_zd/10]);   //
              Disp_8x16(15,3,fb_zdbs_zd,ZM1_8x16[zdbs_zd%10]);   //整點報時允許范圍 止點
                  }        
                }
        }                 
}

/*定時器0函數*/
void Timer0() interrupt 1
{
        TH0=0x0D1;
  TL0=0x20;  //給定時器0賦初值,定時1ms
        
        pingbgjs++;     //當背光打開時定時器開始計數 用于屏背光自動關閉控制
        if(pingbgjs==84)
        {
          miaojs++;
                if(miaojs==miaomun)
                {
                        beiguangLED=1; //
                        TR0=0;         //關閉定時器0
                }
                pingbgjs=0;
        }
}

/*定時器1函數*/
void Timer1() interrupt 3
{
        TH1=0x0D1;
  TL1=0x20;  //給定時器0賦初值,定時1ms        
        
        /*按鍵短聲*/
        if(anjiansy_kg==1&&nz1_xl!=1&&nz2_xl!=1)
        {
                if(anjian1==0||anjian2==0||anjian3==0||anjian4==0)
                {
                  if(anjians<10)anjians++;
                        
                  if(anjians>0&&anjians<5)fmq=0;
                  else fmq=1;
                }
        }
        
        
        /*鬧鐘響聲 滴滴滴~ 3聲*/
        if(nz1_xl==1||nz2_xl==1)
        {
          naozhonglx++;
          if(naozhonglx==100)naozhonglx=0; //鬧鐘鈴響計數變量
        
          if(naozhonglx>0&&naozhonglx<=5)fmq=0;          //第1聲
          else if(naozhonglx>5&&naozhonglx<=10)fmq=1;
        
          else if(naozhonglx>10&&naozhonglx<=15)fmq=0;   //第2聲
    else if(naozhonglx>15&&naozhonglx<=20)fmq=1;

    else if(naozhonglx>20&&naozhonglx<=25)fmq=0;         //第3聲
          else fmq=1;
        }
}


多功能時鐘.zip

287.11 KB, 下載次數: 491, 下載積分: 黑幣 -5


作者: wjq1n    時間: 2022-12-27 08:10
創意字體并不好看吶
作者: 1860774xxxx    時間: 2022-12-27 12:21
wjq1n 發表于 2022-12-27 08:10
創意字體并不好看吶

創意字體是亂畫 你要是有好看的時鐘大字體也分享下貝
作者: mengsiu    時間: 2022-12-29 11:04
wjq1n 發表于 2022-12-27 08:10
創意字體并不好看吶

我也這么認為,創意字體不怎么好看。(僅僅是個人感覺。)
作者: fancunwu    時間: 2022-12-29 14:17
樓主用rx8025T時鐘芯片,比sd3231便宜還精確,才幾毛錢一塊。
作者: 1109    時間: 2022-12-29 17:46
字體我覺得挺好看的,請問樓主有PCB嗎?我想跟風試制一個
作者: 1860774xxxx    時間: 2022-12-29 19:18
fancunwu 發表于 2022-12-29 14:17
樓主用rx8025T時鐘芯片,比sd3231便宜還精確,才幾毛錢一塊。

沒有rx8025 3231是已前買的
作者: 1860774xxxx    時間: 2022-12-29 19:18
1109 發表于 2022-12-29 17:46
字體我覺得挺好看的,請問樓主有PCB嗎?我想跟風試制一個

沒有 自己焊的
作者: mengsiu    時間: 2022-12-30 09:46
fancunwu 發表于 2022-12-29 14:17
樓主用rx8025T時鐘芯片,比sd3231便宜還精確,才幾毛錢一塊。

哪里來的幾毛錢一個?我看到的是幾塊錢一個。
作者: fancunwu    時間: 2022-12-31 10:54
mengsiu 發表于 2022-12-30 09:46
哪里來的幾毛錢一個?我看到的是幾塊錢一個。

某一個寶RX8025T 0.59元一個還包郵
作者: Su_xin    時間: 2023-1-17 15:47

字體我覺得挺好看的,請問樓主有PCB嗎?
作者: 1860774xxxx    時間: 2023-1-17 19:26
Su_xin 發表于 2023-1-17 15:47
字體我覺得挺好看的,請問樓主有PCB嗎?

沒有 自己焊的 有電路圖 PCB板自己做就可以了
作者: 1860774xxxx    時間: 2023-1-17 19:29
沒有PCB 自己焊

IMG_20221226_134541.jpg (676.1 KB, 下載次數: 166)

IMG_20221226_134541.jpg

作者: abslearn    時間: 2023-1-29 17:47
厲害,還是自己焊接的PCB 而且外觀還是不錯,功能挺齊全,贊一個
作者: hrx007zq    時間: 2023-1-30 20:08
LCD要另寫程序嗎?

作者: 1860774xxxx    時間: 2023-1-31 12:21
hrx007zq 發表于 2023-1-30 20:08
LCD要另寫程序嗎?

同型號屏不須要
作者: 老愚童63    時間: 2023-1-31 16:29
LCD屏帶字庫嗎?或者帶字庫與否都可以使用?

作者: gw168sh    時間: 2023-2-1 10:15
樓主你好,請問有替代的屏型號嗎?這個屏買不到呢
作者: 1860774xxxx    時間: 2023-2-1 12:24
老愚童63 發表于 2023-1-31 16:29
LCD屏帶字庫嗎?或者帶字庫與否都可以使用?

不帶 同型號不須修改可用 不型號須自己寫屏程序
作者: 1860774xxxx    時間: 2023-2-1 12:25
gw168sh 發表于 2023-2-1 10:15
樓主你好,請問有替代的屏型號嗎?這個屏買不到呢

可以換 自己改屏程序
作者: 老愚童63    時間: 2023-2-1 14:57
1860774xxxx 發表于 2023-2-1 12:24
不帶 同型號不須修改可用 不型號須自己寫屏程序

謝謝

作者: 1860774xxxx    時間: 2023-2-1 20:58
ks0108控制器的19264屏可用  否則自行改屏程序
作者: an2041    時間: 2023-2-13 19:58
1109 發表于 2022-12-29 17:46
字體我覺得挺好看的,請問樓主有PCB嗎?我想跟風試制一個

我按照電路畫過一個PCB圖下載程序正常顯示。
作者: 15352536450    時間: 2023-3-1 10:02
鬧鐘可以通過加程序變成10個鬧鐘嗎
作者: 15352536450    時間: 2023-3-1 11:16
外殼的鏈接可以分享下嗎

作者: 1860774xxxx    時間: 2023-3-1 12:22
15352536450 發表于 2023-3-1 10:02
鬧鐘可以通過加程序變成10個鬧鐘嗎

當然可以
作者: 1860774xxxx    時間: 2023-3-1 18:52
15352536450 發表于 2023-3-1 11:16
外殼的鏈接可以分享下嗎

abs防水盒網上大把
作者: an2041    時間: 2023-3-8 08:47
Su_xin 發表于 2023-1-17 15:47
字體我覺得挺好看的,請問樓主有PCB嗎?

我這里有個PCB可心用的,基本正常了。

2.JPG (1.19 MB, 下載次數: 178)

2.JPG

1.jpg (245.37 KB, 下載次數: 167)

1.jpg

LCD19264-2.zip

1.59 MB, 下載次數: 89, 下載積分: 黑幣 -5


作者: hnxtlxx    時間: 2023-3-9 07:21
http://www.raoushi.com/bbs/dpj-176725-1.html  這個大佬的字庫很漂亮,大氣
作者: 1860774xxxx    時間: 2023-3-9 12:26
發表于 2023-3-9 07:21


好看 有時間就換一下
作者: 1860774xxxx    時間: 2023-3-12 21:16
試了一下網友提供的時鐘字體 太粗了 與下面的小字很不協調  效果如圖 喜歡的自己換吧

IMG_20230312_210948.jpg (910.7 KB, 下載次數: 161)

IMG_20230312_210948.jpg

作者: sdlyyy    時間: 2023-3-12 23:56
非常感謝,值得好好學習。
作者: stayalone838    時間: 2023-3-29 17:42
an2041 發表于 2023-2-13 19:58
我按照電路畫過一個PCB圖下載程序正常顯示。

大佬可以分享一下你的PCD嗎
作者: 3310mad2    時間: 2023-4-2 21:20
這個程序可以使用89c52嗎?不使用EEPROM的情況下

作者: 1860774xxxx    時間: 2023-4-2 23:01
3310mad2 發表于 2023-4-2 21:20
這個程序可以使用89c52嗎?不使用EEPROM的情況下

不知道哈 自己試試貝 定時器的得改 延遲程序你得改 鬧鐘保存你得改 設置保存你得改 否則用不了 還沒有臺燈調光  還不如買一個12的高速單片機 也不貴
作者: grant    時間: 2023-6-4 17:41
感謝樓主分享,我也跟風試復制一個玩玩
作者: 風信不語    時間: 2023-6-6 01:16
grant 發表于 2023-6-4 17:41
感謝樓主分享,我也跟風試復制一個玩玩

我也是這樣打算的
作者: lym_tb_1    時間: 2023-6-6 06:47
這個外殼專門定做的嗎?
作者: lym_tb_1    時間: 2023-6-6 06:50
這個外殼是專門定做的還是哪里搞得?
作者: lym_tb_1    時間: 2023-6-6 06:56
1860774xxxx 發表于 2023-3-1 18:52
abs防水盒網上大把

哦,看了下還真是,開孔這么整齊要用什么工具啊?
作者: liaoxliang    時間: 2023-6-6 21:08
不錯 不錯  有空了 畫個板 仿制一個玩玩
作者: liaoxliang    時間: 2023-6-6 21:09
lym_tb_1 發表于 2023-6-6 06:56
哦,看了下還真是,開孔這么整齊要用什么工具啊?

電鉆,小臺鉆,電磨 銼刀,
作者: 1860774xxxx    時間: 2023-6-7 12:24
lym_tb_1 發表于 2023-6-6 06:56
哦,看了下還真是,開孔這么整齊要用什么工具啊?

亞克力板刀 據片 圓口用鉆頭
作者: hu_jia168    時間: 2023-6-7 21:00
1860774xxxx 發表于 2023-1-17 19:29
沒有PCB 自己焊

看起來不錯呀
作者: xieruya    時間: 2023-6-12 15:34
樓主程序下載進去了不行
作者: xieruya    時間: 2023-6-12 15:38
下載進去不能用顯示都是亂碼
作者: cjhk    時間: 2023-6-15 13:24
樓主很無私   謝謝你的共享   我這邊也想做一個玩玩
作者: 1860774xxxx    時間: 2023-6-15 19:05
xieruya 發表于 2023-6-12 15:38
下載進去不能用顯示都是亂碼

注意屏幕型號 注意接線
作者: 風鈴草f    時間: 2023-7-13 11:44
an2041 發表于 2023-3-8 08:47
我這里有個PCB可心用的,基本正常了。

有原理圖嗎?
作者: yongquan    時間: 2023-10-5 20:36
感謝分享,自己不會做,學習一下,樓主如何改成可以設置多少鬧鐘的

作者: 1860774xxxx    時間: 2023-10-8 12:15
yongquan 發表于 2023-10-5 20:36
感謝分享,自己不會做,學習一下,樓主如何改成可以設置多少鬧鐘的

你的意思是指設鬧鐘時間還是設多少組鬧鐘?
作者: lmn2005    時間: 2023-10-8 19:12
那幾個按鍵都帶彩色燈的,是怎么實現的?

作者: ayld    時間: 2023-10-8 19:59
不錯!
作者: 1860774xxxx    時間: 2023-10-8 20:24
lmn2005 發表于 2023-10-8 19:12
那幾個按鍵都帶彩色燈的,是怎么實現的?

買啊 某淘大把帶燈按
作者: yongquan    時間: 2023-10-8 22:18
1860774xxxx 發表于 2023-10-8 12:15
你的意思是指設鬧鐘時間還是設多少組鬧鐘?

想設置多組鬧鐘

作者: yongquan    時間: 2023-10-8 22:52
樓主按鈕上的燈是如何實現的

作者: 1860774xxxx    時間: 2023-10-9 12:21
yongquan 發表于 2023-10-8 22:52
樓主按鈕上的燈是如何實現的

帶燈按鍵 買的
作者: 1860774xxxx    時間: 2023-10-9 12:27
yongquan 發表于 2023-10-8 22:18
想設置多組鬧鐘

那就設置多組鬧鐘變量 比如1組nz_shi1 zn_fen1  2組nz_shi2 nz_fen2  每組前級加開關判斷鬧鐘是否開啟 然后每組分開與時鐘時間對比就可以了
作者: yongquan    時間: 2023-10-10 11:06
樓主,我有個藍色12864B
作者: hchi2006    時間: 2023-10-12 20:52
樓主你好!
     下載了軟件 ,用Keil打開代碼就死機,是什么原因呀?
作者: 1860774xxxx    時間: 2023-10-13 06:55
hchi2006 發表于 2023-10-12 20:52
樓主你好!
     下載了軟件 ,用Keil打開代碼就死機,是什么原因呀?

沒聽說過還會這樣的
作者: yongquan    時間: 2023-10-25 10:56
正在學習 ,怎么換成 OLED 屏

作者: 1860774xxxx    時間: 2023-10-25 20:13
yongquan 發表于 2023-10-25 10:56
正在學習 ,怎么換成 OLED 屏

你說的OLED屏是12864吧 這是19264屏 簡單修改肯定是顯示不了 復雜修改還不如從寫代碼
作者: 418854190    時間: 2023-10-25 20:52
hchi2006 發表于 2023-10-12 20:52
樓主你好!
     下載了軟件 ,用Keil打開代碼就死機,是什么原因呀?

把后綴.uvopt的文件刪了在打開
作者: arima    時間: 2023-10-25 22:46
外觀漂亮,內部不咋的。準備也做一個。。。
作者: 1860774xxxx    時間: 2023-10-26 12:26
arima 發表于 2023-10-25 22:46
外觀漂亮,內部不咋的。準備也做一個。。。

一個半個懶得打板
作者: hchi2006    時間: 2023-10-26 14:50
418854190 發表于 2023-10-25 20:52
把后綴.uvopt的文件刪了在打開

謝謝!我試試。
作者: Longan.Wang    時間: 2023-11-1 11:27
看看,51黑有你更精彩!!!
作者: reking8    時間: 2023-11-25 07:34
這盒子哪里弄的
作者: 1860774xxxx    時間: 2023-11-27 22:09
reking8 發表于 2023-11-25 07:34
這盒子哪里弄的

防水盒 網上大把 自己開孔
作者: 太陽黑子1    時間: 2023-11-30 22:56
外殼很好看哦
作者: yw123456789    時間: 2023-12-2 13:41
fancunwu 發表于 2022-12-29 14:17
樓主用rx8025T時鐘芯片,比sd3231便宜還精確,才幾毛錢一塊。

這個一個也7塊多吧
作者: niehaitao    時間: 2023-12-15 21:15
感謝樓主分享,自己搭了一個,用手里的兩個STC12C5A60S2寫進去一直顯示亂碼,以為是壞的,就用手頭的STC89C516重新把程序精簡掉一些,也搞出來了,換了更大的字顯示時間,走了一些彎路,今天把STC12C5A60S2的也搞好了,修改了幾個小地方,樓主里面的程序還要研究一下才能搞明白,論壇確實能學到東西,非常感謝!

51hei圖片_20231215205659.jpg (147.6 KB, 下載次數: 549)

51hei圖片_20231215205659.jpg

51hei圖片_20231215205808.jpg (103.4 KB, 下載次數: 539)

51hei圖片_20231215205808.jpg

51hei圖片_20231215205800.jpg (121.06 KB, 下載次數: 552)

51hei圖片_20231215205800.jpg

51hei圖片_20231215205754.jpg (137.08 KB, 下載次數: 542)

51hei圖片_20231215205754.jpg

51hei圖片_20231215205713.jpg (143.71 KB, 下載次數: 549)

51hei圖片_20231215205713.jpg

51hei圖片_20231215205728.jpg (146.54 KB, 下載次數: 513)

51hei圖片_20231215205728.jpg

51hei圖片_20231215205721.jpg (141.86 KB, 下載次數: 543)

51hei圖片_20231215205721.jpg

51hei圖片_20231215205741.jpg (148.75 KB, 下載次數: 518)

51hei圖片_20231215205741.jpg

作者: 1860774xxxx    時間: 2023-12-16 19:07
niehaitao 發表于 2023-12-15 21:15
感謝樓主分享,自己搭了一個,用手里的兩個STC12C5A60S2寫進去一直顯示亂碼,以為是壞的,就用手頭的STC89C ...

動手能力強 可以可以
作者: dyx811    時間: 2023-12-27 12:44
樓主太用心了!謝謝您的分享!向您學習!
作者: 3253087609ydrq    時間: 2024-5-18 00:41
樓主你好,STC12C5A60S2的P0口一定要加上拉電阻嗎
作者: 1860774xxxx    時間: 2024-5-18 12:21
3253087609ydrq 發表于 2024-5-18 00:41
樓主你好,STC12C5A60S2的P0口一定要加上拉電阻嗎

一定要 10K阻排可以了
作者: maijinzhi    時間: 2024-8-7 16:41
字體我覺得挺好看的,
作者: 巨人卡奧    時間: 2024-8-16 09:27
很漂亮的臺燈,謝謝你,好資料先收藏有空也做一個
作者: QQ6272272    時間: 2024-8-22 21:07
感謝樓主分享,值得好好學習
作者: an2041    時間: 2024-12-14 15:48
Su_xin 發表于 2023-1-17 15:47
字體我覺得挺好看的,請問樓主有PCB嗎?

我之前做了一個PCB。
作者: an2041    時間: 2024-12-14 15:49
Su_xin 發表于 2023-1-17 15:47
字體我覺得挺好看的,請問樓主有PCB嗎?

之前做的一個PCB

STC12C5A-48-19264.zip

576.09 KB, 下載次數: 0, 下載積分: 黑幣 -5


作者: sjh7366    時間: 2024-12-15 13:27
感謝分享,收藏了
作者: gemxie    時間: 2024-12-20 21:02
這是代碼嗎??謝謝分享了
作者: aayon1979    時間: 2025-1-5 21:20
這個資源很好!
作者: fyghgjb    時間: 2025-11-5 23:26
an2041 發表于 2023-3-8 08:47
我這里有個PCB可心用的,基本正常了。

有沒有電路圖文件分享一下,封裝不一樣了
作者: fyghgjb    時間: 2025-11-6 20:41
發表于 2023-12-15 21:15
感謝樓主分享,自己搭了一個,用手里的兩個STC12C5A60S2寫進去一直顯示亂碼,以為是壞的,就用手頭的STC89C ...

程序能不能分享一下




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1