整个程序的框架、功能(实现不同按键控制不同的功能并且在数码管上显示功能号“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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
稳定数码管显示
{
TR0=0; //关定时计数
display(keyval); //调用显示函数
TH0=-10000/256;//重装初值
TL0=-10000%256;
TR0=1; //开定时计数
}
写谢谢你回答··· 这个每行的意思我都知道了。。但是我不懂这整个中断函数对于整个系统来说的意义。。。以及工作原理··
一周热门 更多>