3788|8

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

外部中断打断数码管显示,如何解决? [复制链接]

    本人初学单片机,需要用数码管、AT89S51、按键实现一可调时秒表。在调试程序过程中发现,当按键触发外部中断时,会打断显示程序。哪位大侠能给小弟一些指导,不胜感激!(两个数码管)程序如下:
#include
#define uchar unsigned char
sbit p10=P1^0;
sbit p11=P1^1;
sbit p32=P3^2;
sbit p33=P3^3;
uchar n=0,n1=0,n2=0;
uchar m[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void delay(uchar a)
{
        uchar j;
        while(a--!=0)
        {
                for(j=0;j<231;j++);
        }
}
void display(uchar b0,uchar b1)
{
        p11=0;
        P0=m[b0];
        delay(5);
        p11=1;

        p10=0;
        P0=m[b1];
        delay(5);
        p10=1;
}
void Timer0()interrupt 1 using 0
{
        TH0=0xb8;
        TL0=0x00;
        n++;
        if(n==100)
        {
                n=0;
                n1++;
                 if(n1==10)
                {
                        n1=0;
                        n2++;
                        if(n2==6)
                        {
                        n2=0;
                         }
                }
        }
}
uchar i;
void interrupt0()interrupt 0 using 1
{       
        if(p32==0)
        delay(5);
        if(p32==0)
        {
                TR0=0;
                EX1=1;
                i++;
         }
}
void interrupt1()interrupt 2 using 2
{         
        if(p33==0)
        delay(5);
        if(p33==0)
        {
                if(i==1)
                {n1++;}
                if(i==2)
                {n2++;}
                if(i==3)
                {i=0;
                TR0=1;}
          }
}
main()
{       
        TMOD=0x01;
        TH0=0xb8;
        TL0=0x00;
        ET0=1;               
        EX0=1;
        EA=1;
        TR0=1;
        P1=0xff;
        i=0;
        while(1)
        {
                display(n1,n2);
         }
}
       

最新回复

请教lgy198612:怎么让两位同时显示啊?  详情 回复 发表于 2009-10-28 14:59
点赞 关注

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
没看出什么问题,你的delay(5)是多长时间,
一般判断抖动 20ms延时就可以了
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
打断显示程序??是什么意思??
你这个程序  有按键的时候表应该不会走的,但是显示应该正常,只是不动
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
另外 不要在发蛋帖了  这样不好!!
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
5mS
我就是想按第一个键(p32=0),表停;按第二个键(p33=0),表个位加1;再按一次第一个键,再按第二个键,表十位加1
我现在问题是按第一个键,表是停了,但有时显示一位,有时显示两位
我也不想发蛋帖,我加十分,但是系统提示不能加那么多分,两分也不行
谢谢您的指导!
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
应该是没有问题的呵呵,寂寞了!!!!!!! 循环的显示什么可能会出现断的时候 ????
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 
但有时显示一位,有时显示两位 ???很正常的啊, 你的程序那两个数码管就是这么写的啊
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

8
 
#5楼
不是,外部中断时,循环显示被打断了,不能正常显示
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
请教lgy198612:怎么让两位同时显示啊?
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表