关于一中断服务程序,略有不懂,新手求教~!

2019-07-15 20:38发布

整个程序的框架、功能(实现不同按键控制不同的功能并且在数码管上显示功能号“0001~0004”)我都看懂了。但是对于中断服务程序1(红 {MOD}部分)对整个系统来说有什么意义,我始终不明白。求大神指教~!     PS :为了简化已经删去部分函数的内容,。

/*******头文件*********/
#include"reg51.h"
#include"absacc.h"
/*****数码管断码*******/
unsigned char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
/*****全局变量*********/
int keyval;
/*****端口定义****/
sfr key=0XB0;
sbit S4=P3^5;
sbit S3=P3^4;
sbit S2=P3^3;
sbit S1=P3^2;
sbit SPEAKER =P2^4;
sbit RELAY=P2^6;
/************按键消抖延时******/
void delay(void)
{

}
/************数码管显示********/
void display(int k)
{       
              P0=tab[k/1000];
    P2=0Xfe;
        delay();
        P0=tab[k%1000/100];
        P2=0xfd;
        delay();
        P0=tab[k%100/10];
        P2=0xfb;
        delay();
        P0=tab[k%10];
        P2=0xf7;
        delay();
        P2=0xff;
}
/***********LED闪动延时********/
void leddelay()
{   
}
/***********LED闪动*****/
void ledflash()
{


}
/*********led流水灯******/
void ledflow(void)
{

}
/*********继电器吸合**********/
void relayon(void)
{
}
/********主程序**************/
void main(void)
{
    keyval=0;
        key=0xff;
        P2=0xff;
        P0=0xff;
/*******定时器初始化*****/
    EA=1;
        ET0=1;
        ET1=1;
        TMOD=0X11;
        TH0=-10000/256;
        TL0=-10000%256;
        TH1=-100/256;
        TL1=-100%256;
        TR0=1;
        TR1=1;
        while(1)
        {
            display(keyval);
            if(keyval==1)
              ledflash();
            if(keyval==2)
              ledflow();
            if(keyval==3)
              relayon();
            if(keyval==4)
                  ledflash();
                display(keyval);
        }
}
/*********中断服务程序1**********/
void intsrv1(void) interrupt 1 using 1
{
    TR0=0;
        display(keyval);
        TH0=-10000/256;
        TL0=-10000%256;
        TR0=1;
}

void intserv3(void) interrupt 3 using 3
{
    TR1=0;
        if((key&0x3c)!=0x3c)
          delay();
        if((key&0x3c)!=0x3c)
        {
           if(S1==0)
             keyval=1;
           if(S2==0)
             keyval=2;
           if(S3==0)
             keyval=3;
           if(S4==0)
             keyval=4;
        }
                TH1=-100/256;
        TL1=-100%256;
        TR1=1;
}












友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
J_acket
1楼-- · 2019-07-15 22:34
顶一下··希望有人帮忙··
星无泪
2楼-- · 2019-07-16 00:08
稳定数码管显示
星无泪
3楼-- · 2019-07-16 05:01
J_acket 发表于 2014-3-13 21:49
顶一下··希望有人帮忙··

稳定数码管显示
十成
4楼-- · 2019-07-16 06:11
void intsrv1(void) interrupt 1 using 1
{
    TR0=0;   //关定时计数
        display(keyval);   //调用显示函数
        TH0=-10000/256;//重装初值
        TL0=-10000%256;
        TR0=1;   //开定时计数
}
J_acket
5楼-- · 2019-07-16 09:27
 精彩回答 2  元偷偷看……
J_acket
6楼-- · 2019-07-16 14:38
十成 发表于 2014-3-13 23:19
void intsrv1(void) interrupt 1 using 1
{
    TR0=0;   //关定时计数

写谢谢你回答···  这个每行的意思我都知道了。。但是我不懂这整个中断函数对于整个系统来说的意义。。。以及工作原理··

一周热门 更多>