标题: 利用单片机中断实现0~100的计时器 [打印本页]

作者: 1372677496    时间: 2018-6-4 22:14
标题: 利用单片机中断实现0~100的计时器
#include <reg52.h>
//#include <instrins.h>
#define uchar unsigned char
#define uint unsigned int
#define z 5
uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar bai,shi,ge,num1,num2/*,temp*/;
void delays(uchar XS);
void display(uchar bai,uchar shi,uchar ge );
void init();
//void waterLight();
void main()
{
  init();
  while(1)
  {
   display(bai,shi,ge);
  }
}
void init()
{
  TMOD = 0x01;
  TH0 = (65536-50000)/256;
  TL0 = (65536-50000)%256;
  EA = 1;
  ET0 = 1;
  TR0 = 1;
}
void time0() interrupt 1
{
  TH0 = (65536-50000)/256;
  TL0 = (65536-50000)%256;
  num1++;
  if(num1 == 20)
{
   num1 = 0;
   num2++;
   ge = num2 % 10;
   shi = num2 / 10 % 10;
   bai = num2 / 100;
   if(num2 == 999)
   num2 = 0;
   }
}
void display(uchar bai,uchar shi,uchar ge)
{
                                  P1 = 0xf2;
    P0 = table[ge];
    delays(z);                                                                                                            
    //P0 = 0X00;
    P1 = 0xf4;
    P0 = table[shi];
    delays(z);
    //P0 = 0x00;
     
    P1 = 0xf8;
    P0 = table[bai];
    delays(z);
    //P0 = 0x00;
}
void delays(uchar XS)
{
      uchar i,j;
   for(i = 0;i < XS;i++)
     for(j = 0; j < 110; j++);
}
/*(void waterLight()
{
  temp = 0xfe;
  P2 = temp;
  while(1)
  {
       temp = _crol_(temp,1);
    P2 = temp;
    delays(500);
  }
}   */







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1