找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机定时器流水灯程序问题

[复制链接]
跳转到指定楼层
楼主
小白刚学用定时写了个1秒闪灯没问题,可是写流水单就出现问题了,图片是程序运行状态,麻烦大家指教一下

单片机源程序如下:
#include "reg52.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
void main()
{
        uint cnt;
        uchar sec=0;
        TMOD=0x01;
        TH0=0xB8;
        TL0=0x00;
        TR0=1;
        while(1)
        {
                if(TF0==1)
                {
                        TF0=0;
                        TH0=0xB8;
                        TL0=0x00;
                        cnt++;
                        if(cnt>=50)
                        {
                                cnt=0;
                                P0=_crol_(sec,1);
                                sec++;
                                if(sec>=8)
                                {
                                        sec=0;
                                }
                        }
                }
        }
}

9.png (33.66 KB, 下载次数: 32)

9.png

1.png (14.76 KB, 下载次数: 39)

1.png

2.png (13.46 KB, 下载次数: 21)

2.png

3.png (9.54 KB, 下载次数: 25)

3.png

4.png (9.1 KB, 下载次数: 25)

4.png

5.png (8.38 KB, 下载次数: 27)

5.png

6.png (10.68 KB, 下载次数: 27)

6.png

7.png (8.68 KB, 下载次数: 30)

7.png

8.png (8.84 KB, 下载次数: 32)

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

使用道具 举报

沙发
ID:914633 发表于 2021-7-10 16:00 | 只看该作者
1.灯是低电平亮2.移位那里有错,你对sec进行移位有错。
回复

使用道具 举报

板凳
ID:213173 发表于 2021-7-10 21:43 | 只看该作者
#include "reg52.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
void main()
{
        uint cnt;
        uchar sec=0;
        TMOD=0x01;
        TH0=0xB8;
        TL0=0x00;
        TR0=1;
        P0=0xfe;
        while(1)
        {
                if(TF0==1)
                {
                        TF0=0;
                        TH0=0xB8;
                        TL0=0x00;
                        cnt++;
                        if(cnt>=50)
                        {
                                cnt=0;
                                P0=_crol_(P0,1);
                        }
                }
        }
}
回复

使用道具 举报

地板
ID:887202 发表于 2021-7-14 11:47 | 只看该作者
光看你的图就知道问题在哪里了,你的sec这个变量在循环里累加,一开始是0,然后是1,2,3.....但是你要转换为二进制去看啊,其实你的sec是0000,0001,0010,0011,0100......这样子变化的,所以根本没有流水灯的效果嘛,要通过移位操作才行,不能累加。
回复

使用道具 举报

5#
ID:57657 发表于 2021-7-14 12:12 | 只看该作者
P0=~_crol_(1,sec);
回复

使用道具 举报

6#
ID:950257 发表于 2021-7-14 14:52 | 只看该作者
兄弟的你sec进行移位有错,是移位操作,不是累加
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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