找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 304|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

當(dāng)中斷切換時(shí),從當(dāng)前燈切換循環(huán)點(diǎn)亮熄滅。我沒懂什么意思,這個(gè)意思是指關(guān)機(jī)后啟...

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1147078 發(fā)表于 2025-4-5 16:05 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
老實(shí)了,我把程序改了一下讓計(jì)數(shù)器做最簡單的計(jì)數(shù)工作。
#include <REGX51.H>
void Delay(int ms);           
void Timer0_Init(void);           
void UpdateLED(void);

char LED = 0;
bit direction = 0;           
bit auto_mode = 0;  
unsigned int counter = 0; // 將計(jì)數(shù)器移出中斷

void main()
{
    P2 = 0xFF;
    Timer0_Init();  

    while(1)
    {
        if(P3_0 == 0)
        {
            Delay(5);
            if(P3_0 == 0)
            {
                while(P3_0 == 0);
                Delay(5);  
                if(direction != 0)  // 如果當(dāng)前方向不同,只改變方向
                {
                    direction = 0;
                }  
                auto_mode = 1;     
            }
        }

        if(P3_1 == 0)
        {
            Delay(5);
            if(P3_1 == 0)
            {
                while(P3_1 == 0);
                Delay(5);
                if(direction != 1)  // 如果當(dāng)前方向不同,只改變方向
                {
                    direction = 1;
                }  
                auto_mode = 1;   
            }
        }

        // 主循環(huán)中處理LED更新
        if(counter >= 10)
        {
            counter = 0;
            if(auto_mode)
            {
                UpdateLED();
            }
        }
    }
}

void Timer0_ISR(void) interrupt 1
{
    TH0 = 0xB0;  
    TL0 = 0x18;

    // 只做最簡單的計(jì)數(shù)工作
    counter++;
}

void UpdateLED(void)
{
    if(direction == 0)  // 向右循環(huán)
    {
        LED++;
        if(LED >= 8)
        {
            LED = 0;
        }
    }
    else  // 向左循環(huán)
    {
        if(LED == 0)
        {
            LED = 7;  // 從0減到7,實(shí)現(xiàn)循環(huán)
        }
        else
        {
            LED--;
        }
    }
    P2 = ~(0x01 << LED);  // 更新LED顯示
}

void Timer0_Init(void)
{
    TMOD &= 0xF0;  
    TMOD |= 0x01;
    TH0 = 0xB0;   
    TL0 = 0x18;
    ET0 = 1;  //允許定時(shí)器0中斷     
    EA = 1;   //開啟總中斷     
    TR0 = 1;      
}

void Delay(int ms)
{
    int i,j;
    while(ms--)
    {
        for(i=1;i<=ms;i++)
            for(j=1;j<=300;j++);
    }
}

現(xiàn)在他加了一條要求。當(dāng)中斷切換時(shí),從當(dāng)前燈切換循環(huán)點(diǎn)亮熄滅。我沒懂什么意思,這個(gè)意思是指關(guān)機(jī)后啟動(dòng)燈還是在那個(gè)位置還是什么意思?

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:462827 發(fā)表于 2025-4-5 17:58 | 只看該作者
意思可能是,比如從左到右為D1到D8總共8個(gè)燈,當(dāng)前若是在亮D5燈的時(shí)候,如果按鍵變成從左到右時(shí)是從 D5 D6 這樣亮下去而不是從頭D1開始亮;如果按鍵變成從右到左時(shí)從 D5 D4 這樣亮下去而不是從D8開始亮起。具體是不是這樣,你得問出題人,臉皮厚一點(diǎn),問清楚為止。
回復(fù)

使用道具 舉報(bào)

板凳
ID:469589 發(fā)表于 2025-4-17 09:36 | 只看該作者
其實(shí)小學(xué)語文基礎(chǔ)很重要,我就不好,導(dǎo)致應(yīng)用題總是要比別人多費(fèi)點(diǎn)時(shí)間,
雖然我的智商不低,但效率和能力明顯是打折扣的。
回復(fù)

使用道具 舉報(bào)

地板
ID:1133081 發(fā)表于 2025-4-17 14:27 | 只看該作者
就是老師舉右手,你從1數(shù)到10循環(huán),老師舉左手,你從10數(shù)到1循環(huán)。如果老師換手,你就得在當(dāng)前的數(shù)向上或向下數(shù)數(shù),不許從頭數(shù)。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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