关于8051单片机简单程序-交通信号灯得问题

honeyb2 2011-04-21 03:00:36
这个程序编译没有问题,但是下到板子上面没有效果,灯和数码管一直不停的闪烁,求助啊!
我看了一个例程,使用了中断,但是我觉得这个不用中断也可以,但是这个程序调试出来就是不对

#include <reg52.h>
#define LED P1
#define DATA P0

sbit LATCH1 = P2^2;
sbit LATCH2 = P2^3;

unsigned char DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char WeiMa[2]={0xfe,0xfd};

void delay(unsigned char t);
void time(unsigned char t);
void display(unsigned char t);

unsigned char tempdata[2];

void main(void)
{
while(1)
{
LED = 0xfc; //红灯
display(60);
LED = 0xF3; //黄灯
display(5);
LED = 0xCF; //绿灯
display(50);
}
}

void delay(unsigned char t)
{
while(--t);
}

void time(unsigned char t)
{
tempdata[0] = DuanMa[t/10];
tempdata[1] = DuanMa[t%10];
}

void display(unsigned char t)
{
unsigned char i;

while(t)
{
time(t);
for (i = 0 ; i < 2 ; i++)
{
DATA = 0;
LATCH2 = 1;
LATCH2 = 0;

DATA = WeiMa[i];
LATCH1 = 1;
LATCH1 = 0;

DATA = tempdata[i];
LATCH2 = 1;
LATCH2 = 0;

delay(2000);
}
t--;
delay(50000); //随便弄得时间,为了观察变化
}

}









...全文
200 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
TallPeaks 2011-04-22
  • 打赏
  • 举报
回复
我有点不太明白 time display 有什么作用。
C_ROOKIES 2011-04-22
  • 打赏
  • 举报
回复
就是延时的问题,用中断延时下,或者把延时程序嵌套使用下,交通灯很简单的东西。代码还可以精简点。
uchar 0---255
char -128--127
uint 0--66536
int -32768--32767
你用的如果是最简单的51一个周期就是1us。
吻花者 2011-04-22
  • 打赏
  • 举报
回复
你这儿delay(2000);
而在这儿又是
void delay(unsigned char t)
{
while(--t);
}

但是unsigned char是字符型变量,最大是255了,可以改成unsigned int就可以了!!!!最好说明你的原理图和各个引脚,那样好看点
yirenyang 2011-04-21
  • 打赏
  • 举报
回复
"灯和数码管一直不停的闪烁" 应该是延时的问题,慢慢在检查检查!!
蒋剑波 2011-04-21
  • 打赏
  • 举报
回复
延时不够的原因.
蒋剑波 2011-04-21
  • 打赏
  • 举报
回复
delay(50000); 这个函数的参数为unsigned char ,最大255,怎么可能有50000这么大呢?

27,509

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