找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4291|回复: 9
收起左侧

用STC15W408S制作自动感应夜灯

[复制链接]
ID:205540 发表于 2017-5-28 06:46 | 显示全部楼层 |阅读模式
STCW408S单片机价格低,功能强大,适应电压宽,特别适合充电锂电池供电设备
以下是我开发测试成功的自动感应夜灯源程序,效果很好。
主程序:“main.c”
#include  "reg51.H"
#include  "ADC.H"

#define MAIN_Fosc     12000000L

void  delay_ms(unsigned int ms);
unsigned char n1;
//sbit HP37 = P3^7;
sbit LED  = P3^6;

void main()
{  
        //ADC
        unsigned int i;
        unsigned char channel;

        channel=0;
        P3M0=1;
        P3M1=0;
        P1ASF=0xFF;
        ADC_RES=0;
        ADC_CONTR=ADC_POWER|ADC_SPEEDLL | ADC_START | channel;
        for(i=0;i<10000;i++);
        IE=0xA0;
       
        //LED
        IT0=0;         //低电平触发 IT0=1; 下降沿触发
    EX0=1;      
    EA=1;
        LED=0;

        while(1)
        {
                //ADC
                ADC(0);         //查询法//读2次
                if(flag==1)
                {
                        flag=0;
                }
                ADC(0);
                if(flag==1)
                {
                        flag=0;
                }
                v0=ADCtmp;

                ADC(2);          //读2次
                if(flag==1)
                {
                        flag=0;
                }
                ADC(2);
                if(flag==1)
                {
                        flag=0;
                }
                v2=ADCtmp;

                //LED               
                LED=0;
                if (v0 < 512)
                {
                        if (v2<320 || v2>680)
                        {
                                LED = 1;
                                for(n1=0;n1<60;n1++)
                                {
                                delay_ms(1200);   //调用延时程序
                                        ADC(2);                            //检查有无人体运动
                                        if(flag==1)
                                        {
                                                flag=0;
                                        }                 
                                        ADC(2);                          
                                        if(flag==1)
                                        {
                                                flag=0;
                                        }
                                        v2=ADCtmp;
                                        if (v2<320 || v2>680) n1=0;  //如果有人体运动,计数重新开始
                                }
                                LED = 0;
                                delay_ms(800);
                        }
                        LED = 0;   
                        delay_ms(800);
                }


        }

}

void  delay_ms(unsigned int ms)
{
     unsigned int i;
         do{
              i = MAIN_Fosc / 14000;
                  while(--i)        ;   //14T per loop
     }while(--ms);
}

头文件"ADC.H"
#include "ctype.h"
#include "intrins.h"

#define ADC_POWER     0x80

#define ADC_FLAG      0x10
#define ADC_START     0x08
#define ADC_SPEEDLL   0x00
#define ADC_SPEEDL    0x20
#define ADC_SPEEDH    0x40
#define ADC_SPEEDHH   0x60

sfr AUXR      =0x8E;
sfr ADC_CONTR =0xBC;
sfr ADC_RES   =0xBD;
sfr ADC_RESL  =0xBE;
sfr P1ASF     =0x9D;

sfr  P3M1=0xB1;
sfr  P3M0=0xB2;

bit flag=1;
unsigned int v0,v2,ADCtmp=0;
void ADC(unsigned char ch);         //查询法



void ADC(unsigned char ch)
{
        ADC_CONTR=ADC_POWER|ADC_SPEEDLL | ADC_START | ch;
    _nop_();    //至少等待4个空操作指令后才开始读ADC标志位                  
    _nop_();
    _nop_();
    _nop_();
        _nop_();                       
    _nop_();
    while (!(ADC_CONTR & ADC_FLAG));
    ADC_CONTR &= ~ADC_FLAG;         
        ADCtmp=(ADC_RES*4+ADC_RESL);
        flag=1;
}



回复

使用道具 举报

ID:205540 发表于 2017-5-28 08:53 | 显示全部楼层
G:\手机资料\20170528、IMG_20170325_080244
回复

使用道具 举报

ID:1 发表于 2017-5-28 16:37 | 显示全部楼层
好东东啊,楼主 图片可上传附件啊,是遇到了什么问题吗?
回复

使用道具 举报

ID:185367 发表于 2017-5-28 17:33 | 显示全部楼层
楼主把附件上传上来让大家学习一下吧,另外把做的实物图片也给大家晒晒吧
回复

使用道具 举报

ID:192661 发表于 2017-5-28 20:25 | 显示全部楼层
zhichi !!!!!!!!!!!!!!!!
回复

使用道具 举报

ID:60656 发表于 2017-5-28 22:39 | 显示全部楼层
用什么做传感器的?
回复

使用道具 举报

ID:246779 发表于 2017-11-16 21:53 | 显示全部楼层
我想学着用下STC15W408S,大神能不能给点学习资料或者告诉这个我怎么烧录程序?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表