找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8228|回復(fù): 8
收起左側(cè)

求助 關(guān)于光敏電阻模塊的單片機(jī)程序

[復(fù)制鏈接]
ID:137704 發(fā)表于 2017-12-26 16:48 | 顯示全部樓層 |閱讀模式
大神幫我看看 一下這個程序?qū)懙膶Σ粚Γ?br />




#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;        //定義單片機(jī)P1.3 4 5 6 為LED燈
sbit DOUT=P1^0;         //定義單片機(jī)P1.0為光敏DO輸出
/********************************************************************
                            延時函數(shù)
*********************************************************************/
void delay()//延時程序
{
uchar m,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
/********************************************************************
                            主函數(shù)
*********************************************************************/
void main()
{
        while(1)   //無限循環(huán)
        {
          LED1=0;
          LED2=0;
          LED3=0;
          LED4=0;           //熄滅P1.0口燈
         if(DOUT==0)//當(dāng)DO輸出低電平時
         {
            delay();//延時抗干擾
                if(DOUT==0)//確定 DO口輸出低電平
            {
                 LED1=1;
                            LED2=1;
                         LED3=1;
                         LED4=1;               
           //點(diǎn)亮LED燈
                }
         }
        }
}        

回復(fù)

使用道具 舉報(bào)

ID:164602 發(fā)表于 2017-12-27 08:26 | 顯示全部樓層
思路沒什么問題:光敏輸出低電平,說明光線很亮,就關(guān)LED燈。是不是這意思?
具體有沒有語法錯誤,我沒驗(yàn)證。
有一點(diǎn)要說明,你的程序中,點(diǎn)亮LED用的高電平,這不好。因?yàn)閱纹瑱C(jī)的高電平輸出電流很小,而低電平輸入電流可以較大(準(zhǔn)雙向口的特點(diǎn)),所以一般我們都是低電平開LED燈的。
回復(fù)

使用道具 舉報(bào)

ID:137704 發(fā)表于 2017-12-28 07:44 | 顯示全部樓層
HC6800-ES-V2.0 發(fā)表于 2017-12-27 08:26
思路沒什么問題:光敏輸出低電平,說明光線很亮,就關(guān)LED燈。是不是這意思?
具體有沒有語法錯誤,我沒驗(yàn) ...

謝謝指點(diǎn) 現(xiàn)在這個程序燒錄后光敏這一塊似乎沒什么反應(yīng) 不管有光沒光 LED燈都會亮  現(xiàn)在用的是STC12C5206AD的芯片
回復(fù)

使用道具 舉報(bào)

ID:164602 發(fā)表于 2017-12-28 08:38 | 顯示全部樓層
你的程序,流程上有點(diǎn)錯誤。
以下是我在你的程序基礎(chǔ)上,按照我的板子電路修改過的程序,是無光照時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;        //定義單片機(jī)P1.3 4 5 6 為LED燈
#define LED P2
sbit DOUT=P1^0;         //定義單片機(jī)P1.0為光敏DO輸出
/********************************************************************
                            延時函數(shù)
*********************************************************************/
void delay()//延時程序
{
uchar m,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
/********************************************************************
                            主函數(shù)
*********************************************************************/
void main()
{
                DOUT=1;
                LED=0xff;
        while(1)   //無限循環(huán)
        {
//          LED1=0;
//          LED2=0;
//          LED3=0;
//          LED4=0;           //熄滅P1.0口燈
         if(DOUT==0)//當(dāng)DO輸出低電平時
         {
            delay();//延時抗干擾
                if(DOUT==0)//確定 DO口輸出低電平
            {
//                 LED1=1;
//                            LED2=1;
//                         LED3=1;
//                         LED4=1;               
                        LED=0x00;
           //點(diǎn)亮LED燈
                }
                                else
                                {
                                        LED=0xff;
                                }
         }
        }
}        

我的程序適用我的板子電路如圖:
1.jpg

你看看,你的程序是什么地方不對。
回復(fù)

使用道具 舉報(bào)

ID:137704 發(fā)表于 2017-12-28 10:20 | 顯示全部樓層
HC6800-ES-V2.0 發(fā)表于 2017-12-28 08:38
你的程序,流程上有點(diǎn)錯誤。
以下是我在你的程序基礎(chǔ)上,按照我的板子電路修改過的程序,是無光照時LED不 ...

謝謝了   照你的方法解決了
回復(fù)

使用道具 舉報(bào)

ID:164602 發(fā)表于 2017-12-28 14:01 | 顯示全部樓層
溧陽科燕 發(fā)表于 2017-12-28 10:20
謝謝了   照你的方法解決了

你的問題,其實(shí)就是邏輯運(yùn)算。
邏輯與:&&,它左右兩個條件同時成立,才為真——(有零得零)
邏輯或:||,它左右兩個條件任有一個成立,就為真——(有一得一)
所以,不需要兩個if的,一條if語句,可以同時判斷(理論上)無窮多個條件。
回復(fù)

使用道具 舉報(bào)

ID:137704 發(fā)表于 2017-12-28 14:38 | 顯示全部樓層
HC6800-ES-V2.0 發(fā)表于 2017-12-28 14:01
你的問題,其實(shí)就是邏輯運(yùn)算。
邏輯與:&&,它左右兩個條件同時成立,才為真——(有零得零)
邏輯或: ...

恩 這個問題剛摸索著解決了  點(diǎn)亮后如何能讓LED定時關(guān)閉呢?比如 兩個條件同時成立了 我想LED燈在點(diǎn)亮1個小時后關(guān)閉,,,望指教
回復(fù)

使用道具 舉報(bào)

ID:164602 發(fā)表于 2017-12-29 08:11 | 顯示全部樓層
溧陽科燕 發(fā)表于 2017-12-28 14:38
恩 這個問題剛摸索著解決了  點(diǎn)亮后如何能讓LED定時關(guān)閉呢?比如 兩個條件同時成立了 我想LED燈在點(diǎn)亮1個 ...

兩種方法:
第一:用定時器。優(yōu)點(diǎn)是單片機(jī)自身的資源,不用接線等,操作方便。缺點(diǎn)是定時時間很短,要多次反復(fù)定時,且不一定很準(zhǔn),因?yàn)槟愣ǖ臅r間太長了。
第二:用時間芯片,如DS1302等,優(yōu)點(diǎn)是計(jì)時很方便、準(zhǔn)確,還可以有很多的附加功能,如鬧鐘等,缺點(diǎn)是要設(shè)計(jì)電路,程序也比較復(fù)雜,不過網(wǎng)上到處都是例子,很容易移植。
回復(fù)

使用道具 舉報(bào)

ID:344924 發(fā)表于 2018-6-4 20:01 | 顯示全部樓層
HC6800-ES-V2.0 發(fā)表于 2017-12-28 08:38
你的程序,流程上有點(diǎn)錯誤。
以下是我在你的程序基礎(chǔ)上,按照我的板子電路修改過的程序,是無光照時LED不 ...

你好,我想請教一個問題。不知道你現(xiàn)在會不會看到這條消息。最近在弄個電子設(shè)計(jì),c 程序遇到麻煩想問你個問題,希望你看到能回復(fù)下,謝謝~
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表