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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4598|回復: 5
收起左側

太陽能晚間定時小夜燈的單片機源程序與PCB

  [復制鏈接]
ID:122843 發表于 2017-12-2 21:57 | 顯示全部樓層 |閱讀模式
好久沒來51HEI了。亂折騰 最近做了一套太陽能定時小夜燈  簡單  勿噴

pcb板:
QQ截圖20171202215116.png

單片機源程序如下:

  1. #include "reg51.h"
  2. #include "intrins.h"
  3. #define FOSC    11059200L
  4. //#define FOSC    24000000L
  5. typedef unsigned char BYTE;
  6. typedef unsigned int WORD;

  7. sfr P0M1 = 0x93;
  8. sfr P0M0 = 0x94;
  9. sfr P1M1 = 0x91;
  10. sfr P1M0 = 0x92;
  11. sfr P2M1 = 0x95;
  12. sfr P2M0 = 0x96;
  13. sfr P3M1 = 0xb1;
  14. sfr P3M0 = 0xb2;
  15. sfr P4M1 = 0xb3;
  16. sfr P4M0 = 0xb4;
  17. sfr P5M1 = 0xC9;
  18. sfr P5M0 = 0xCA;
  19. sfr P6M1 = 0xCB;
  20. sfr P6M0 = 0xCC;
  21. sfr P7M1 = 0xE1;
  22. sfr P7M0 = 0xE2;

  23. sfr  AUXR       =   0x8e;                                                       //輔助寄存器   
  24. sfr ADC_CONTR   =   0xBC;                   //ADC控制寄存器
  25. sfr ADC_RES     =   0xBD;                   //ADC高8位結果
  26. sfr ADC_LOW2    =   0xBE;                   //ADC低2位結果
  27. sfr P1ASF       =   0x9D;                   //P1口第2功能控制寄存器
  28.                                             
  29. #define ADC_POWER   0x80                    //ADC電源控制位
  30. #define ADC_FLAG    0x10                    //ADC完成標志
  31. #define ADC_START   0x08                    //ADC起始控制位
  32. #define ADC_SPEEDLL 0x00                    //540個時鐘
  33. #define ADC_SPEEDL  0x20                    //360個時鐘
  34. #define ADC_SPEEDH  0x40                    //180個時鐘
  35. #define ADC_SPEEDHH 0x60                    //90個時鐘

  36. WORD second = 0;
  37. WORD minute = 0;
  38. WORD hour = 0;
  39. BYTE Ax;//電池ADC
  40. BYTE Ay;//SUN_BT_CH

  41. sbit Cd = P1^4;//充電
  42. sbit LED0 = P3^0;
  43. sbit LED1 = P3^1;
  44. sbit LED2 = P3^2;
  45. sbit LED3 = P3^3;
  46. sbit LED4 = P3^6;
  47. sbit LED5 = P3^7;
  48. sbit LED6 = P1^0;
  49. sbit LED7 = P1^1;
  50. sbit LED8 = P1^2;

  51. void InIt();
  52. void DelayXms(WORD n);
  53. void InitADC();
  54. BYTE GetADC(BYTE ch);
  55. void DcTest();
  56. void InIt()
  57. {
  58. Cd = 1;
  59. LED0 = 1;
  60. LED1 = 1;        
  61. LED2 = 1;
  62. LED3 = 1;        
  63. LED4 = 1;
  64. LED5 = 1;        
  65. LED6 = 1;
  66. LED7 = 1;
  67. LED8 = 1;
  68. }
  69. /*----------------------------
  70. 軟件延時
  71. ----------------------------*/
  72. void DelayXms( WORD n )                //@12.000MHz
  73. {
  74.         BYTE i, j;

  75.         do{
  76.                 i = 12;
  77.                 j = 169;
  78.                 do
  79.                 {
  80.                         while (--j);
  81.                 } while (--i);
  82.         }while(--n);
  83. }
  84. /*---------------------------
  85. ADC初始化
  86. ----------------------------*/
  87. void InitADC(){
  88.     P1ASF = 0x11;                   //設置P1.0,P1.4口為AD口
  89.     ADC_RES = 0;                    //清除結果寄存器
  90.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
  91.     DelayXms(2);                       //ADC上電并延時
  92. }
  93. /*----------------------------
  94. ADC檢測
  95. ----------------------------*/
  96. BYTE GetADC(BYTE ch)
  97. {
  98.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
  99.     _nop_();                        //等待4個NOP
  100.     _nop_();
  101.     _nop_();
  102.     _nop_();
  103.     while (!(ADC_CONTR & ADC_FLAG));//等待ADC轉換完成
  104.     ADC_CONTR &= ~ADC_FLAG;         //Close ADC

  105.     return ADC_RES;                 //返回ADC結果
  106. }
  107. /*---------------------------
  108. 定時器T0中斷初始化
  109. ----------------------------*/
  110. void TimInt(){
  111.         TMOD |=0x01;//定時器0 10ms in 12M crystal 用于計時
  112.         TH0=0xd8;
  113.         TL0=0xf0;
  114.         ET0=1;
  115.         TR0=0;
  116. }
  117. /*-----------------------------
  118. 電池充電檢測
  119. -----------------------------*/
  120. void DcTest(){
  121.            if((Ax<=115)||(Ax>=235)){//電池故障或充滿
  122.                                 Cd = 0;
  123.                  }
  124.      if (115<Ax<235){//充電
  125.                          Cd = 1;
  126.                  }
  127. }
  128. /*-----------------------------
  129. 電池照明
  130. ------------------------------*/
  131. void DcOnLine(){
  132.     TR0=1;
  133.           DelayXms(100);
  134.                 LED0 = 0;
  135.                 LED1 = 0;        
  136.                 LED2 = 0;
  137.                 LED3 = 0;        
  138.                 LED4 = 0;
  139.                 LED5 = 0;        
  140.                 LED6 = 0;
  141.                 LED7 = 0;
  142.                 LED8 = 0;
  143.         if(hour == 3){
  144.                 LED0 = 1;
  145.                 LED1 = 1;        
  146.                 LED2 = 1;
  147.                 LED3 = 1;        
  148.                 LED4 = 1;
  149.                 LED5 = 1;        
  150.                 LED6 = 1;
  151.                 LED7 = 1;
  152.                 LED8 = 1;
  153.         }
  154. }
  155. /*----------------------------
  156. 主函數
  157. ----------------------------*/
  158. void main(){
  159.     P0M0 = 0x00;
  160.     P0M1 = 0x00;
  161.     P1M0 = 0x00;
  162.     P1M1 = 0x00;
  163.     P2M0 = 0x00;
  164.     P2M1 = 0x00;
  165.     P3M0 = 0x00;
  166.     P3M1 = 0x00;
  167.     P4M0 = 0x00;
  168.     P4M1 = 0x00;
  169.     P5M0 = 0x00;
  170.     P5M1 = 0x00;
  171.     P6M0 = 0x00;
  172.     P6M1 = 0x00;
  173.     P7M0 = 0x00;
  174.     P7M1 = 0x00;
  175.         
  176.     InIt();
  177.           InitADC();
  178.           TimInt();
  179.                 while(1){
  180.                   Ax=GetADC(5);
  181.                         Ay=GetADC(3);
  182.                         DcTest();
  183.                         if(Ay<50){
  184.                           DelayXms(5);
  185.                                 if(Ay<50){
  186.                                   DcOnLine();
  187.                                 }
  188.                         }
  189.                 }
  190.         }
  191. /********************************/
  192. /*      定時中斷0                */
  193. /********************************/
  194. void tim(void) interrupt 1 using 1{
  195. ……………………

  196. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
SUN_TIME_LED.zip (31.59 KB, 下載次數: 61)





評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:122843 發表于 2017-12-17 15:53 | 顯示全部樓層
問題解決了  代碼存在少量BUG  將ADC檢測改為IO 定時3H 折騰
回復

使用道具 舉報

ID:122843 發表于 2018-1-25 19:44 | 顯示全部樓層
測試結果滿意  光伏板采用小功率的  5V 2W   
回復

使用道具 舉報

ID:140183 發表于 2018-1-30 06:37 | 顯示全部樓層
很好的資料,參考參考..........
回復

使用道具 舉報

ID:556770 發表于 2019-9-22 16:34 | 顯示全部樓層
不錯,學習好資料
回復

使用道具 舉報

ID:237797 發表于 2019-9-24 11:41 | 顯示全部樓層
把原理圖貼出來
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 男人天堂av网| 日本福利一区 | 在线色网 | 欧美一级黄视频 | 在线看av网址 | 国产欧美精品一区二区 | 久久久久国产精品一区 | 酒色成人网 | 在线观看av中文字幕 | 中文亚洲视频 | 成年无码av片在线 | 99久久亚洲 | 一区二区不卡高清 | 亚洲精品中文在线 | 综合久久99 | 国产精品久久久久久久久久免费看 | 欧美日韩国产精品一区二区 | 欧美精品中文字幕久久二区 | 亚洲精品成人 | 亚洲国产精品成人无久久精品 | www.亚洲一区 | 欧美日韩精品一区二区三区视频 | 一级做a毛片 | 国产精品免费一区二区三区四区 | 国产成人精品网站 | 日韩精品在线观看网站 | 一区二区三区韩国 | 国产午夜精品久久久 | 超碰免费在 | 久久y| 亚洲精品乱码久久久久久按摩观 | 日韩精品一区二区三区 | 色吧色综合 | 亚洲一区欧美 | 先锋av资源网 | 欧美日韩国产精品一区 | 成人国产精品一级毛片视频毛片 | 欧美中文字幕一区二区三区亚洲 | 欧美二三区 | 97精品国产| 亚洲成年在线 |