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

2019-07-15 17:10发布

#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可以吗?刚学中断,不太懂。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
Aidaohuakai
1楼-- · 2019-07-15 20:28
 精彩回答 2  元偷偷看……
a410670107
2楼-- · 2019-07-16 00:59
键扫可以写在中断里  而且效率更好
边城雨
3楼-- · 2019-07-16 03:51
a410670107 发表于 2015-5-14 21:55
键扫可以写在中断里  而且效率更好

void key函数可以没有吗?如果没有键扫的key函数,那么主函数中 也就去掉了key函数,只剩下sees函数和displayed函数了,这样单片机也可以中断吗?
a410670107
4楼-- · 2019-07-16 04:25
边城雨 发表于 2015-5-20 17:08
void key函数可以没有吗?如果没有键扫的key函数,那么主函数中 也就去掉了key函数,只剩下sees函数和displayed函数了,这样单片机也可以中断吗?

我指的是按键扫描函数(就是判断哪个键按下)。这样要另写一个按键处理函数进行操作添加在main函数中就可以完成了
边城雨
5楼-- · 2019-07-16 07:34
a410670107 发表于 2015-5-20 21:20
我指的是按键扫描函数(就是判断哪个键按下)。这样要另写一个按键处理函数进行操作添加在main函数中就可以完成了

为什么按键处理不能写在中断里面?中断一般都能写些什么?求详解,刚学单片机,不太明白,谢谢。
qduwg
6楼-- · 2019-07-16 10:07
 精彩回答 2  元偷偷看……

一周热门 更多>