找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 14171|回复: 84
打印 上一主题 下一主题
收起左侧

全新STC12C5A60S2单片机+LCD19264大屏万年历农历生肖节气节日显示+闹钟+温湿度+台灯

  [复制链接]
跳转到指定楼层
楼主
ID:468209 发表于 2022-12-26 15:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏48 分享淘帖 顶3 踩
回复

使用道具 举报

沙发
ID:1037819 发表于 2022-12-27 08:10 | 只看该作者
创意字体并不好看呐
回复

使用道具 举报

板凳
ID:468209 发表于 2022-12-27 12:21 来自手机 | 只看该作者
wjq1n 发表于 2022-12-27 08:10
创意字体并不好看呐

创意字体是乱画 你要是有好看的时钟大字体也分享下贝
回复

使用道具 举报

地板
ID:16255 发表于 2022-12-29 11:04 | 只看该作者
wjq1n 发表于 2022-12-27 08:10
创意字体并不好看呐

我也这么认为,创意字体不怎么好看。(仅仅是个人感觉。)
回复

使用道具 举报

5#
ID:34298 发表于 2022-12-29 14:17 | 只看该作者
楼主用rx8025T时钟芯片,比sd3231便宜还精确,才几毛钱一块。
回复

使用道具 举报

6#
ID:57414 发表于 2022-12-29 17:46 | 只看该作者
字体我觉得挺好看的,请问楼主有PCB吗?我想跟风试制一个
回复

使用道具 举报

7#
ID:468209 发表于 2022-12-29 19:18 来自手机 | 只看该作者
fancunwu 发表于 2022-12-29 14:17
楼主用rx8025T时钟芯片,比sd3231便宜还精确,才几毛钱一块。

没有rx8025 3231是已前买的
回复

使用道具 举报

8#
ID:468209 发表于 2022-12-29 19:18 来自手机 | 只看该作者
1109 发表于 2022-12-29 17:46
字体我觉得挺好看的,请问楼主有PCB吗?我想跟风试制一个

没有 自己焊的
回复

使用道具 举报

9#
ID:16255 发表于 2022-12-30 09:46 | 只看该作者
fancunwu 发表于 2022-12-29 14:17
楼主用rx8025T时钟芯片,比sd3231便宜还精确,才几毛钱一块。

哪里来的几毛钱一个?我看到的是几块钱一个。
回复

使用道具 举报

10#
ID:34298 发表于 2022-12-31 10:54 | 只看该作者
mengsiu 发表于 2022-12-30 09:46
哪里来的几毛钱一个?我看到的是几块钱一个。

某一个宝RX8025T 0.59元一个还包邮
回复

使用道具 举报

11#
ID:93626 发表于 2023-1-17 15:47 | 只看该作者

字体我觉得挺好看的,请问楼主有PCB吗?
回复

使用道具 举报

12#
ID:468209 发表于 2023-1-17 19:26 来自手机 | 只看该作者
Su_xin 发表于 2023-1-17 15:47
字体我觉得挺好看的,请问楼主有PCB吗?

没有 自己焊的 有电路图 PCB板自己做就可以了
回复

使用道具 举报

13#
ID:468209 发表于 2023-1-17 19:29 来自手机 | 只看该作者
没有PCB 自己焊

IMG_20221226_134541.jpg (676.1 KB, 下载次数: 166)

IMG_20221226_134541.jpg
回复

使用道具 举报

14#
ID:894868 发表于 2023-1-29 17:47 | 只看该作者
厉害,还是自己焊接的PCB 而且外观还是不错,功能挺齐全,赞一个
回复

使用道具 举报

15#
ID:1061818 发表于 2023-1-30 20:08 | 只看该作者
LCD要另写程序吗?
回复

使用道具 举报

16#
ID:468209 发表于 2023-1-31 12:21 来自手机 | 只看该作者
hrx007zq 发表于 2023-1-30 20:08
LCD要另写程序吗?

同型号屏不须要
回复

使用道具 举报

17#
ID:491875 发表于 2023-1-31 16:29 | 只看该作者
LCD屏带字库吗?或者带字库与否都可以使用?
回复

使用道具 举报

18#
ID:512651 发表于 2023-2-1 10:15 | 只看该作者
楼主你好,请问有替代的屏型号吗?这个屏买不到呢
回复

使用道具 举报

19#
ID:468209 发表于 2023-2-1 12:24 来自手机 | 只看该作者
老愚童63 发表于 2023-1-31 16:29
LCD屏带字库吗?或者带字库与否都可以使用?

不带 同型号不须修改可用 不型号须自己写屏程序
回复

使用道具 举报

