找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 251|回复: 3
打印 上一主题 下一主题
收起左侧

当中断切换时,从当前灯切换循环点亮熄灭。我没懂什么意思,这个意思是指关机后启...

[复制链接]
跳转到指定楼层
楼主
ID:1147078 发表于 2025-4-5 16:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
老实了,我把程序改了一下让计数器做最简单的计数工作。
#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; // 将计数器移出中断

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)  // 如果当前方向不同,只改变方向
                {
                    direction = 0;
                }  
                auto_mode = 1;     
            }
        }

        if(P3_1 == 0)
        {
            Delay(5);
            if(P3_1 == 0)
            {
                while(P3_1 == 0);
                Delay(5);
                if(direction != 1)  // 如果当前方向不同,只改变方向
                {
                    direction = 1;
                }  
                auto_mode = 1;   
            }
        }

        // 主循环中处理LED更新
        if(counter >= 10)
        {
            counter = 0;
            if(auto_mode)
            {
                UpdateLED();
            }
        }
    }
}

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

    // 只做最简单的计数工作
    counter++;
}

void UpdateLED(void)
{
    if(direction == 0)  // 向右循环
    {
        LED++;
        if(LED >= 8)
        {
            LED = 0;
        }
    }
    else  // 向左循环
    {
        if(LED == 0)
        {
            LED = 7;  // 从0减到7,实现循环
        }
        else
        {
            LED--;
        }
    }
    P2 = ~(0x01 << LED);  // 更新LED显示
}

void Timer0_Init(void)
{
    TMOD &= 0xF0;  
    TMOD |= 0x01;
    TH0 = 0xB0;   
    TL0 = 0x18;
    ET0 = 1;  //允许定时器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++);
    }
}

现在他加了一条要求。当中断切换时,从当前灯切换循环点亮熄灭。我没懂什么意思,这个意思是指关机后启动灯还是在那个位置还是什么意思?

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:462827 发表于 2025-4-5 17:58 | 只看该作者
意思可能是,比如从左到右为D1到D8总共8个灯,当前若是在亮D5灯的时候,如果按键变成从左到右时是从 D5 D6 这样亮下去而不是从头D1开始亮;如果按键变成从右到左时从 D5 D4 这样亮下去而不是从D8开始亮起。具体是不是这样,你得问出题人,脸皮厚一点,问清楚为止。
回复

使用道具 举报

板凳
ID:469589 发表于 2025-4-17 09:36 | 只看该作者
其实小学语文基础很重要,我就不好,导致应用题总是要比别人多费点时间,
虽然我的智商不低,但效率和能力明显是打折扣的。
回复

使用道具 举报

地板
ID:1133081 发表于 2025-4-17 14:27 | 只看该作者
就是老师举右手,你从1数到10循环,老师举左手,你从10数到1循环。如果老师换手,你就得在当前的数向上或向下数数,不许从头数。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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