欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
太陽能晚間定時小夜燈的單片機源程序與PCB
[打印本頁]
作者:
lhlbest
時間:
2017-12-2 21:57
標題:
太陽能晚間定時小夜燈的單片機源程序與PCB
好久沒來51HEI了。亂折騰 最近做了一套太陽能定時小夜燈 簡單 勿噴
pcb板:
QQ截圖20171202215116.png
(35.07 KB, 下載次數: 70)
下載附件
2017-12-2 21:55 上傳
單片機源程序如下:
#include "reg51.h"
#include "intrins.h"
#define FOSC 11059200L
//#define FOSC 24000000L
typedef unsigned char BYTE;
typedef unsigned int WORD;
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xC9;
sfr P5M0 = 0xCA;
sfr P6M1 = 0xCB;
sfr P6M0 = 0xCC;
sfr P7M1 = 0xE1;
sfr P7M0 = 0xE2;
sfr AUXR = 0x8e; //輔助寄存器
sfr ADC_CONTR = 0xBC; //ADC控制寄存器
sfr ADC_RES = 0xBD; //ADC高8位結果
sfr ADC_LOW2 = 0xBE; //ADC低2位結果
sfr P1ASF = 0x9D; //P1口第2功能控制寄存器
#define ADC_POWER 0x80 //ADC電源控制位
#define ADC_FLAG 0x10 //ADC完成標志
#define ADC_START 0x08 //ADC起始控制位
#define ADC_SPEEDLL 0x00 //540個時鐘
#define ADC_SPEEDL 0x20 //360個時鐘
#define ADC_SPEEDH 0x40 //180個時鐘
#define ADC_SPEEDHH 0x60 //90個時鐘
WORD second = 0;
WORD minute = 0;
WORD hour = 0;
BYTE Ax;//電池ADC
BYTE Ay;//SUN_BT_CH
sbit Cd = P1^4;//充電
sbit LED0 = P3^0;
sbit LED1 = P3^1;
sbit LED2 = P3^2;
sbit LED3 = P3^3;
sbit LED4 = P3^6;
sbit LED5 = P3^7;
sbit LED6 = P1^0;
sbit LED7 = P1^1;
sbit LED8 = P1^2;
void InIt();
void DelayXms(WORD n);
void InitADC();
BYTE GetADC(BYTE ch);
void DcTest();
void InIt()
{
Cd = 1;
LED0 = 1;
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
LED6 = 1;
LED7 = 1;
LED8 = 1;
}
/*----------------------------
軟件延時
----------------------------*/
void DelayXms( WORD n ) //@12.000MHz
{
BYTE i, j;
do{
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
}while(--n);
}
/*---------------------------
ADC初始化
----------------------------*/
void InitADC(){
P1ASF = 0x11; //設置P1.0,P1.4口為AD口
ADC_RES = 0; //清除結果寄存器
ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
DelayXms(2); //ADC上電并延時
}
/*----------------------------
ADC檢測
----------------------------*/
BYTE GetADC(BYTE ch)
{
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
_nop_(); //等待4個NOP
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));//等待ADC轉換完成
ADC_CONTR &= ~ADC_FLAG; //Close ADC
return ADC_RES; //返回ADC結果
}
/*---------------------------
定時器T0中斷初始化
----------------------------*/
void TimInt(){
TMOD |=0x01;//定時器0 10ms in 12M crystal 用于計時
TH0=0xd8;
TL0=0xf0;
ET0=1;
TR0=0;
}
/*-----------------------------
電池充電檢測
-----------------------------*/
void DcTest(){
if((Ax<=115)||(Ax>=235)){//電池故障或充滿
Cd = 0;
}
if (115<Ax<235){//充電
Cd = 1;
}
}
/*-----------------------------
電池照明
------------------------------*/
void DcOnLine(){
TR0=1;
DelayXms(100);
LED0 = 0;
LED1 = 0;
LED2 = 0;
LED3 = 0;
LED4 = 0;
LED5 = 0;
LED6 = 0;
LED7 = 0;
LED8 = 0;
if(hour == 3){
LED0 = 1;
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
LED6 = 1;
LED7 = 1;
LED8 = 1;
}
}
/*----------------------------
主函數
----------------------------*/
void main(){
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
P6M0 = 0x00;
P6M1 = 0x00;
P7M0 = 0x00;
P7M1 = 0x00;
InIt();
InitADC();
TimInt();
while(1){
Ax=GetADC(5);
Ay=GetADC(3);
DcTest();
if(Ay<50){
DelayXms(5);
if(Ay<50){
DcOnLine();
}
}
}
}
/********************************/
/* 定時中斷0 */
/********************************/
void tim(void) interrupt 1 using 1{
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
SUN_TIME_LED.zip
(31.59 KB, 下載次數: 61)
2017-12-2 21:57 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
lhlbest
時間:
2017-12-17 15:53
問題解決了 代碼存在少量BUG 將ADC檢測改為IO 定時3H 折騰
作者:
lhlbest
時間:
2018-1-25 19:44
測試結果滿意 光伏板采用小功率的 5V 2W
作者:
qxdqx
時間:
2018-1-30 06:37
很好的資料,參考參考..........
作者:
fankechang
時間:
2019-9-22 16:34
不錯,學習好資料
作者:
lclbf
時間:
2019-9-24 11:41
把原理圖貼出來
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1