标题: 1.8寸共阳数码管+STC单片机+红外遥控和按键+DS3231时钟 附源码与电路 [打印本页]

作者: 啦啦啦1234    时间: 2018-9-23 16:12
标题: 1.8寸共阳数码管+STC单片机+红外遥控和按键+DS3231时钟 附源码与电路
时隔一年,pcb版1.8寸数码管时钟2.0版出炉了,平时带娃上班没时间,所以久了点。(老版本没上传,这次上传看看)
去年做的pcb时自己学protel99画的,本想找淘宝的,pcb厂家说不带画,于是找带画的,可一个种带画收费800块,觉得不难,所以一气之下自己自学了。现在一年没动,忘记好多,在3231芯片画封装的时候没实物测量,直接上下两排引脚距离写错了,本来9mm写成5了,板子到手才发现,幸亏家里有热风枪,所以把3231的引脚向里弯后用风枪焊,电烙铁是不行了。所以PCB就不发出来了,有兴趣的朋友可自己画。
之前pcb版的秒用的是led,这次直接用数码管的点表示秒。
之前的DS3231直接用5v电源供电,发现误差大,这次添加3.3v稳压管后正常。
之前数码管使用MAX7219驱动4位共阴数码管,虽然芯片有调光功能,但使用中发现经常死机不动或黑屏,现在直接使用PNP三极管驱动4位共阳数码管+AD功能光控。

功能:

1、使用STC12C5A60S2 AD功能检测环境光线控制数码管亮暗。(60K太大觉得浪费的朋友可换小容量的芯片,我是本着价格差距不大,情愿容量大的想法所以用60s2)

2、有按键和红外遥控功能(正面为了美观。实测红外接收头在反面,遥控器在正面也能接收信号)

3、采用DS3231时钟芯片,年误差+-2min

4、时钟芯片电池使用LIR系列可充电纽扣电池(这里用的LIR1220,可换LIR2032等更大容量电池)

5、由于给老年人使用,所以没设闹钟功能,但引脚以连,可在程序里自行添加。

6、目前为止1.8寸是最大数码管(5V驱动里),更大的数码管需要>=12V电压供电,芯片驱动,电路比较麻烦。所以这里使用1.8寸数码管。

7、由于画线路图时数码管标号A~DP对应的管脚写反了,PCB文件没细看就发厂商制版了,所以程序中数码管显示数组另外写了,常用如下:
uchar code table[]=         //共阳数码管编码0~F
{0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xc0,0x86,0x8e};

制作出来的实物图如下:




电路原理图如下:


