#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit hong_1=P1^0;
sbit huang_1=P1^1;
sbit lv_1=P1^2;
sbit hong_2=P1^3;
sbit huang_2=P1^4;
sbit lv_2=P1^5;
sbit k1=P3^6;
sbit k2=P3^5;
sbit k3=P3^4;
sbit k4=P3^3;
bit setting_mode=0;
void delay(uint x) //yan 10 ms//
{
while(x--)
{
uchar i,j,k;
for(i=5;i>0;i--)
for(j=4;j>0;j--)
for(k=248;k>0;k--);
}
}
uint n=10;
uchar utype=1;
uchar count=0;
uchar code table[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
uint num;
uint i,j,k;
void countdown() //num~0 num=10+_1*n
{
while(1)
{
num=n;
for(i=num;i>=0;i--)
{
for(j=59;j>=0;j--)
{
for(k=500;k>=0;k--)
{
P2=table[i/10];
P3=0xfe;
delay(2);
P2=table[i%10];
P3=0xfd;
delay(2);
P2=table[j/10];
P3=0xfb;
delay(2);
P2=table[j%10];
P3=0xf7;
delay(2);
}
}
}
}
}
void three() //3~1
{
while(1)
{
for(i=2;i>=0;i--)
{
for(j=59;j>=0;j--)
{
for(k=500;k>=0;k--)
{
P2=table[i/10];
P3=0xfe;
delay(2);
P2=table[i%10];
P3=0xfd;
delay(2);
P2=table[j/10];
P3=0xfb;
delay(2);
P2=table[j%10];
P3=0xf7;
delay(2);
}
}
}
}
}
uchar type=1;
void Traffic_lignt()
{
switch(type)
{
case 1:
hong_1=1;huang_1=1;lv_1=0;
hong_2=0;huang_2=1;lv_2=1;
countdown();
delay(1000*n); //yan 1000*n ms (10000ms +/- 1000ms)//
type=2;
break;
case 2:
delay(50);
huang_1=~huang_1;
three();
if(++count!=6) //shan 6 ci//
return;
count=0;
type=3;
break;
case 3:
hong_1=0;huang_1=1;lv_1=1;
hong_2=1;huang_2=1;lv_2=0;
countdown();
delay(1000*n);
type=4;
break;
case 4:
delay(50);
huang_2=~huang_2;
three();
if(++count!=6)
return;
count=0;
type=1;
break;
}
}
void setting_mode_function()
{
if (k3 == 0)
{
delay(2);
setting_mode = 1;
}
if (setting_mode)
{
if (k4 == 0)
{
delay(2);
setting_mode = 0;
}
if (k1 == 0)
{
delay(2);
n++;
}
if (k2 == 0)
{
delay(2);
if (n > 0)
n--;
}
}
}
void main()
{
while(1)
{
setting_mode_function();
if (setting_mode==0)
{
Traffic_lignt();
}
}
}
这个代码为什么会让蜂鸣器一直响
为什么交通灯一直是led3和led4亮,不会进入下一布
这个代码为什么会让蜂鸣器一直响 为什么交通灯一直是led3和led4亮,不会进入下一布
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
阿里嘎多学长 2024-06-03 23:03关注以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:
这段代码是用于控制交通灯的51单片机程序。根据代码内容,我们可以分析出蜂鸣器持续响和交通灯不按预期顺序工作的原因。
蜂鸣器持续响的原因
蜂鸣器的控制通常与某个特定的I/O端口有关,但在提供的代码中并没有直接控制蜂鸣器的指令。如果蜂鸣器持续响,可能是因为:
- 硬件问题:蜂鸣器本身或其连接线路可能存在问题。
- 其他代码:如果这段代码不是完整的程序,可能在其他部分的代码中有控制蜂鸣器一直响的指令。
- 逻辑错误:如果蜂鸣器是通过某个LED端口间接控制的(例如,通过LED端口驱动一个晶体管来控制蜂鸣器),那么可能是逻辑错误导致该端口始终为高电平。
交通灯不按预期顺序工作的原因
交通灯的控制逻辑在
Traffic_lignt()函数中,通过switch语句和case分支来实现。根据代码,交通灯不按预期顺序工作可能是因为:-
count变量未正确更新:在case 2和case 4中,count变量应该在每次three()函数执行后增加,并在达到6次后重置为0。如果three()函数没有正确执行或count变量的更新逻辑有误,将导致无法进入下一个case。 -
delay()函数不准确:delay()函数的延迟时间可能不够准确,导致count变量未能正确增加。这可能是由于delay()函数内部的循环次数设置不当。 -
k系列按键未正确处理:setting_mode_function()函数中处理按键输入,如果按键处理逻辑有误,可能会影响Traffic_lignt()函数的执行。
解决方案
- 检查硬件:确保蜂鸣器和其连接线路没有问题。
- 审查
delay()函数:确保delay()函数的延迟时间准确无误。 - 检查
three()函数:确保three()函数能够正确执行,并在每次执行后正确更新count变量。 - 审查按键处理逻辑:确保
setting_mode_function()函数中的按键处理逻辑正确无误。
代码实现
由于代码中没有直接控制蜂鸣器的部分,无法提供具体的代码实现。但是,你可以根据上述分析检查和修改代码。
参考资料
请注意,以上链接可能需要根据实际情况进行访问和验证。
解决 无用评论 打赏 举报 编辑记录