找回密码
 立即注册

QQ登录

只需一步,快速开始

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

如何用51单片机和定时计数器设计一个按2s交替闪烁的三盏灯系统 求思路

[复制链接]
跳转到指定楼层
楼主
ID:755420 发表于 2020-5-19 09:20 来自触屏版 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:749852 发表于 2020-5-19 17:27 | 只看该作者
点亮灯1
关闭灯3
延时2s
点亮灯2
关闭灯1
延时2s
点亮灯3
关闭灯2
延时2s
回复

使用道具 举报

板凳
ID:756427 发表于 2020-5-20 11:39 | 只看该作者
stcx 发表于 2020-5-19 17:27
点亮灯1
关闭灯3
延时2s

做一个循环,在循环体内,三个灯依次轮流为低电平,并加入延时函数为两秒
回复

使用道具 举报

地板
ID:756622 发表于 2020-5-20 16:09 | 只看该作者
如果楼主想要精确延时的话,推荐使用定时器中断,再加一个全局变量或者是静态的局部变量实现。每2s进一次中断,变量值也随之改变,当第三次进入时,再将其赋初值,然后主函数里通过判断变量值来点亮不同的灯。
回复

使用道具 举报

5#
ID:149144 发表于 2020-5-20 18:38 | 只看该作者
51单片机和定时计数器是什么意思,既要单片机又要定时 又要计数 ?
单片机不是带定时器吗?
回复

使用道具 举报

6#
ID:715652 发表于 2020-5-20 21:12 | 只看该作者
灯的端口为0时为亮
回复

使用道具 举报

7#
ID:715652 发表于 2020-5-20 21:13 | 只看该作者
#include<reg51.h>
sbit D1=P0^0;  //可以找I/O口的任意三个端口
sbit D2=P1^1;
sbit D3=P2^2;
void DelayMs(int x)  //延时
{
        int i;
        while(x--)        for(i=0;i<120;i++);
}
void init()  //初始化
{
        TMOD=0x02;  //T0方式2定时 自动重装的方式
        TR0=1;     //开寄存器
        TH0=256-200;  //设置200us的初值
}
void main()
{
        int t=0,t1=0;
        init();
        while(1)
        {
                if(TF0)        TF0=0,t++;  //清除溢出标志
                if(t==10000) t=0,t0++;   //当t为10000为2s
                switch(t0)
                {
                        case 0:D1=0,D2=1,D3=1;break;
                        case 1:D1=1,D2=0,D3=1;break;
                        case 2:D1=1,D2=1,D3=0;break;
                        default:t=0;
                }
        }
}
回复

使用道具 举报

8#
ID:715652 发表于 2020-5-20 21:14 | 只看该作者
灯的端口为0时为点亮,希望有用!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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