单片机源程序如下:
  1. /*****************************************************************************************************
  2. *******************************************头文件与宏定义*********************************************
  3. *****************************************************************************************************/
  4. #include <STC12C5A60S2.h>
  5. #include <intrins.h>
  6. #define        uchar unsigned char               
  7. #define        uint unsigned int
  8. /*****************************************************************************************************
  9. ***********************************************ADC定义************************************************
  10. *****************************************************************************************************/
  11. sfr ADC_LOW2    =   0xBE;           //ADC低2位结果
  12. #define ADC_POWER   0x80            //ADC电源控制位
  13. #define ADC_FLAG    0x10            //ADC完成标志
  14. #define ADC_START   0x08            //ADC起始控制位
  15. #define ADC_SPEEDLL 0x00            //540个时钟
  16. #define ADC_SPEEDL  0x20            //360个时钟
  17. #define ADC_SPEEDH  0x40            //180个时钟
  18. #define ADC_SPEEDHH 0x60            //90个时钟
  19. /*****************************************************************************************************
  20. ********************************************红外遥控定义**********************************************
  21. *****************************************************************************************************/
  22. #define Imax 14000
  23. #define Imin 8000
  24. #define Inum1 1450
  25. #define Inum3 3000
  26. #define Inum2 700
  27. uchar f;
  28. uchar IrOK;
  29. unsigned long m,Tc;
  30. uchar Im[4]={0x00,0x00,0x00,0x00};
  31. /*****************************************************************************************************
  32. **********************************************DS3231定义**********************************************
  33. *****************************************************************************************************/       
  34. uchar RTC_Data[7];
  35. uchar RTC_Data1[7];
  36. uchar RTC_Set_ID;
  37. code uchar rtc_address[7]={0x00,0x01,0x02,0x04,0x05,0x03,0x06};
  38. /*****************************************************************************************************
  39. **********************************************标志位定义**********************************************
  40. *****************************************************************************************************/
  41. bit T0_Flag;                         //定时器0标志位
  42. bit laba_flag;           //蜂鸣器标志位
  43. bit set_flag;                         //设置显示标志位
  44. bit RTC_Save_Flag;       //设置时间标志位
  45. bit gk;                                      //光控标志位
  46. /*****************************************************************************************************
  47. **********************************************管脚定义************************************************
  48. *****************************************************************************************************/
  49. sbit IIC_SCL=P3^6;         //DS3231_SCL
  50. sbit IIC_SDA=P3^5;         //DS3231_SDA
  51. sbit hongwai=P3^3;   //红外接收数据输入端

  52. sbit key1=P2^0;                 //设置键
  53. sbit key2=P2^1;                 //加键
  54. sbit key3=P2^2;                 //减键
  55. sbit key4=P2^3;                 //确定键
  56. //sbit key5=P2^4;             //PWM键
  57. sbit key6=P2^5;                 //光控键
  58. sbit laba=P3^4;                 //喇叭输出端
  59. sbit D1=P1^3;                 //数码管位码
  60. sbit D2=P1^2;                 //数码管位码
  61. sbit D3=P1^1;                 //数码管位码
  62. sbit D4=P1^0;                 //数码管位码

  63. int ld;                                 //光控ADC用
  64. uint temp[3];                 //光控ADC用
  65. uchar code table[]={0x03,0x9f,0x25,0x0d,       //共阳数码管不带小数点
  66.                                         0x99,0x49,0x41,0x1f,
  67.                                         0x01,0x09,0x11,0xc1,
  68.                                         0x63,0x85,0x61,0x71};

  69. uchar code table1[]={0x02,0x9e,0x24,0x0c,           //共阳数码管带小数点
  70.                                          0x98,0x48,0x40,0x1e,
  71.                                          0x00,0x08,0x10,0xc0,
  72.                                          0x62,0x84,0x60,0x70};
  73. /*****************************************************************************************************
  74. **********************************************延时函数************************************************
  75. *****************************************************************************************************/       
  76. void Delay_xms(uint x)
  77. {
  78.         uint i,j;
  79.         for(i=0;i<x;i++)
  80.                 for(j=0;j<112;j++);
  81. }
  82. void Delayms(uint t)
  83. {
  84.         uchar i;
  85.         while(t--)
  86.            for(i=0;i<123;i++);
  87. }
  88. /*****************************************************************************************************
  89. **********************************************显示函数************************************************
  90. *****************************************************************************************************/       
  91. void display()
  92. {
  93.         D1=0;
  94.         P0=table[RTC_Data[2]/10];
  95.         Delayms(4);
  96.         P0=0xff;
  97.         D1=1;

  98.         D2=0;
  99.         if(RTC_Data[0]/1%2==0) P0=table[RTC_Data[2]%10];
  100.         else P0=table1[RTC_Data[2]%10];       
  101.         Delayms(4);
  102.         P0=0xff;
  103.         D2=1;

  104.         D3=0;
  105.         if(RTC_Data[0]/1%2==0) P0=table[RTC_Data[1]/10];
  106.         else P0=table1[RTC_Data[1]/10];       
  107.         Delayms(4);
  108.         P0=0xff;
  109.         D3=1;


  110.         D4=0;
  111.         P0=table[RTC_Data[1]%10];
  112.         Delayms(4);
  113.         P0=0xff;
  114.         D4=1;
  115. }
  116. /*****************************************************************************************************
  117. **************************************显示小时函数*****设置用*****************************************
  118. *****************************************************************************************************/       
  119. void display_set_shi()
  120. {
  121.         D1=0;
  122.         P0=0x91;
  123.         Delayms(2);
  124.         P0=0xff;
  125.         D1=1;

  126.         D2=0;
  127.         P0=0xff;
  128.         Delayms(2);
  129.         P0=0xff;
  130.         D2=1;

  131.         D3=0;
  132.         P0=table[RTC_Data[2]/10];
  133.         Delayms(2);
  134.         P0=0xff;
  135.         D3=1;

  136.         D4=0;
  137.         P0=table[RTC_Data[2]%10];
  138.         Delayms(2);
  139.         P0=0xff;
  140.         D4=1;
  141. }
  142. /*****************************************************************************************************
  143. **************************************显示分钟函数*****设置用*****************************************
  144. *****************************************************************************************************/
  145. void display_set_fen()
  146. {       
  147.         D1=0;
  148.         P0=table[15];
  149.         Delayms(2);
  150.         P0=0xff;
  151.         D1=1;

  152.         D2=0;
  153.         P0=0xff;
  154.         Delayms(2);
  155.         P0=0xff;
  156.         D2=1;

  157.         D3=0;
  158.         P0=table[RTC_Data[1]/10];
  159.         Delayms(2);
  160.         P0=0xff;
  161.         D3=1;

  162.         D4=0;
  163.         P0=table[RTC_Data[1]%10];
  164.         Delayms(2);
  165.         P0=0xff;
  166.         D4=1;
  167. }
  168. /*****************************************************************************************************
  169. ***************************************显示秒函数*****设置用******************************************
  170. *****************************************************************************************************/
  171. void display_set_miao()
  172. {       
  173.         D1=0;
  174.         P0=0x49;
  175.         Delayms(2);
  176.         P0=0xff;
  177.         D1=1;

  178.         D2=0;
  179.         P0=0xff;
  180.         Delayms(2);
  181.         P0=0xff;
  182.         D2=1;

  183.         D3=0;
  184.         P0=table[RTC_Data[0]/10];
  185.         Delayms(2);
  186.         P0=0xff;
  187.         D3=1;

  188.         D4=0;
  189.         P0=table[RTC_Data[0]%10];
  190.         Delayms(2);
  191.         P0=0xff;
  192.         D4=1;
  193. }
  194. /*****************************************************************************************************
  195. ********************************************键值处理函数**********************************************
  196. *****************************************************************************************************/       
  197. void KeyDataProcess()
  198. {
  199.         if(key1==0)// 设置
  200.         {
  201.                 if(key1==0)
  202.                 {
  203.                         Delay_xms(20);
  204.                         while(!key1);
  205.                         laba_flag=1; //蜂鸣器响一声
  206.                         set_flag=0;
  207.                         RTC_Set_ID++;
  208.                         if(RTC_Set_ID>=4)
  209.                                 RTC_Set_ID=1;
  210.                 }
  211.         }

  212.         if(key2==0)//+
  213.         {
  214.                 if(key2==0)
  215.                 {
  216.                         Delay_xms(20);
  217.                         while(!key2);
  218.                         laba_flag=1;   //蜂鸣器响一声
  219.                         set_flag=0;
  220.                         if(RTC_Set_ID==1)
  221.                         {
  222.                                 RTC_Data[2]++;
  223.                                 if(RTC_Data[2]>23)
  224.                                 RTC_Data[2]=0;
  225.                                 display_set_shi();
  226.                         }
  227.                         else if(RTC_Set_ID==2)
  228.                         {
  229.                                 RTC_Data[1]++;
  230.                                 if(RTC_Data[1]>59)
  231.                                 RTC_Data[1]=0;
  232.                                 display_set_fen();
  233.                         }
  234.                         else if(RTC_Set_ID==3)
  235.                         {
  236.                                 RTC_Data[0]++;
  237.                                 if(RTC_Data[0]>59)
  238.                                 RTC_Data[0]=0;
  239.                                 display_set_miao();
  240.                         }
  241.                 }
  242.         }

  243.         if(key3==0)//-
  244.         {
  245.                 if(key3==0)
  246.                 {
  247.                         Delay_xms(20);
  248.                         while(!key3);
  249.                         laba_flag=1;          //蜂鸣器响一声
  250.                         set_flag=0;
  251.                         if(RTC_Set_ID==1)
  252.                         {
  253.                                 RTC_Data[2]--;
  254.                                 if(RTC_Data[2]==-1)
  255.                                 RTC_Data[2]=23;
  256.                                 display_set_shi();
  257.                         }
  258.                         else if(RTC_Set_ID==2)
  259.                         {
  260.                                 RTC_Data[1]--;
  261.                                 if(RTC_Data[1]==-1)
  262.                                 RTC_Data[1]=59;
  263.                                 display_set_fen();
  264.                         }
  265.                         else if(RTC_Set_ID==3)
  266.                         {
  267.                                 RTC_Data[0]--;
  268.                                 if(RTC_Data[0]==-1)
  269.                                 RTC_Data[0]=59;
  270.                                 display_set_miao();
  271.                         }
  272.                 }
  273.         }

  274.         if(key4==0)//ok
  275.         {
  276.                 if(key4==0)
  277.                 {
  278.                         Delay_xms(20);
  279.                         while(!key4);
  280.                         laba_flag=1;          //蜂鸣器响一声
  281.                         set_flag=1;                                       
  282.                         RTC_Save_Flag=1;
  283.                 }
  284.         }
  285.         if(key6==0)//gk
  286.         {
  287.                 if(key6==0)
  288.                 {
  289.                         Delay_xms(20);
  290.                         while(!key6);
  291.                         laba_flag=1;          //蜂鸣器响一声
  292.                         set_flag=1;                                       
  293.                         gk=!gk;                                       
  294.                 }
  295.         }

  296.         //以下为红外遥控部分
  297.         if(IrOK==1)        //设置键
  298.         {
  299.                 if(Im[2]==0x0d)
  300.                 {
  301.                         laba_flag=1; //蜂鸣器响一声
  302.                         set_flag=0;
  303.                         RTC_Set_ID++;
  304.                         if(RTC_Set_ID>=4)
  305.                                 RTC_Set_ID=1;
  306.                 }

  307.                 else if(Im[2]==0x40)//遥控器+键
  308.                 {
  309.                         laba_flag=1;   //蜂鸣器响一声
  310.                         set_flag=0;
  311.                         if(RTC_Set_ID==1)
  312.                         {
  313.                                 RTC_Data[2]++;
  314.                                 if(RTC_Data[2]>23)
  315.                                 RTC_Data[2]=0;
  316.                                 display_set_shi();
  317.                         }
  318.                         else if(RTC_Set_ID==2)
  319.                         {
  320.                                 RTC_Data[1]++;
  321.                                 if(RTC_Data[1]>59)
  322.                                 RTC_Data[1]=0;
  323.                                 display_set_fen();
  324.                         }
  325.                         else if(RTC_Set_ID==3)
  326.                         {
  327.                                 RTC_Data[0]++;
  328.                                 if(RTC_Data[0]>59)
  329.                                 RTC_Data[0]=0;
  330.                                 display_set_miao();
  331.                         }
  332.                 }

  333.                 else if(Im[2]==0x19)//遥控器-键
  334.                 {
  335.                         laba_flag=1;          //蜂鸣器响一声
  336.                         set_flag=0;
  337.                         if(RTC_Set_ID==1)
  338.                         {
  339.                                 RTC_Data[2]--;
  340.                                 if(RTC_Data[2]==-1)
  341.                                 RTC_Data[2]=23;
  342.                                 display_set_shi();
  343.                         }
  344.                         else if(RTC_Set_ID==2)
  345.                         {
  346.                                 RTC_Data[1]--;
  347.                                 if(RTC_Data[1]==-1)
  348.                                 RTC_Data[1]=59;
  349.                                 display_set_fen();
  350.                         }
  351.                         else if(RTC_Set_ID==3)
  352.                         {
  353.                                 RTC_Data[0]--;
  354.                                 if(RTC_Data[0]==-1)
  355.                                 RTC_Data[0]=59;
  356.                                 display_set_miao();
  357.                         }
  358.                 }
  359.                 else if(Im[2]==0x15)//遥控器播放键
  360.                 {
  361.                         laba_flag=1;          //蜂鸣器响一声
  362.                         set_flag=1;
  363.                         RTC_Save_Flag=1;               
  364.                 }
  365.                 else if(Im[2]==0x47)//遥控器MENU键
  366.                 {
  367.                         laba_flag=1;          //蜂鸣器响一声
  368.                         set_flag=1;                                       
  369.                         gk=!gk;       
  370.                 }
  371.                 IrOK=0;
  372.         }
  373. }
  374. /*****************************************************************************************************
  375. *****************************************DS3231时钟函数***********************************************
  376. *****************************************************************************************************/       
  377. void delay_IIC()   
  378. {
  379.         _nop_();_nop_();_nop_();_nop_();//IIC总线限速延时函数。该函数是空函数,延时4个机器周期。
  380. }
  381. void IIC_Init()        //IIC总线初始化函数
  382. {
  383.     IIC_SDA=1;//释放IIC总线的数据线。
  384.     IIC_SCL=1;//释放IIC总线的时钟线。
  385. }
  386. void IIC_start()  //IIC总线产生起始信号函数
  387. {   
  388.      IIC_SDA=1;//拉高数据线
  389.      IIC_SCL=1;//拉高时钟线
  390.      delay_IIC();
  391.      IIC_SDA=0;//在时钟线为高电平时,拉低数据线,产生起始信号。
  392.      delay_IIC();
  393.      IIC_SCL=0;//拉低时钟线
  394. }
  395. void IIC_stop()//IIC总线产生停止信号函数
  396. {
  397.     IIC_SDA=0;//拉低数据线
  398.     delay_IIC();
  399.     IIC_SCL=1;//拉高时钟线。
  400.     delay_IIC();
  401.     IIC_SDA=1;//时钟时线为高电平时,拉高数据线,产生停止信号。
  402.     delay_IIC();
  403. }
  404. bit IIC_Tack()         //接收应答信号函数
  405. {
  406.     bit ack;//定义一个位变量,来暂存应答状态。
  407.     IIC_SDA=1;//释放数据总线,准备接收应答信号。
  408.     delay_IIC();
  409.     IIC_SCL=1;//拉高时钟线。
  410.     delay_IIC();
  411.     ack=IIC_SDA;//读取应答信号的状态。
  412.     delay_IIC();
  413.     IIC_SCL=0;//拉低时钟线。
  414.     delay_IIC();
  415.     return ack;//返回应答信号的状态,0表示应答,1表示非应答。
  416. }
  417. void IIC_write_byte(uchar Data)//向IIC总线写入一个字节的数据函数
  418. {
  419.         uchar i;
  420.         for(i=0;i<8;i++)//有8位数据
  421.         {
  422.                 if(Data&0x80)
  423.                 IIC_SDA=1;//写最高位的数据
  424.                 else
  425.                 IIC_SDA = 0;
  426.                 delay_IIC();
  427.                 IIC_SCL=1; //拉高时钟线,将数写入到设备中。
  428.                 delay_IIC();
  429.                 IIC_SCL=0;//拉低时钟线,允许改变数据线的状态
  430.                 delay_IIC();
  431.                 Data=Data<<1;//数据左移一位,把次高位放在最高位,为写入次高位做准备
  432.         }
  433. }
  434. uchar IIC_read_byte()//从IIC总线读取一个字节的数据函数
  435. {
  436.     uchar i;
  437.     uchar Data;       //定义一个缓冲寄存器。
  438.     for(i=0;i<8;i++)//有8位数据
  439.     {
  440.         IIC_SCL=1;//拉高时钟线,为读取下一位数据做准备。
  441.         delay_IIC();
  442.         Data=Data<<1;//将缓冲字节的数据左移一位,准备读取数据。
  443.         delay_IIC();
  444.       
  445.         if(IIC_SDA)//如果数据线为高平电平。
  446.         Data=Data|0x01;//则给缓冲字节的最低位写1。
  447.         IIC_SCL=0;//拉低时钟线,为读取下一位数据做准备。
  448.         delay_IIC();
  449.     }
  450.     return Data;//返回读取的一个字节数据。
  451. }
  452. void IIC_single_byte_write(uchar Waddr,uchar Data)         //向任意地址写入一个字节数据函数
  453. {
  454.     IIC_start();//产生起始信号
  455.     IIC_write_byte(0xd0);//写入设备地址(写)
  456.     IIC_Tack();//等待设备的应答
  457.     IIC_write_byte(Waddr);//写入要操作的单元地址。
  458.     IIC_Tack();//等待设备的应答。
  459.     IIC_write_byte(Data);//写入数据。
  460.     IIC_Tack();//等待设备的应答。
  461.     IIC_stop();//产生停止符号。
  462. }
  463. uchar IIC_single_byte_read(uchar Waddr)        //从任意地址读取一个字节数据函数
  464. {
  465.     uchar Data;//定义一个缓冲寄存器。
  466.     IIC_start();//产生起始信号
  467.     IIC_write_byte(0xd0);//写入设备地址(写)
  468.     IIC_Tack();//等待设备的应答
  469.     IIC_write_byte(Waddr);//写入要操作的单元地址。
  470.     IIC_Tack();//等待设备的应答。
  471.     IIC_stop();//产生停止符号。
  472.     IIC_start();//产生起始信号
  473.     IIC_write_byte(0xd1);//写入设备地址(写)
  474.     IIC_Tack();//等待设备的应答
  475.     Data=IIC_read_byte();//写入数据。
  476.     delay_IIC();
  477.     IIC_stop();//产生停止符号。
  478.     return Data;//返回读取的一个字节数据。
  479. }
  480. /*****************************************************************************************************
  481. ********************************************时钟写入函数**********************************************
  482. *****************************************************************************************************/
  483. void Set_RTC()
  484. {
  485.     uchar i,tmp;
  486.     for(i=0;i<7;i++)
  487.     {      
  488.         tmp=RTC_Data[i]/10;       
  489.         RTC_Data1[i]=RTC_Data[i]%10;
  490.         RTC_Data1[i]=RTC_Data1[i]+tmp*16;
  491.     }
  492.     for(i=0;i<7;i++)        
  493.     {
  494.         IIC_single_byte_write(rtc_address[i],RTC_Data1[i]);
  495.     }
  496.     IIC_single_byte_write(0x0e,0x0c);
  497. }
  498. /*****************************************************************************************************
  499. *******************************************时钟初始化函数*********************************************
  500. *****************************************************************************************************/
  501. void DS3231_Init()
  502. {
  503.     IIC_SDA=1;
  504.     IIC_SCL=1;
  505.     IIC_single_byte_write(0x0e,0x0c);
  506. }
  507. /*****************************************************************************************************
  508. ********************************************时钟读取函数**********************************************
  509. *****************************************************************************************************/       
  510. void Read_RTC()
  511. {
  512.     uchar i,tmp,tmp1,tmp2;         
  513.     for(i=0;i<7;i++)         
  514.     {
  515.             tmp = IIC_single_byte_read(rtc_address[i]);
  516.             tmp1 = tmp/16;
  517.             tmp2 = tmp%16;
  518.                 RTC_Data[i]=tmp1*10+tmp2;
  519.     }   
  520. }
  521. void Ram_init()
  522. {
  523.         Read_RTC();                               //读取 秒分时日月周年
  524.         if((!RTC_Data[6])&&(!RTC_Data[4])&&(!RTC_Data[3])&&(!RTC_Data[2])&&(!RTC_Data[1])&&(!RTC_Data[0]))
  525.         {
  526.                 RTC_Data[0]=0;       //秒      //秒分时日月周年 最低位读写位
  527.                 RTC_Data[1]=0;                 //分
  528.                 RTC_Data[2]=12;                 //时
  529.                 RTC_Data[3]=3;                 //日
  530.                 RTC_Data[4]=11;                 //月
  531.                 RTC_Data[5]=2;                 //周
  532.                 RTC_Data[6]=15;                 //年
  533.                 Set_RTC();                     //写入 秒分时日月周年
  534.         }
  535.         RTC_Set_ID=0;       
  536. }
  537. /*****************************************************************************************************
  538. *******************************************ADC初始化函数**********************************************
  539. *****************************************************************************************************/
  540. void InitADC()
  541. {
  542.           P1ASF = 0x80;                        //Open channels ADC function 1000 0000 p1.7使用AD功能
  543.         ADC_RES  = 0;                                   
  544.         ADC_LOW2 = 0;
  545.           ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
  546. }
  547. /*****************************************************************************************************
  548. *********************************************ADC处理函数**********************************************
  549. *****************************************************************************************************/
  550. void GetADCResult(unsigned char ch,unsigned int *value)
  551. {
  552.         ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
  553.     _nop_();                        //Must wait before inquiry
  554.     _nop_();
  555.     _nop_();
  556.     _nop_();
  557.     _nop_();                        //Must wait before inquiry
  558.     _nop_();
  559.     while(!(ADC_CONTR & ADC_FLAG));//Wait complete flag
  560.     ADC_CONTR &= ~ADC_FLAG;         //Close ADC

  561.         *value = 0;
  562.         *value = ADC_RES;
  563.         *value = ((*value)*4 + ADC_LOW2);               
  564. }
  565. /*****************************************************************************************************
  566. **********************************************走时函数************************************************
  567. *****************************************************************************************************/       
  568. void Time_Fun()
  569. {
  570.         static        uchar T10Ms_Cnt=0,T200Ms_Cnt=0;
  571.         static uchar Buzz_On_Cnt=0,RTC_Save_Cnt=0;       
  572.        
  573.         T10Ms_Cnt++;       
  574.         if(T10Ms_Cnt>=5)
  575.         {
  576.                 T10Ms_Cnt=0;
  577.                 KeyDataProcess();
  578.                 if(laba_flag)
  579.                 {
  580.                         Buzz_On_Cnt++;
  581.                         if(Buzz_On_Cnt>=10)
  582.                         {
  583.                                 laba_flag=0;
  584.                                 Buzz_On_Cnt=0;
  585.                         }
  586.                 }       
  587.                 if(RTC_Save_Flag)                         //按确定键RTC_Save_Flag=1,保存数据
  588.                 {
  589.                         RTC_Save_Cnt++;
  590.                         if(RTC_Save_Cnt>=50)
  591.                         {
  592.                                 RTC_Save_Cnt=0;
  593.                                 RTC_Save_Flag=0;
  594.                                 RTC_Set_ID=0;
  595.                                 Set_RTC();
  596.                         }
  597.                 }
  598.         }
  599.         T200Ms_Cnt++;
  600.         if(T200Ms_Cnt>=5)                          
  601.         {
  602.                 T200Ms_Cnt=0;               
  603.                 if(!RTC_Set_ID)
  604.                 Read_RTC();
  605.                 GetADCResult(7,&temp[2]);
  606.                 if(gk==1)                    //开光控
  607. ……………………

  608. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
1.8CLOCK.rar (56.9 KB, 下载次数: 261)



作者: 陈建建    时间: 2018-9-23 19:41
感谢楼主的分享
作者: 文凤轩    时间: 2018-9-24 00:07
谢谢楼主分享,在淘宝买过类似的套件30几门,说有全部资料,结果里面只有一张电路图没源码,上当受骗了,冲着他的源码才买的,居然没有还没写明白,看到楼主的源码看到了救星。
作者: lzhl    时间: 2018-11-18 15:39
谢楼主的分享
作者: jackem    时间: 2018-11-18 22:39
很想赞,但刚注册,还没权限。。。
作者: jialishoushi    时间: 2018-12-21 14:23
多谢楼主分享
作者: persistence    时间: 2019-7-18 15:53
太感谢楼主
作者: 吴宇    时间: 2019-9-1 10:24
编译不通过
作者: 糖饼    时间: 2019-10-25 15:45
感谢楼主,正需要
作者: wl020807    时间: 2019-12-10 22:36
楼主编译通不过
作者: ytechcn    时间: 2020-2-10 09:14
感谢楼主,做出来试试效果
作者: 0720    时间: 2020-2-10 11:32
做得非常的好
作者: meimiwu    时间: 2020-2-11 12:09
我也是编译不通过,求回复。
作者: 太阳黑子1    时间: 2020-2-11 17:06
太棒了!谢谢了!
作者: meimiwu    时间: 2020-5-16 13:41
我的也是编译不了
作者: 51单片机1234    时间: 2020-7-21 11:19
感谢楼主的分享,但是我的编译不通过,请问是怎么回事?
作者: 胡闹闹    时间: 2021-3-16 19:28
楼主的制作值得仿制,谢谢!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1