找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机控制D2灯亮了之后就不灭,问大神改怎么修改

查看数: 3410 | 评论数: 10 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-6-11 12:08

正文摘要:

单片机源程序如下: #include<reg51.h> #define uint unsigned int #define uchar unsigned char sbit led1 = P1^0; sbit led2 = P1^1; void main() {        &nbs ...

回复

ID:733205 发表于 2020-7-21 15:38
你这个用定时器触发中断,但是定时完一次之后你这个定时器需要重新启动,才能再次开始定时,然后进入中断才会反转
ID:436885 发表于 2020-6-12 01:31
int x=0,y=0; 放到外面去做全局变量
ID:776029 发表于 2020-6-11 19:57
wulin 发表于 2020-6-11 16:39
楼主局部变量int x=0,y=0;,也就是每次进入中断都清0,永远也加不到想要的数。只有把x、y设为全局变量或局 ...

好的多谢
ID:776029 发表于 2020-6-11 19:49
左眼 发表于 2020-6-11 18:06
把在定时器0的中断服务函数里的int前面加上static就行了。你的错误出现在每一次定时器中断进入你都会重置x ...

懂了多谢
ID:673128 发表于 2020-6-11 18:06
把在定时器0的中断服务函数里的int前面加上static就行了。你的错误出现在每一次定时器中断进入你都会重置x,y值,导致其每次都是0开始,1结束。对于其为什么会亮,是因为你电路图有问题的,没有上拉或下拉电阻,你的端口值是不确定的,似乎是低电平,导致通电就亮。建议买块板子,不要用仿真,新手用实物,等你本事到了再用仿真。
ID:24758 发表于 2020-6-11 16:50
另外y的值设的有点大,时间长得让人怀疑是不是有问题
ID:213173 发表于 2020-6-11 16:39
楼主局部变量int x=0,y=0;,也就是每次进入中断都清0,永远也加不到想要的数。只有把x、y设为全局变量或局部静态变量才能达到楼主想要的效果。
void timer () interrupt 1
{
        static unsigned char x=0,y=0;
        TH0=0x3C; //计数初值重装载
        TL0=0xB0;
        if(led2==0)
        {              
                x++;
                if(x==40)
                {
                        led2=1;
                        x=0;
                }
        }
        if(led2==1)
        {
                y++;
                if(y==200)
                {
                        led2=0;
                        y=0;
                }
        }
}
ID:24758 发表于 2020-6-11 16:04


你在定时器中断中定义的x,y是局部变量,每进入一次中断都会被重新赋值为0,所以它们永远不会达到你设置的改变条件。
ID:332444 发表于 2020-6-11 15:32
定时器里面的变量或声明为公共变量或声明为静态变量。否则进入中断变量始终为0。
ID:776029 发表于 2020-6-11 15:18
我想做一个手控灯,一个自动灯,但是那个自动灯亮了就不灭了

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

Powered by 单片机教程网

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