{$cfg_webname}
主页 > 电子信息 > 论文 >

毕业设计论文范文(单片机数字电子钟设计)(6)

来源:56doc.com  资料编号:5D4688 资料等级:★★★★★ %E8%B5%84%E6%96%99%E7%BC%96%E5%8F%B7%EF%BC%9A5D4688
资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用. 帮助
资料介绍

4.3 主程序
#include<reg52.h>  
 sbit ksec=P3^0;
 sbit kmin=P3^1;
 sbit khour=P3^2;
 unsigned char secshi=0,secge=0,minshi=0,minge=0,hourshi=0,hourge=0;
 unsigned int num=0,sec=0,min=0,hour=0;
 unsigned char code table[10]={0x3f,0xxx,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
 void delay(unsigned int);
 void keyscan();
 void display();
 main()
{TMOD=0x01;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 EA=1;ET0=1;TR0=1;
 while(1)
 {display();
  keyscan();
  }
 }
void delay(unsigned int z)
 {unsigned int x,y;
  for(x=z;x>0;x--)
   for(y=110;y>0;y--);}
4.4 时钟设置子程序
void time0() interrupt 1
 {num++;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 }
4.5 定时器中断子程序
void time0() interrupt 1
 {num++;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 }
在这里,我们有必要介绍一下单片机的中断系统,以利于我们的学习。
中断技术在单片系统中有着十分重要的作用,它不仅可以提高单片机CPU的效率,也可以对突发事件处理。所谓中断就是当CPU正在执行程序A时,发生了另一个急需处理的事件B,这是CPU暂停当前执行的程序A,立即转去执行处理事件B的程序,处理完事件B后,再返回到程序A继续执行,这个过程被叫做中断。关于中断的概念有下列几个名词:(1)程序A称为主程序,(2)处理事件B的程序称为中断服务程序,(3)主程序中转向中断服务程序的地方称为断点,(4)引起中断的原因即事件B称为中断源,(5)转去执行中断服务程序称为中断响应。关于中断的概念可以打个如下的比喻。领导(CPU)在自己的房间办公(执行主程序),下属(外设)有问题打电话来请示(中断源),领导停下正在进行的工作,通过电话给下属做指示(执行中断服务程序),指示完后,领导挂断电话,继续做自己的工作(返回主程序继续执行)。
中断是一个过程,当中央处理器CPU在处理某件事情时,外部又发生了另一紧急事件,请求CPU暂停当前的工作而去迅速处理该紧急事件。处理结束后,再回到原来被中断的地方,继续原来的工作。引起中断的原因或发出中断请求的来源,称为中断源。
单片机一般允许有多个中断源,当几个中断源同时向CPU请求中断时,就存在CPU优先响应哪一个中断请求源的问题(优先级问题),一般根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求,于是便规定每一个中断源都有一个中断优先级别,并且CPU总是响应级别最高的中断请求。
当CPU正在处理一个中断源请求的时候,又发生了另一个优先级比它高的中断源请求,如果CPU能够暂时中止对原来中断处理程序的执行,转而去处理优先级更高的中断源请求,待处理完以后,再继续执行原来的低级中断处理程序,这样的过程称为中断嵌套。
4.6 LED显示程序
void display()
 {if(num==20)
   {num=0;
    sec++;
    if(sec==60)
     {sec=0;
      min++;
      if(min==60)
        {min=0;
         hour++;
         if(hour==24)
           {hour=0;
            min=0;
            sec=0;
            }
         }
      }
   }
 secge=sec%10;
 secshi=sec/10;
 minge=min%10;
 minshi=min/10;
 hourge=hour%10;
 hourshi=hour/10;
 P2=0xfe;
 P0=table[secge];
 delay(5);
 P2=0xfd;
 P0=table[secshi];
 delay(5);
 P2=0xfb;
 P0=0x40;
 delay(5);
 P2=0xf7;
 P0=table[minge];
 delay(5);
 P2=0xef;
 P0=table[minshi];
 delay(5);
 P2=0xdf;
 P0=0x40;
 delay(5);
 P2=0xbf;
 P0=table[hourge];
 delay(5);
 P2=0x7f;
 P0=table[hourshi];
 delay(5);
}
4.7 按键控制子程序
void keyscan()
 {if(ksec==0)
   {delay(10);
    if(ksec==0)
      {sec++;
       if(sec>=60)
       sec=0;
       }
  while(ksec==0)
  display();}
  if(kmin==0)
    {delay(10);
     if(kmin==0)
       {min++;
        if(min>=60)
        min=0;
        }
推荐资料