找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

1.8寸共陽數(shù)碼管+STC單片機(jī)+紅外遙控和按鍵+DS3231時(shí)鐘 附源碼與電路

  [復(fù)制鏈接]
ID:108715 發(fā)表于 2018-9-23 16:12 | 顯示全部樓層 |閱讀模式
時(shí)隔一年,pcb版1.8寸數(shù)碼管時(shí)鐘2.0版出爐了,平時(shí)帶娃上班沒時(shí)間,所以久了點(diǎn)。(老版本沒上傳,這次上傳看看)
去年做的pcb時(shí)自己學(xué)protel99畫的,本想找淘寶的,pcb廠家說不帶畫,于是找?guī)М嫷模梢粋(gè)種帶畫收費(fèi)800塊,覺得不難,所以一氣之下自己自學(xué)了,F(xiàn)在一年沒動(dòng),忘記好多,在3231芯片畫封裝的時(shí)候沒實(shí)物測量,直接上下兩排引腳距離寫錯(cuò)了,本來9mm寫成5了,板子到手才發(fā)現(xiàn),幸虧家里有熱風(fēng)槍,所以把3231的引腳向里彎后用風(fēng)槍焊,電烙鐵是不行了。所以PCB就不發(fā)出來了,有興趣的朋友可自己畫。
之前pcb版的秒用的是led,這次直接用數(shù)碼管的點(diǎn)表示秒。
之前的DS3231直接用5v電源供電,發(fā)現(xiàn)誤差大,這次添加3.3v穩(wěn)壓管后正常。
之前數(shù)碼管使用MAX7219驅(qū)動(dòng)4位共陰數(shù)碼管,雖然芯片有調(diào)光功能,但使用中發(fā)現(xiàn)經(jīng)常死機(jī)不動(dòng)或黑屏,現(xiàn)在直接使用PNP三極管驅(qū)動(dòng)4位共陽數(shù)碼管+AD功能光控。

功能:

1、使用STC12C5A60S2 AD功能檢測環(huán)境光線控制數(shù)碼管亮暗。(60K太大覺得浪費(fèi)的朋友可換小容量的芯片,我是本著價(jià)格差距不大,情愿容量大的想法所以用60s2)

2、有按鍵和紅外遙控功能(正面為了美觀。實(shí)測紅外接收頭在反面,遙控器在正面也能接收信號(hào))

3、采用DS3231時(shí)鐘芯片,年誤差+-2min

4、時(shí)鐘芯片電池使用LIR系列可充電紐扣電池(這里用的LIR1220,可換LIR2032等更大容量電池)

5、由于給老年人使用,所以沒設(shè)鬧鐘功能,但引腳以連,可在程序里自行添加。

6、目前為止1.8寸是最大數(shù)碼管(5V驅(qū)動(dòng)里),更大的數(shù)碼管需要>=12V電壓供電,芯片驅(qū)動(dòng),電路比較麻煩。所以這里使用1.8寸數(shù)碼管。

7、由于畫線路圖時(shí)數(shù)碼管標(biāo)號(hào)A~DP對(duì)應(yīng)的管腳寫反了,PCB文件沒細(xì)看就發(fā)廠商制版了,所以程序中數(shù)碼管顯示數(shù)組另外寫了,常用如下:
uchar code table[]=         //共陽數(shù)碼管編碼0~F
{0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xc0,0x86,0x8e};

制作出來的實(shí)物圖如下:
IMG20180923160322.jpg

IMG20180923160251.jpg IMG20180923155932.jpg IMG20180923160021.jpg IMG20180923160014.jpg IMG20180923155842.jpg

電路原理圖如下:
0.png

