微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机中断程序求解,谢谢!

单片机中断程序求解,谢谢!

时间:10-02 整理:3721RD 点击:
#include <reg51.h>
#include<stdio.h>
unsigned char ledbuf[8];
code unsigned char ledmap[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99,
                               0x92, 0x82, 0xf8, 0x80, 0x90};      //8段显示
void delay(unsigned char cnt)
{
  unsigned char i;
  while(cnt--!=0)
   for(i=100;i!=0;i--);
}
#define tick 7554
#define T100us (256-134)
unsigned char hour,minute,second,ankey;
unsigned int c100us;
void sees()
{
   ledbuf[0]=ledmap[hour/10];
ledbuf[1]=ledmap[hour%10];
ledbuf[2]=0xbf;
ledbuf[3]=ledmap[minute/10];
ledbuf[4]=ledmap[minute%10];
ledbuf[5]=0xbf;
ledbuf[6]=ledmap[second/10];
ledbuf[7]=ledmap[second%10];
}
void displayled()
  {
   char i;
   unsigned char pos;
   pos=0x01;
   for(i=7;i>=0;i--)
   {
    P2=0x255;
  P0=ledbuf[i];
  P2=~pos;
    delay(2);
    P2=0x255;
    pos<<=1;
   }
  }   
void key()
{
  if(P32==0||P33==0||P35==0)
  delay(2);
  if(P32==0||P33==0||P35==0)
   {
  if(P32==0)
   {
    hour++;
      if(hour==24)
    hour=0;
    while(P32==0)
      {
    sees();
    displayled();
   }
   }
  if(P33==0)
   {
    minute++;
  if(minute==60)
   minute=0;
   while(P33==0)
    {
     sees();
     displayled();
    }
  }
  if(P35==0)
   {
    second++;
  if(second==60)
  second=0;
      while(P35==0)
  {
   sees();
   displayled();
  }
   }
  }
}
void t0int()interrupt 1
{
  c100us--;
  if(c100us==0)
  {
   c100us=tick;
second++;
if(second==60)
{
  second=0;
   minute++;
  if(minute==60)
  {
   minute=0;
   hour++;
   if(hour==24)hour=0;
   }
  }
   }
  }
void main()
{
  TMOD=0x02;
  TH0=T100us;
  TL0=T100us;
  IE=0x82;
  hour=0;
  minute=0;
  second=0;
  c100us=tick;
  TR0=1;
  while(1)
  {
   sees();
displayled();
   key();
  }
}




求解key函数和void t0int()interrupt 1之间的关系?key函数不是已经实现了按键调时吗?为什么还需要时钟中断服务程序?中断函数里面写的是干嘛的?如果把key里面的调时写到void t0int()interrupt 1可以吗?刚学中断,不太懂。

定时器是用来定时时间的!

键扫可以写在中断里  而且效率更好

void key函数可以没有吗?如果没有键扫的key函数,那么主函数中 也就去掉了key函数,只剩下sees函数和displayed函数了,这样单片机也可以中断吗?

我指的是按键扫描函数(就是判断哪个键按下)。这样要另写一个按键处理函数进行操作添加在main函数中就可以完成了

为什么按键处理不能写在中断里面?中断一般都能写些什么?求详解,刚学单片机,不太明白,谢谢。

看来小编对中断的作用还是没有搞明白。中断程序里面只是简单的计数秒数,秒数到了向分进位,分到了,就向小时进位,仅此而已。key()函数是用来处理调节时钟的操作。增减时分秒的。怎么能放在中断?中断的处理占的时间越少越好啊。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top