20#
ID:468209 发表于 2023-2-1 12:25 来自手机 | 只看该作者
gw168sh 发表于 2023-2-1 10:15
楼主你好,请问有替代的屏型号吗?这个屏买不到呢

可以换 自己改屏程序
回复

使用道具 举报

21#
ID:491875 发表于 2023-2-1 14:57 | 只看该作者
1860774xxxx 发表于 2023-2-1 12:24
不带 同型号不须修改可用 不型号须自己写屏程序

谢谢
回复

使用道具 举报

22#
ID:468209 发表于 2023-2-1 20:58 来自手机 | 只看该作者
ks0108控制器的19264屏可用  否则自行改屏程序
回复

使用道具 举报

23#
ID:45164 发表于 2023-2-13 19:58 | 只看该作者
1109 发表于 2022-12-29 17:46
字体我觉得挺好看的,请问楼主有PCB吗?我想跟风试制一个

我按照电路画过一个PCB图下载程序正常显示。
回复

使用道具 举报

24#
ID:269960 发表于 2023-3-1 10:02 | 只看该作者
闹钟可以通过加程序变成10个闹钟吗
回复

使用道具 举报

25#
ID:269960 发表于 2023-3-1 11:16 | 只看该作者
外壳的链接可以分享下吗
回复

使用道具 举报

26#
ID:468209 发表于 2023-3-1 12:22 来自手机 | 只看该作者
15352536450 发表于 2023-3-1 10:02
闹钟可以通过加程序变成10个闹钟吗

当然可以
回复

使用道具 举报

27#
ID:468209 发表于 2023-3-1 18:52 来自手机 | 只看该作者
15352536450 发表于 2023-3-1 11:16
外壳的链接可以分享下吗

abs防水盒网上大把
回复

使用道具 举报

28#
ID:45164 发表于 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

回复

使用道具 举报

29#
ID:529213 发表于 2023-3-9 07:21 来自手机 | 只看该作者
http://www.51hei.com/bbs/dpj-176725-1.html  这个大佬的字库很漂亮,大气
回复

使用道具 举报

30#
ID:468209 发表于 2023-3-9 12:26 来自手机 | 只看该作者
发表于 2023-3-9 07:21


好看 有时间就换一下
回复

使用道具 举报

31#
ID:468209 发表于 2023-3-12 21:16 来自手机 | 只看该作者
试了一下网友提供的时钟字体 太粗了 与下面的小字很不协调  效果如图 喜欢的自己换吧

IMG_20230312_210948.jpg (910.7 KB, 下载次数: 161)

IMG_20230312_210948.jpg
回复

使用道具 举报

32#
ID:824664 发表于 2023-3-12 23:56 | 只看该作者
非常感谢,值得好好学习。
回复

使用道具 举报

33#
ID:1054240 发表于 2023-3-29 17:42 | 只看该作者
an2041 发表于 2023-2-13 19:58
我按照电路画过一个PCB图下载程序正常显示。

大佬可以分享一下你的PCD吗
回复

使用道具 举报

34#
ID:106272 发表于 2023-4-2 21:20 | 只看该作者
这个程序可以使用89c52吗?不使用EEPROM的情况下
回复

使用道具 举报

35#
ID:468209 发表于 2023-4-2 23:01 来自手机 | 只看该作者
3310mad2 发表于 2023-4-2 21:20
这个程序可以使用89c52吗?不使用EEPROM的情况下

不知道哈 自己试试贝 定时器的得改 延迟程序你得改 闹钟保存你得改 设置保存你得改 否则用不了 还没有台灯调光  还不如买一个12的高速单片机 也不贵
回复

使用道具 举报

36#
ID:287832 发表于 2023-6-4 17:41 | 只看该作者
感谢楼主分享,我也跟风试复制一个玩玩
回复

使用道具 举报

37#
ID:1082284 发表于 2023-6-6 01:16 来自手机 | 只看该作者
grant 发表于 2023-6-4 17:41
感谢楼主分享,我也跟风试复制一个玩玩

我也是这样打算的
回复

使用道具 举报

38#
ID:94253 发表于 2023-6-6 06:47 | 只看该作者
这个外壳专门定做的吗?
回复

使用道具 举报

39#
ID:94253 发表于 2023-6-6 06:50 | 只看该作者
这个外壳是专门定做的还是哪里搞得?
回复

使用道具 举报

40#
ID:94253 发表于 2023-6-6 06:56 | 只看该作者
1860774xxxx 发表于 2023-3-1 18:52
abs防水盒网上大把

哦,看了下还真是,开孔这么整齐要用什么工具啊?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表