标题: 如何用51单片机和定时计数器设计一个按2s交替闪烁的三盏灯系统 求思路 [打印本页]

作者: xiaohukiku    时间: 2020-5-19 09:20
标题: 如何用51单片机和定时计数器设计一个按2s交替闪烁的三盏灯系统 求思路
如题
作者: stcx    时间: 2020-5-19 17:27
点亮灯1
关闭灯3
延时2s
点亮灯2
关闭灯1
延时2s
点亮灯3
关闭灯2
延时2s
作者: 老帅比    时间: 2020-5-20 11:39
stcx 发表于 2020-5-19 17:27
点亮灯1
关闭灯3
延时2s

做一个循环,在循环体内,三个灯依次轮流为低电平,并加入延时函数为两秒
作者: 新征途    时间: 2020-5-20 16:09
如果楼主想要精确延时的话,推荐使用定时器中断,再加一个全局变量或者是静态的局部变量实现。每2s进一次中断,变量值也随之改变,当第三次进入时,再将其赋初值,然后主函数里通过判断变量值来点亮不同的灯。
作者: cuihaodianzi    时间: 2020-5-20 18:38
51单片机和定时计数器是什么意思,既要单片机又要定时 又要计数 ?
单片机不是带定时器吗?
作者: 渣渣馬    时间: 2020-5-20 21:12
灯的端口为0时为亮
作者: 渣渣馬    时间: 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;
                }
        }
}
作者: 渣渣馬    时间: 2020-5-20 21:14
灯的端口为0时为点亮,希望有用!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1