691|5

22

帖子

0

资源

一粒金砂(中级)

请教一下关于外部中断 [复制链接]

请老哥们帮忙看一下训练十,我下面这个代码哪出问题了,编译是没问题的,但是烧录之后按键触发外部中断触发不出来要求的结果,还是保持2019显示。

#include<reg52.h>
#include<intrins.h>
#define ui unsigned int
#define uc unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit key=P3^5;
sbit stop=P3^2;

ui b;
ui i;
ui a;
uc c;
uc code table[]={0x5b,0x3f,0x06,0x6f};
uc code table1[]={0x3e,0xfd,0xfb,0xf7};
uc code table2[]={0xfd,0xfb,0xf7,0xef};
uc code table3[]={0xfb,0xf7,0xef,0xdf};
uc code table4[]={0xf7,0xef,0xdf,0x3e};
uc code table5[]={0xef,0xdf,0x3e,0xfd};
uc code table6[]={0xdf,0x3e,0xfd,0xfb};


void delay(ui xms)
{
    ui x,y;
    for(x=xms;x>0;x--)
        for(y=110;y>0;y--);
}

 


void display(){
    for(a=650;a>0;a--)
        {
    for(i=0;i<4;i++){
        dula=1;
        P0=table;
        dula=0;
        P0=0xff;
        wela=1;
        P0=table1;
        wela=0;
        delay(1);
                } 
        }    
                                        
            for(a=650;a>0;a--)
        {
    for(i=0;i<4;i++){
        dula=1;
        P0=table;
        dula=0;
        P0=0xff;
        wela=1;
        P0=table2;
        wela=0;
        delay(1);
                } 
        }    
                            
            for(a=650;a>0;a--)
        {
    for(i=0;i<4;i++){
        dula=1;
        P0=table;
        dula=0;
        P0=0xff;
        wela=1;
        P0=table3;
        wela=0;
        delay(1);
                } 
        }    
                            
            for(a=650;a>0;a--)
        {
    for(i=0;i<4;i++){
        dula=1;
        P0=table;
        dula=0;
        P0=0xff;
        wela=1;
        P0=table4;
        wela=0;
        delay(1);
                } 
        }    
                            
            for(a=650;a>0;a--)
        {
    for(i=0;i<4;i++){
        dula=1;
        P0=table;
        dula=0;
        P0=0xff;
        wela=1;
        P0=table5;
        wela=0;
        delay(1);
                } 
        }    
                            
    for(a=650;a>0;a--)
        {
    for(i=0;i<4;i++){
        dula=1;
        P0=table;
        dula=0;
        P0=0xff;
        wela=1;
        P0=table6;
        wela=0;
        delay(1);
                } 
        }    
                            


    }

void init()
{
    EA=1;
    EX0=1;
    IT0=1;
    stop=1;    
    b=0;
    c=0xfe;    
    
 }

 

void keyscan(){
    if(key==0)
    {
        delay(10);
        if(key==0){
            stop=0;    
            while(!key);
    }
 }
}

void shan()
{
P1=c;
delay(60);
P1=0xff;
delay(60);
P1=c;
}

 

void zd() interrupt 0
{
shan();        
b++;
c=_crol_(c,1);

switch (b){

case 1:
    dula=0;
    P0=0x06;
    dula=1;
    wela=0;
    P0=0xc0;
    wela=1;
    break;

case 2:

    dula=0;
    P0=0x5b;
    dula=1;
    wela=0;
    P0=0xc0;
    wela=1;
    break;    
                
case 3:

    dula=0;
    P0=0x4f;
    dula=1;
    wela=0;
    P0=0xc0;
    wela=1;
    break;    

case 4:

    dula=0;
    P0=0x66;
    dula=1;
    wela=0;
    P0=0xc0;
    wela=1;
    break;    
                
case 5:

    dula=0;
    P0=0x6d;
    dula=1;
    wela=0;
    P0=0xc0;
    wela=1;
    break;    

case 6:

    dula=0;
    P0=0x7d;
    dula=1;
    wela=0;
    P0=0xc0;
    wela=1;
    break;    
                
case 7:

    dula=0;
    P0=0x5b;
    dula=1;
    wela=0;
    P0=0x3e;
    wela=1;

    dula=0;
    P0=0x06;
    dula=1;
    wela=0;
    P0=0x3d;
    wela=1;

    dula=0;
    P0=0x07;
    dula=1;
    wela=0;
    P0=0x3b;
    wela=1;

    dula=0;
    P0=0x06;
    dula=1;
    wela=0;
    P0=0x37;
    wela=1;

    dula=0;
    P0=0x06;
    dula=1;
    wela=0;
    P0=0x2f;
    wela=1;

    dula=0;
    P0=0x7f;
    dula=1;
    wela=0;
    P0=0xdf;
    wela=1;
    break;    
}

stop=1;    

}                
 void main(){
init();
while(1){
  display();
    keyscan();
    }
}                    
 

image.png

此帖出自51单片机论坛
[9B}~$(7O}U1SQ8NC@P7(VW.png

回复

22

帖子

0

资源

一粒金砂(中级)

5B8F4799762A5A714990DE74F83BA60F.png 训练题设,训练十,老哥们帮忙看一下


回复

3755

帖子

0

资源

版主

哎呀这种事情还是自己弄吧,这个忙不好帮

第一呢手头没有你那个板子,硬件情况不了解;再之你写的这种程序看着就别扭,一大溜看不懂

    P0=0x37;    wela=1;    dula=0;    P0=0x06;没注释没说明一个个给对上太费劲;

问题具体点就好了。

点评

那具体一些的话应该就是外部中断这里,我设置外部中断是下降沿触发。然后我在初始函数init里置1外部中断对应的口,然后我在按键keyscan函数里设置按键按下时:对应的P3.2口置0.然后在外部中断函数写显示的那些条件,  详情 回复 发表于 2020-8-6 19:30

回复

22

帖子

0

资源

一粒金砂(中级)

huo_hu 发表于 2020-8-6 18:01 哎呀这种事情还是自己弄吧,这个忙不好帮 第一呢手头没有你那个板子,硬件情况不了解;再之你写的这种程 ...

那具体一些的话应该就是外部中断这里,我设置外部中断是下降沿触发。然后我在初始函数init里置1外部中断对应的口,然后我在按键keyscan函数里设置按键按下时:对应的P3.2口置0.然后在外部中断函数写显示的那些条件,写完之后在中断函数最后再把P3.2置1.

这个中断流程有什么问题吗


回复

2673

帖子

1

资源

五彩晶圆(初级)

单步看看,或者放到peotus里面跑

个人签名人已离开,无事别找,找也找不到。

回复

3755

帖子

0

资源

版主

按键不一定非得用中断,到时间了看下状态就行了。


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

关闭
站长推荐上一条 1/6 下一条

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

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

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

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