標(biāo)題:
太陽(yáng)能晚間定時(shí)小夜燈的單片機(jī)源程序與PCB
[打印本頁(yè)]
作者:
lhlbest
時(shí)間:
2017-12-2 21:57
標(biāo)題:
太陽(yáng)能晚間定時(shí)小夜燈的單片機(jī)源程序與PCB
好久沒來(lái)51HEI了。亂折騰 最近做了一套太陽(yáng)能定時(shí)小夜燈 簡(jiǎn)單 勿噴
pcb板:
QQ截圖20171202215116.png
(35.07 KB, 下載次數(shù): 70)
下載附件
2017-12-2 21:55 上傳
單片機(jī)源程序如下:
#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位結(jié)果
sfr ADC_LOW2 = 0xBE; //ADC低2位結(jié)果
sfr P1ASF = 0x9D; //P1口第2功能控制寄存器
#define ADC_POWER 0x80 //ADC電源控制位
#define ADC_FLAG 0x10 //ADC完成標(biāo)志
#define ADC_START 0x08 //ADC起始控制位
#define ADC_SPEEDLL 0x00 //540個(gè)時(shí)鐘
#define ADC_SPEEDL 0x20 //360個(gè)時(shí)鐘
#define ADC_SPEEDH 0x40 //180個(gè)時(shí)鐘
#define ADC_SPEEDHH 0x60 //90個(gè)時(shí)鐘
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;
}
/*----------------------------
軟件延時(shí)
----------------------------*/
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; //設(shè)置P1.0,P1.4口為AD口
ADC_RES = 0; //清除結(jié)果寄存器
ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
DelayXms(2); //ADC上電并延時(shí)
}
/*----------------------------
ADC檢測(cè)
----------------------------*/
BYTE GetADC(BYTE ch)
{
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
_nop_(); //等待4個(gè)NOP
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));//等待ADC轉(zhuǎn)換完成
ADC_CONTR &= ~ADC_FLAG; //Close ADC
return ADC_RES; //返回ADC結(jié)果
}
/*---------------------------
定時(shí)器T0中斷初始化
----------------------------*/
void TimInt(){
TMOD |=0x01;//定時(shí)器0 10ms in 12M crystal 用于計(jì)時(shí)
TH0=0xd8;
TL0=0xf0;
ET0=1;
TR0=0;
}
/*-----------------------------
電池充電檢測(cè)
-----------------------------*/
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;
}
}
/*----------------------------
主函數(shù)
----------------------------*/
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();
}
}
}
}
/********************************/
/* 定時(shí)中斷0 */
/********************************/
void tim(void) interrupt 1 using 1{
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
SUN_TIME_LED.zip
(31.59 KB, 下載次數(shù): 61)
2017-12-2 21:57 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
lhlbest
時(shí)間:
2017-12-17 15:53
問題解決了 代碼存在少量BUG 將ADC檢測(cè)改為IO 定時(shí)3H 折騰
作者:
lhlbest
時(shí)間:
2018-1-25 19:44
測(cè)試結(jié)果滿意 光伏板采用小功率的 5V 2W
作者:
qxdqx
時(shí)間:
2018-1-30 06:37
很好的資料,參考參考..........
作者:
fankechang
時(shí)間:
2019-9-22 16:34
不錯(cuò),學(xué)習(xí)好資料
作者:
lclbf
時(shí)間:
2019-9-24 11:41
把原理圖貼出來(lái)
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1