找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7634|回复: 8
收起左侧

求助 关于光敏电阻模块的单片机程序

[复制链接]
ID:137704 发表于 2017-12-26 16:48 | 显示全部楼层 |阅读模式
大神帮我看看 一下这个程序写的对不对?





#include<reg51.h>                 //库文件
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int  //宏定义无符号整型

/********************************************************************
                            I/O定义
*********************************************************************/
sbit LED1=P1^3;
sbit LED2=P1^4;
sbit LED3=P1^5;
sbit LED4=P1^6;        //定义单片机P1.3 4 5 6 为LED灯
sbit DOUT=P1^0;         //定义单片机P1.0为光敏DO输出
/********************************************************************
                            延时函数
*********************************************************************/
void delay()//延时程序
{
uchar m,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
/********************************************************************
                            主函数
*********************************************************************/
void main()
{
        while(1)   //无限循环
        {
          LED1=0;
          LED2=0;
          LED3=0;
          LED4=0;           //熄灭P1.0口灯
         if(DOUT==0)//当DO输出低电平时
         {
            delay();//延时抗干扰
                if(DOUT==0)//确定 DO口输出低电平
            {
                 LED1=1;
                            LED2=1;
                         LED3=1;
                         LED4=1;               
           //点亮LED灯
                }
         }
        }
}        

回复

使用道具 举报

ID:164602 发表于 2017-12-27 08:26 | 显示全部楼层
思路没什么问题:光敏输出低电平,说明光线很亮,就关LED灯。是不是这意思?
具体有没有语法错误,我没验证。
有一点要说明,你的程序中,点亮LED用的高电平,这不好。因为单片机的高电平输出电流很小,而低电平输入电流可以较大(准双向口的特点),所以一般我们都是低电平开LED灯的。
回复

使用道具 举报

ID:137704 发表于 2017-12-28 07:44 | 显示全部楼层
HC6800-ES-V2.0 发表于 2017-12-27 08:26
思路没什么问题:光敏输出低电平,说明光线很亮,就关LED灯。是不是这意思?
具体有没有语法错误,我没验 ...

谢谢指点 现在这个程序烧录后光敏这一块似乎没什么反应 不管有光没光 LED灯都会亮  现在用的是STC12C5206AD的芯片
回复

使用道具 举报

ID:164602 发表于 2017-12-28 08:38 | 显示全部楼层
你的程序,流程上有点错误。
以下是我在你的程序基础上,按照我的板子电路修改过的程序,是无光照时LED不亮,有光照时LED亮。
#include<reg51.h>                 //库文件
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int  //宏定义无符号整型

/********************************************************************
                            I/O定义
*********************************************************************/
//sbit LED1=P1^3;
//sbit LED2=P1^4;
//sbit LED3=P1^5;
//sbit LED4=P1^6;        //定义单片机P1.3 4 5 6 为LED灯
#define LED P2
sbit DOUT=P1^0;         //定义单片机P1.0为光敏DO输出
/********************************************************************
                            延时函数
*********************************************************************/
void delay()//延时程序
{
uchar m,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
/********************************************************************
                            主函数
*********************************************************************/
void main()
{
                DOUT=1;
                LED=0xff;
        while(1)   //无限循环
        {
//          LED1=0;
//          LED2=0;
//          LED3=0;
//          LED4=0;           //熄灭P1.0口灯
         if(DOUT==0)//当DO输出低电平时
         {
            delay();//延时抗干扰
                if(DOUT==0)//确定 DO口输出低电平
            {
//                 LED1=1;
//                            LED2=1;
//                         LED3=1;
//                         LED4=1;               
                        LED=0x00;
           //点亮LED灯
                }
                                else
                                {
                                        LED=0xff;
                                }
         }
        }
}        

我的程序适用我的板子电路如图:
1.jpg

你看看,你的程序是什么地方不对。
回复

使用道具 举报

ID:137704 发表于 2017-12-28 10:20 | 显示全部楼层
HC6800-ES-V2.0 发表于 2017-12-28 08:38
你的程序,流程上有点错误。
以下是我在你的程序基础上,按照我的板子电路修改过的程序,是无光照时LED不 ...

谢谢了   照你的方法解决了
回复

使用道具 举报

ID:164602 发表于 2017-12-28 14:01 | 显示全部楼层
溧阳科燕 发表于 2017-12-28 10:20
谢谢了   照你的方法解决了

你的问题,其实就是逻辑运算。
逻辑与:&&,它左右两个条件同时成立,才为真——(有零得零)
逻辑或:||,它左右两个条件任有一个成立,就为真——(有一得一)
所以,不需要两个if的,一条if语句,可以同时判断(理论上)无穷多个条件。
回复

使用道具 举报

ID:137704 发表于 2017-12-28 14:38 | 显示全部楼层
HC6800-ES-V2.0 发表于 2017-12-28 14:01
你的问题,其实就是逻辑运算。
逻辑与:&&,它左右两个条件同时成立,才为真——(有零得零)
逻辑或: ...

恩 这个问题刚摸索着解决了  点亮后如何能让LED定时关闭呢?比如 两个条件同时成立了 我想LED灯在点亮1个小时后关闭,,,望指教
回复

使用道具 举报

ID:164602 发表于 2017-12-29 08:11 | 显示全部楼层
溧阳科燕 发表于 2017-12-28 14:38
恩 这个问题刚摸索着解决了  点亮后如何能让LED定时关闭呢?比如 两个条件同时成立了 我想LED灯在点亮1个 ...

两种方法:
第一:用定时器。优点是单片机自身的资源,不用接线等,操作方便。缺点是定时时间很短,要多次反复定时,且不一定很准,因为你定的时间太长了。
第二:用时间芯片,如DS1302等,优点是计时很方便、准确,还可以有很多的附加功能,如闹钟等,缺点是要设计电路,程序也比较复杂,不过网上到处都是例子,很容易移植。
回复

使用道具 举报

ID:344924 发表于 2018-6-4 20:01 | 显示全部楼层
HC6800-ES-V2.0 发表于 2017-12-28 08:38
你的程序,流程上有点错误。
以下是我在你的程序基础上,按照我的板子电路修改过的程序,是无光照时LED不 ...

你好,我想请教一个问题。不知道你现在会不会看到这条消息。最近在弄个电子设计,c 程序遇到麻烦想问你个问题,希望你看到能回复下,谢谢~
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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