久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10782|回復: 16
打印 上一主題 下一主題
收起左側

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)


評分

參與人數 2黑幣 +110 收起 理由
aifengdian + 10 贊一個!
admin + 100 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏15 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:59525 發表于 2018-9-23 19:41 | 只看該作者
感謝樓主的分享
回復

使用道具 舉報

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

使用道具 舉報

地板
ID:426296 發表于 2018-11-18 15:39 | 只看該作者
謝樓主的分享
回復

使用道具 舉報

5#
ID:428919 發表于 2018-11-18 22:39 | 只看該作者
很想贊,但剛注冊,還沒權限。。。
回復

使用道具 舉報

6#
ID:35873 發表于 2018-12-21 14:23 | 只看該作者
多謝樓主分享
回復

使用道具 舉報

7#
ID:448212 發表于 2019-7-18 15:53 | 只看該作者
太感謝樓主
回復

使用道具 舉報

8#
ID:57570 發表于 2019-9-1 10:24 來自手機 | 只看該作者
編譯不通過
回復

使用道具 舉報

9#
ID:331688 發表于 2019-10-25 15:45 來自手機 | 只看該作者
感謝樓主,正需要
回復

使用道具 舉報

10#
ID:353831 發表于 2019-12-10 22:36 來自手機 | 只看該作者
樓主編譯通不過
回復

使用道具 舉報

11#
ID:207027 發表于 2020-2-10 09:14 | 只看該作者
感謝樓主,做出來試試效果
回復

使用道具 舉報

12#
ID:634466 發表于 2020-2-10 11:32 | 只看該作者
做得非常的好
回復

使用道具 舉報

13#
ID:102189 發表于 2020-2-11 12:09 | 只看該作者
我也是編譯不通過,求回復。
回復

使用道具 舉報

14#
ID:305511 發表于 2020-2-11 17:06 | 只看該作者
太棒了!謝謝了!
回復

使用道具 舉報

15#
ID:102189 發表于 2020-5-16 13:41 | 只看該作者
我的也是編譯不了
回復

使用道具 舉報

16#
ID:229361 發表于 2020-7-21 11:19 | 只看該作者
感謝樓主的分享,但是我的編譯不通過,請問是怎么回事?
回復

使用道具 舉報

17#
ID:93502 發表于 2021-3-16 19:28 | 只看該作者
樓主的制作值得仿制,謝謝!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美视频一区二区三区 | 中文字幕在线观看第一页 | 亚洲午夜精品久久久久久app | 亚洲人成人一区二区在线观看 | 亚洲第1页 | 日本成人午夜影院 | 日本一区高清 | 国产日韩欧美一区二区 | 91精品国产综合久久久久久丝袜 | 亚洲精品欧美 | 成人免费小视频 | 亚洲成人精品 | 中文字幕av在线播放 | 色婷婷综合久久久久中文一区二区 | 91精品久久久久久久久久小网站 | 国产毛片毛片 | 天天操网 | 欧美精品91 | 亚洲一区二区中文字幕 | 精品一区二区三区免费视频 | 久久精品一区二 | 日本高清中文字幕 | 日韩国产中文字幕 | 欧洲性生活视频 | 国产精品福利视频 | 国产在线一区观看 | 亚洲国产精品一区二区三区 | 久久精品国产免费一区二区三区 | 免费99视频 | 精品久久久久久 | 一区二区久久 | 国产男人的天堂 | 国产一区高清 | 国产在线播放一区二区三区 | 国产成人久久久 | 中国三级黄色录像 | 精品无码久久久久久久动漫 | av香蕉 | 成人二区三区 | 精品国产一区三区 | 亚洲精品久久久一区二区三区 |