欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機控制D2燈亮了之后就不滅,問大神改怎么修改

[復(fù)制鏈接]
ID:776029 發(fā)表于 2020-6-11 12:08 | 顯示全部樓層 |閱讀模式
51hei圖片20200611120720.png

單片機源程序如下:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char

sbit led1 = P1^0;
sbit led2 = P1^1;
void main()
{

        
                IT0 = 1;//設(shè)置外部中斷觸發(fā)方式為 下降沿觸發(fā)
                EX0 = 1;//打開外部中斷0
                EA = 1;//打開中斷總開關(guān)        
                TMOD=0x01; //T0定時方式1
                   TH0=0x3C; //預(yù)置計數(shù)初值
                   TL0=0xB0;
                   ET0=1; //開T0中斷
                   TR0=1; //啟動T0   
                while(1);
}

void change_led() interrupt 0
{
        led1 = ~led1;
}        
void timer () interrupt 1
{
        int x=0,y=0;
        if(led2==0)
        {              
                x++;
                if(x==40)
                {
                        led2=1;
                        x=0;
                }
                TH0=0x3C; //計數(shù)初值重裝載
                TL0=0xB0;        
        }
        if(led2==1)
        {
                y++;
                if(y==200)
                {
                        led2=0;
                        y=0;
                }
                TH0=0x3C; //計數(shù)初值重裝載
                TL0=0xB0;
        }
        
}

D2燈亮了之后就不滅,代碼應(yīng)該怎么修改啊

回復(fù)

使用道具 舉報

ID:776029 發(fā)表于 2020-6-11 15:18 | 顯示全部樓層
我想做一個手控?zé)簦粋自動燈,但是那個自動燈亮了就不滅了
回復(fù)

使用道具 舉報

ID:332444 發(fā)表于 2020-6-11 15:32 | 顯示全部樓層
定時器里面的變量或聲明為公共變量或聲明為靜態(tài)變量。否則進入中斷變量始終為0。
回復(fù)

使用道具 舉報

ID:24758 發(fā)表于 2020-6-11 16:04 | 顯示全部樓層
51hei圖片20200611160403.png

你在定時器中斷中定義的x,y是局部變量,每進入一次中斷都會被重新賦值為0,所以它們永遠(yuǎn)不會達(dá)到你設(shè)置的改變條件。
回復(fù)

使用道具 舉報

ID:213173 發(fā)表于 2020-6-11 16:39 | 顯示全部樓層
樓主局部變量int x=0,y=0;,也就是每次進入中斷都清0,永遠(yuǎn)也加不到想要的數(shù)。只有把x、y設(shè)為全局變量或局部靜態(tài)變量才能達(dá)到樓主想要的效果。
void timer () interrupt 1
{
        static unsigned char x=0,y=0;
        TH0=0x3C; //計數(shù)初值重裝載
        TL0=0xB0;
        if(led2==0)
        {              
                x++;
                if(x==40)
                {
                        led2=1;
                        x=0;
                }
        }
        if(led2==1)
        {
                y++;
                if(y==200)
                {
                        led2=0;
                        y=0;
                }
        }
}
回復(fù)

使用道具 舉報

ID:24758 發(fā)表于 2020-6-11 16:50 | 顯示全部樓層
另外y的值設(shè)的有點大,時間長得讓人懷疑是不是有問題
回復(fù)

使用道具 舉報

ID:673128 發(fā)表于 2020-6-11 18:06 | 顯示全部樓層
把在定時器0的中斷服務(wù)函數(shù)里的int前面加上static就行了。你的錯誤出現(xiàn)在每一次定時器中斷進入你都會重置x,y值,導(dǎo)致其每次都是0開始,1結(jié)束。對于其為什么會亮,是因為你電路圖有問題的,沒有上拉或下拉電阻,你的端口值是不確定的,似乎是低電平,導(dǎo)致通電就亮。建議買塊板子,不要用仿真,新手用實物,等你本事到了再用仿真。
回復(fù)

使用道具 舉報

ID:776029 發(fā)表于 2020-6-11 19:49 | 顯示全部樓層
左眼 發(fā)表于 2020-6-11 18:06
把在定時器0的中斷服務(wù)函數(shù)里的int前面加上static就行了。你的錯誤出現(xiàn)在每一次定時器中斷進入你都會重置x ...

懂了多謝
回復(fù)

使用道具 舉報

ID:776029 發(fā)表于 2020-6-11 19:57 | 顯示全部樓層
wulin 發(fā)表于 2020-6-11 16:39
樓主局部變量int x=0,y=0;,也就是每次進入中斷都清0,永遠(yuǎn)也加不到想要的數(shù)。只有把x、y設(shè)為全局變量或局 ...

好的多謝
回復(fù)

使用道具 舉報

ID:436885 發(fā)表于 2020-6-12 01:31 | 顯示全部樓層
int x=0,y=0; 放到外面去做全局變量
回復(fù)

使用道具 舉報

ID:733205 發(fā)表于 2020-7-21 15:38 | 顯示全部樓層
你這個用定時器觸發(fā)中斷,但是定時完一次之后你這個定時器需要重新啟動,才能再次開始定時,然后進入中斷才會反轉(zhuǎn)
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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