找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1636|回复: 3
收起左侧

单片机通过不同的按键来控制LED小灯的开启时间的程序问题

[复制链接]
ID:932849 发表于 2021-6-23 15:08 | 显示全部楼层 |阅读模式
刚学单片机,在百度上的复制过来的:
求单片机通过不同的按键来控制LED小灯的开启时间的程序,谢谢例如,p0.0~p0.7 八个按键,依次来控制p1.0口低电平的开启时间,如:
p0.0口按一下,p1.0口变为低电平,持续100毫秒后恢复高电平;
p0.1口按一下,p1.0口变为低电平,持续200毫秒后恢复高电平;
依次类推!
程序约简单越好!谢谢


#include<reg51.h>
#define uchar unsigned char
uchar time,stand;
sbit led=P1^0;
bit flag=0;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
flag=~flag;
if(flag)
    {
    time++;
    if(time>=stand){led=1;TR0=0;}
    }
}
main()
{
uchar sw;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
EA=1;
while(1)
    {
    while(1)
        {
        sw=P0;
        if(sw!=0xff)break;
        }
        time=2;
        sw=~sw;
    while(1)
        {
        sw=sw>>1;
        if(sw!=0)time+=2;
        else break;
        }
        TR0=1;
        led=0;
    }
}



我照上面做的结果LED灯是常亮。哪位大佬帮我看看程序哪里有问题。
回复

使用道具 举报

ID:123289 发表于 2021-6-23 16:03 | 显示全部楼层
构思不好!建议:
1、做个定时器,以形成参考时间钟。例 如每5ms中断一次。
2、做个计时器TC,同时给它做一个起动标记TK。
3、每次中断:
    当TK=1时,就将TC-1,如果TC=0,就将p1.0置1,并将TK清0(即停止计数不再-1了)。
    当TK=0时,就什么也不做。
    初始设置:TK=0。
4、当p0.0口按一下,就让TK=1,同时让TC=100毫秒(20),再将p1.0口变为低电平。
     当p0.1口按一下,就让TK=1,同时让TC=200毫秒(40),再将p1.0口变为低电平。
你看这样行不行。
写程序,要先构思方案,画出流程图,最后再写代码!

回复

使用道具 举报

ID:943276 发表于 2021-6-23 16:05 | 显示全部楼层
yzwzfyz 发表于 2021-6-23 16:03
构思不好!建议:
1、做个定时器,以形成参考时间钟。例 如每5ms中断一次。
2、做个计时器TC,同时给它做 ...

不错大神作品
回复

使用道具 举报

ID:932849 发表于 2021-6-23 23:43 | 显示全部楼层
yzwzfyz 发表于 2021-6-23 16:03
构思不好!建议:
1、做个定时器,以形成参考时间钟。例 如每5ms中断一次。
2、做个计时器TC,同时给它做 ...

谢谢,刚学,对您的建议我还做不来,看来得继续学习。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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