單片機(jī)源程序如下:
  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位結(jié)果
  12. #define ADC_POWER   0x80            //ADC電源控制位
  13. #define ADC_FLAG    0x10            //ADC完成標(biāo)志
  14. #define ADC_START   0x08            //ADC起始控制位
  15. #define ADC_SPEEDLL 0x00            //540個(gè)時(shí)鐘
  16. #define ADC_SPEEDL  0x20            //360個(gè)時(shí)鐘
  17. #define ADC_SPEEDH  0x40            //180個(gè)時(shí)鐘
  18. #define ADC_SPEEDHH 0x60            //90個(gè)時(shí)鐘
  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. **********************************************標(biāo)志位定義**********************************************
  40. *****************************************************************************************************/
  41. bit T0_Flag;                         //定時(shí)器0標(biāo)志位
  42. bit laba_flag;           //蜂鳴器標(biāo)志位
  43. bit set_flag;                         //設(shè)置顯示標(biāo)志位
  44. bit RTC_Save_Flag;       //設(shè)置時(shí)間標(biāo)志位
  45. bit gk;                                      //光控標(biāo)志位
  46. /*****************************************************************************************************
  47. **********************************************管腳定義************************************************
  48. *****************************************************************************************************/
  49. sbit IIC_SCL=P3^6;         //DS3231_SCL
  50. sbit IIC_SDA=P3^5;         //DS3231_SDA
  51. sbit hongwai=P3^3;   //紅外接收數(shù)據(jù)輸入端

  52. sbit key1=P2^0;                 //設(shè)置鍵
  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;                 //數(shù)碼管位碼
  60. sbit D2=P1^2;                 //數(shù)碼管位碼
  61. sbit D3=P1^1;                 //數(shù)碼管位碼
  62. sbit D4=P1^0;                 //數(shù)碼管位碼

  63. int ld;                                 //光控ADC用
  64. uint temp[3];                 //光控ADC用
  65. uchar code table[]={0x03,0x9f,0x25,0x0d,       //共陽數(shù)碼管不帶小數(shù)點(diǎn)
  66.                                         0x99,0x49,0x41,0x1f,
  67.                                         0x01,0x09,0x11,0xc1,
  68.                                         0x63,0x85,0x61,0x71};

  69. uchar code table1[]={0x02,0x9e,0x24,0x0c,           //共陽數(shù)碼管帶小數(shù)點(diǎn)
  70.                                          0x98,0x48,0x40,0x1e,
  71.                                          0x00,0x08,0x10,0xc0,
  72.                                          0x62,0x84,0x60,0x70};
  73. /*****************************************************************************************************
  74. **********************************************延時(shí)函數(shù)************************************************
  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. **********************************************顯示函數(shù)************************************************
  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. **************************************顯示小時(shí)函數(shù)*****設(shè)置用*****************************************
  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. **************************************顯示分鐘函數(shù)*****設(shè)置用*****************************************
  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. ***************************************顯示秒函數(shù)*****設(shè)置用******************************************
  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. ********************************************鍵值處理函數(shù)**********************************************
  196. *****************************************************************************************************/       
  197. void KeyDataProcess()
  198. {
  199.         if(key1==0)// 設(shè)置
  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)        //設(shè)置鍵
  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時(shí)鐘函數(shù)***********************************************
  376. *****************************************************************************************************/       
  377. void delay_IIC()   
  378. {
  379.         _nop_();_nop_();_nop_();_nop_();//IIC總線限速延時(shí)函數(shù)。該函數(shù)是空函數(shù),延時(shí)4個(gè)機(jī)器周期。
  380. }
  381. void IIC_Init()        //IIC總線初始化函數(shù)
  382. {
  383.     IIC_SDA=1;//釋放IIC總線的數(shù)據(jù)線。
  384.     IIC_SCL=1;//釋放IIC總線的時(shí)鐘線。
  385. }
  386. void IIC_start()  //IIC總線產(chǎn)生起始信號(hào)函數(shù)
  387. {   
  388.      IIC_SDA=1;//拉高數(shù)據(jù)線
  389.      IIC_SCL=1;//拉高時(shí)鐘線
  390.      delay_IIC();
  391.      IIC_SDA=0;//在時(shí)鐘線為高電平時(shí),拉低數(shù)據(jù)線,產(chǎn)生起始信號(hào)。
  392.      delay_IIC();
  393.      IIC_SCL=0;//拉低時(shí)鐘線
  394. }
  395. void IIC_stop()//IIC總線產(chǎn)生停止信號(hào)函數(shù)
  396. {
  397.     IIC_SDA=0;//拉低數(shù)據(jù)線
  398.     delay_IIC();
  399.     IIC_SCL=1;//拉高時(shí)鐘線。
  400.     delay_IIC();
  401.     IIC_SDA=1;//時(shí)鐘時(shí)線為高電平時(shí),拉高數(shù)據(jù)線,產(chǎn)生停止信號(hào)。
  402.     delay_IIC();
  403. }
  404. bit IIC_Tack()         //接收應(yīng)答信號(hào)函數(shù)
  405. {
  406.     bit ack;//定義一個(gè)位變量,來暫存應(yīng)答狀態(tài)。
  407.     IIC_SDA=1;//釋放數(shù)據(jù)總線,準(zhǔn)備接收應(yīng)答信號(hào)。
  408.     delay_IIC();
  409.     IIC_SCL=1;//拉高時(shí)鐘線。
  410.     delay_IIC();
  411.     ack=IIC_SDA;//讀取應(yīng)答信號(hào)的狀態(tài)。
  412.     delay_IIC();
  413.     IIC_SCL=0;//拉低時(shí)鐘線。
  414.     delay_IIC();
  415.     return ack;//返回應(yīng)答信號(hào)的狀態(tài),0表示應(yīng)答,1表示非應(yīng)答。
  416. }
  417. void IIC_write_byte(uchar Data)//向IIC總線寫入一個(gè)字節(jié)的數(shù)據(jù)函數(shù)
  418. {
  419.         uchar i;
  420.         for(i=0;i<8;i++)//有8位數(shù)據(jù)
  421.         {
  422.                 if(Data&0x80)
  423.                 IIC_SDA=1;//寫最高位的數(shù)據(jù)
  424.                 else
  425.                 IIC_SDA = 0;
  426.                 delay_IIC();
  427.                 IIC_SCL=1; //拉高時(shí)鐘線,將數(shù)寫入到設(shè)備中。
  428.                 delay_IIC();
  429.                 IIC_SCL=0;//拉低時(shí)鐘線,允許改變數(shù)據(jù)線的狀態(tài)
  430.                 delay_IIC();
  431.                 Data=Data<<1;//數(shù)據(jù)左移一位,把次高位放在最高位,為寫入次高位做準(zhǔn)備
  432.         }
  433. }
  434. uchar IIC_read_byte()//從IIC總線讀取一個(gè)字節(jié)的數(shù)據(jù)函數(shù)
  435. {
  436.     uchar i;
  437.     uchar Data;       //定義一個(gè)緩沖寄存器。
  438.     for(i=0;i<8;i++)//有8位數(shù)據(jù)
  439.     {
  440.         IIC_SCL=1;//拉高時(shí)鐘線,為讀取下一位數(shù)據(jù)做準(zhǔn)備。
  441.         delay_IIC();
  442.         Data=Data<<1;//將緩沖字節(jié)的數(shù)據(jù)左移一位,準(zhǔn)備讀取數(shù)據(jù)。
  443.         delay_IIC();
  444.       
  445.         if(IIC_SDA)//如果數(shù)據(jù)線為高平電平。
  446.         Data=Data|0x01;//則給緩沖字節(jié)的最低位寫1。
  447.         IIC_SCL=0;//拉低時(shí)鐘線,為讀取下一位數(shù)據(jù)做準(zhǔn)備。
  448.         delay_IIC();
  449.     }
  450.     return Data;//返回讀取的一個(gè)字節(jié)數(shù)據(jù)。
  451. }
  452. void IIC_single_byte_write(uchar Waddr,uchar Data)         //向任意地址寫入一個(gè)字節(jié)數(shù)據(jù)函數(shù)
  453. {
  454.     IIC_start();//產(chǎn)生起始信號(hào)
  455.     IIC_write_byte(0xd0);//寫入設(shè)備地址(寫)
  456.     IIC_Tack();//等待設(shè)備的應(yīng)答
  457.     IIC_write_byte(Waddr);//寫入要操作的單元地址。
  458.     IIC_Tack();//等待設(shè)備的應(yīng)答。
  459.     IIC_write_byte(Data);//寫入數(shù)據(jù)。
  460.     IIC_Tack();//等待設(shè)備的應(yīng)答。
  461.     IIC_stop();//產(chǎn)生停止符號(hào)。
  462. }
  463. uchar IIC_single_byte_read(uchar Waddr)        //從任意地址讀取一個(gè)字節(jié)數(shù)據(jù)函數(shù)
  464. {
  465.     uchar Data;//定義一個(gè)緩沖寄存器。
  466.     IIC_start();//產(chǎn)生起始信號(hào)
  467.     IIC_write_byte(0xd0);//寫入設(shè)備地址(寫)
  468.     IIC_Tack();//等待設(shè)備的應(yīng)答
  469.     IIC_write_byte(Waddr);//寫入要操作的單元地址。
  470.     IIC_Tack();//等待設(shè)備的應(yīng)答。
  471.     IIC_stop();//產(chǎn)生停止符號(hào)。
  472.     IIC_start();//產(chǎn)生起始信號(hào)
  473.     IIC_write_byte(0xd1);//寫入設(shè)備地址(寫)
  474.     IIC_Tack();//等待設(shè)備的應(yīng)答
  475.     Data=IIC_read_byte();//寫入數(shù)據(jù)。
  476.     delay_IIC();
  477.     IIC_stop();//產(chǎn)生停止符號(hào)。
  478.     return Data;//返回讀取的一個(gè)字節(jié)數(shù)據(jù)。
  479. }
  480. /*****************************************************************************************************
  481. ********************************************時(shí)鐘寫入函數(shù)**********************************************
  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. *******************************************時(shí)鐘初始化函數(shù)*********************************************
  500. *****************************************************************************************************/
  501. void DS3231_Init()
  502. {
  503.     IIC_SDA=1;
  504.     IIC_SCL=1;
  505.     IIC_single_byte_write(0x0e,0x0c);
  506. }
  507. /*****************************************************************************************************
  508. ********************************************時(shí)鐘讀取函數(shù)**********************************************
  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();                               //讀取 秒分時(shí)日月周年
  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;       //秒      //秒分時(shí)日月周年 最低位讀寫位
  527.                 RTC_Data[1]=0;                 //分
  528.                 RTC_Data[2]=12;                 //時(shí)
  529.                 RTC_Data[3]=3;                 //日
  530.                 RTC_Data[4]=11;                 //月
  531.                 RTC_Data[5]=2;                 //周
  532.                 RTC_Data[6]=15;                 //年
  533.                 Set_RTC();                     //寫入 秒分時(shí)日月周年
  534.         }
  535.         RTC_Set_ID=0;       
  536. }
  537. /*****************************************************************************************************
  538. *******************************************ADC初始化函數(shù)**********************************************
  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處理函數(shù)**********************************************
  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. **********************************************走時(shí)函數(shù)************************************************
  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,保存數(shù)據(jù)
  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. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
1.8CLOCK.rar (56.9 KB, 下載次數(shù): 261)


評(píng)分

參與人數(shù) 2黑幣 +110 收起 理由
aifengdian + 10 贊一個(gè)!
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:59525 發(fā)表于 2018-9-23 19:41 | 顯示全部樓層
感謝樓主的分享
回復(fù)

使用道具 舉報(bào)

ID:386381 發(fā)表于 2018-9-24 00:07 來自手機(jī) | 顯示全部樓層
謝謝樓主分享,在淘寶買過類似的套件30幾門,說有全部資料,結(jié)果里面只有一張電路圖沒源碼,上當(dāng)受騙了,沖著他的源碼才買的,居然沒有還沒寫明白,看到樓主的源碼看到了救星。
回復(fù)

使用道具 舉報(bào)

ID:426296 發(fā)表于 2018-11-18 15:39 | 顯示全部樓層
謝樓主的分享
回復(fù)

使用道具 舉報(bào)

ID:428919 發(fā)表于 2018-11-18 22:39 | 顯示全部樓層
很想贊,但剛注冊,還沒權(quán)限。。。
回復(fù)

使用道具 舉報(bào)

ID:35873 發(fā)表于 2018-12-21 14:23 | 顯示全部樓層
多謝樓主分享
回復(fù)

使用道具 舉報(bào)

ID:448212 發(fā)表于 2019-7-18 15:53 | 顯示全部樓層
太感謝樓主
回復(fù)

使用道具 舉報(bào)

ID:57570 發(fā)表于 2019-9-1 10:24 來自手機(jī) | 顯示全部樓層
編譯不通過
回復(fù)

使用道具 舉報(bào)

ID:331688 發(fā)表于 2019-10-25 15:45 來自手機(jī) | 顯示全部樓層
感謝樓主,正需要
回復(fù)

使用道具 舉報(bào)

ID:353831 發(fā)表于 2019-12-10 22:36 來自手機(jī) | 顯示全部樓層
樓主編譯通不過
回復(fù)

使用道具 舉報(bào)

ID:207027 發(fā)表于 2020-2-10 09:14 | 顯示全部樓層
感謝樓主,做出來試試效果
回復(fù)

使用道具 舉報(bào)

ID:634466 發(fā)表于 2020-2-10 11:32 | 顯示全部樓層
做得非常的好
回復(fù)

使用道具 舉報(bào)

ID:102189 發(fā)表于 2020-2-11 12:09 | 顯示全部樓層
我也是編譯不通過,求回復(fù)。
回復(fù)

使用道具 舉報(bào)

ID:305511 發(fā)表于 2020-2-11 17:06 | 顯示全部樓層
太棒了!謝謝了!
回復(fù)

使用道具 舉報(bào)

ID:102189 發(fā)表于 2020-5-16 13:41 | 顯示全部樓層
我的也是編譯不了
回復(fù)

使用道具 舉報(bào)

ID:229361 發(fā)表于 2020-7-21 11:19 | 顯示全部樓層
感謝樓主的分享,但是我的編譯不通過,請(qǐng)問是怎么回事?
回復(fù)

使用道具 舉報(bào)

ID:93502 發(fā)表于 2021-3-16 19:28 | 顯示全部樓層
樓主的制作值得仿制,謝謝!
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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