标题:
51单片机数码管显示 程序跑飞
[打印本页]
作者:
时光漫步01
时间:
2017-5-12 23:43
标题:
51单片机数码管显示 程序跑飞
尝试写交通灯的程序,下面是两边数码管的显示,每一边数码管单独运行都没有问题,一起运行数码管就会跑飞,不明白原因何在,求指导
#include <reg52.h>
#define uchar unsigned char
typedef unsigned char uint8;
typedef unsigned int uint16;
uint8 second=20;
uint16 mstcnt=0;
sbit P2_0 = P2^0;
sbit P2_1 = P2^1;
sbit P2_2 = P2^2;
sbit P2_3 = P2^3;
uchar second,minute,hour;
unsigned int tcount;
unsigned char m;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
0xf8,0x80,0x90}; //共阳极
void delay(unsigned int i);
void time_pro( void)
{
if(second==0)//秒钟设为59进制
{ second=20;
}
}
void display()
{
P1=table[second/10];
P2_2 = 0;
delay(5);
P2_2= 1;
P1=(table[second%10]& 0x7f);
P2_3= 0;
delay(5);
P2_3= 1;
P0=table[second/10];
P2_0 = 0;
delay(5);
P2_0= 1;
P0=(table[second%10]& 0x7f);
P2_1= 0;
delay(5);
P2_1= 1;
}
/*演示主程序*/
void timer0(void) interrupt 1 using 0//定时器0方式1,250us中断一次
{
TH0=0xff;
TL0=0x19;
TMOD = 0x01;
mstcnt++;
if(mstcnt==4000)
{
second--;
mstcnt=0; //注意对计数单元的清零
}
}
void timer1(void) interrupt 1 using 0//定时器0方式1,250us中断一次
{
TH0=0xff;
TL0=0x19;
TMOD = 0x01;
mstcnt++;
if(mstcnt==4000)
{
second--;
mstcnt=0; //注意对计数单元的清零
}
}
void main(void)
{
P0=0xff;
P1=0xff; //初始化p0口,全设为1使数码管
P2=0xff; //初始化p2口,全设为1使数码管
TMOD = 0x01; //time0为定时器,方式1
TH0=0xff; //预置计数初值
TL0=0x19;
EA=1;
ET0=1;
TR0=1;
while (1)
{
time_pro( ); //时间处理
display( ); //显示时间
}
}
/*演示主程序*/
void delay(unsigned int i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
作者:
zl2168
时间:
2017-5-13 08:28
本帖最后由 zl2168 于 2017-5-13 15:59 编辑
实例30 带限行时间显示的模拟交通灯
先
Proteus
仿真一下,确认有效。
实例30 带限行时间显示模拟交通灯.rar
(40.64 KB, 下载次数: 5)
2017-5-13 15:56 上传
点击文件名下载附件
带限行时间显示模拟交通灯.jpg
(120.42 KB, 下载次数: 68)
下载附件
2017-5-13 15:56 上传
缩短亮灯时间,是为了仿真演示,便于观看,否则,你等得不耐烦了,实际应用时,可可修改延长。
以上摘自张志良编著《
80C51
单片机仿真设计实例教程
——
基于
Keil C
和
Proteus
》清华大学出版社
ISBN 978-7-302-41682-1
,
内有常用的单片机应用
100
案例,用于仿真实验操作,电路与程序真实可靠可信可行.书中电路和程序设计有详细说明,程序语句条条有注解。
仿真电路和
Hex
文件能在清华出版社网站免费下载,程序源代码只能到书上看了。
到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
作者:
yzwzfyz
时间:
2017-5-13 12:27
程序运行的速度很快,你当设法在某此地方让程序停一停,不就好了吗?
作者:
halojeff
时间:
2017-5-13 13:03
尝试下延时看看,我还没学到交通灯,有时单片机的频率比较高,一下子就运行过去了,稍微延时一下试下
作者:
LLLBBB
时间:
2017-5-13 14:06
加个看门狗试试
作者:
abcymda
时间:
2017-5-13 15:43
两个定时器都对 second 进行 -- 操作,有可能冲突了。
改成两个参数试试。
作者:
ym0706
时间:
2017-5-13 16:46
延时太短了吧 ,
作者:
ereerr
时间:
2017-5-13 17:20
尝试下延时看看
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1