找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1438|回复: 2
收起左侧

关于单片机LED交通灯程序逻辑的一个小问题

[复制链接]
ID:910079 发表于 2021-11-19 23:49 | 显示全部楼层 |阅读模式
就是按照我的思路敲了一个代码,实现两路通行的,但是我的黄灯闪烁5次,只闪烁了3次就执行下一个函数了,为什么啊,赋值循环次数已经是5次了啊,是哪里冲突了吗?求大佬解答一下
单片机代码如下:

#include<reg51.h>
sbit P01=P0^1;
sbit P04=P0^4;

void delay1ms()
{
   unsigned char i,j;        
         for(i=0;i<10;i++)
          for(j=0;j<33;j++)
           ;                 
}

void delay(unsigned char n)
{
   unsigned char i;
        for(i=0;i<n;i++)
           delay1ms();
}

void Level_Yellow()   //水平黄灯闪烁
{        unsigned char k1;
        
         P0=0XF5;               //1111 1001 - 1111 1010闪烁
        for(k1=0;k1<5;k1++)     //  闪烁5次
        { P01=~P01;
         delay(200);               
        }        
}
void Level_Pass()     //水平通行
{
        unsigned char k3;
        
        P0=0XF3;
        for(k3=0;k3<10;k3++)
        delay(200);

}

void Vertical_Pass()   //垂直通行
{
        unsigned char k4;
        
        P0=0Xde;
        for(k4=0;k4<10;k4++)
        delay(200);

}

void Vertical_Yellow()  //垂直黄灯闪烁
{        unsigned char k2;
        
         P0=0XEE;
        for(k2=0;k2<5;k2++)
        { P04=~P04;
         delay(200);               
        }        
}
void main(void)
{
while(1)
{
        Level_Pass();
        Level_Yellow ();
        
        Vertical_Pass();
        Vertical_Yellow();
        
}        


}

到这里就闪3次

到这里就闪3次

这里是函数段,已经赋值5次了啊

这里是函数段,已经赋值5次了啊

这里是主程序部分

这里是主程序部分

led交通.zip

59.68 KB, 下载次数: 5

回复

使用道具 举报

ID:624769 发表于 2021-11-20 01:12 | 显示全部楼层
你对闪烁的定义没有明白,还是对 P01=~P01; 这代码的意思没有明白?
闪烁3次是亮了三次, 亮三次最少的操作是:  亮,灭,亮,灭,亮
P01 =~P01的定义是P01取反, 默认0的话5次: 1, 0, 1, 0, 1
那么…… 你觉得,到底,有什么问题呢?
回复

使用道具 举报

ID:910079 发表于 2021-11-20 10:43 | 显示全部楼层
188610329 发表于 2021-11-20 01:12
你对闪烁的定义没有明白,还是对 P01=~P01; 这代码的意思没有明白?
闪烁3次是亮了三次, 亮三次最少的操 ...

啊我知道错那里了,谢谢指导
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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