⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tmr1_04.c

📁 PIC16F877A 片内TMR1 时钟写的数字时钟
💻 C
字号:
#include<pic.h>
__CONFIG(0X3F39);


//============函数声明=======================
void  initPORT(void);     // 端口初始化
void  initTMR1(void);     //TMR0初始化
void  interrupt TMR1INT(void);    //中断秒产生子函数
void  display(void);          //显示子函数
void  Time(void);          //时间产生子函数
void  delay(void);          //延时子函数

int   bs,s,m,h;            //定义秒变量
unsigned char shuma[10]={0x88,0x9f,0xa4,0x85,0x93,0xc1,0Xc0,0X8F,0X80,0X81};
	                 //0~9不带点的数码管源
unsigned char shuma2[10]={0X08,0X1F,0X24,0X05,0X13,0X41,0X40,0X0F,0X00,0X01};
	                 //0~9带点的数码管源码
//===============主函数=============================
void  main()
  {
     initPORT();
     initTMR1();
     while(1)
     {Time();
     display();}
   }

//================TMR1初始化子函数=======================
void initTMR1()
  {
     T1CON=0X30;       //设置分频比为1:8,选择内部时钟,关闭TMR1
     GIE=0;            //关全局中断、
     TMR1H=0X0B;       //TMR1初值置为9E58H,仿真用4MHZ
     TMR1L=0XDC;       //8(FFFF-0BDC+1)=500000us=0.5s
     TMR1IF=0;         //清TMR1中断标志
     TMR1IE=1;         //使能TMR1中断
     PEIE=1;           //使能外设中断
     GIE=1;            //使能全局中断
     TMR1ON=1;         //开启TMR1
   }
//===============TMR1中断子及秒产生函数=============================
void  interrupt TMR1INT()
  { 
     GIE=0;          //关中断
     TMR1IF=0;       //清中断标志位
     bs++;
     if(bs==2)
     {bs=0;
     s++;}
     TMR1H=0X0B;       //TMR1初值置为9E58H,仿真用4MHZ
     TMR1L=0XDC;       //8(FFFF-0BDC+1)=500000us=0.5s
     GIE=1;          //开中断
    TMR1ON=1;       //开启TMR1 
   }
//=============显示子函数=======================
void  Time()
  {  
     if(s==60)
       {
         s=0;
         m++;
         if(m==60)
           {
             h++;
             if(h==24)
                h=0;
           }
        }
    }
   
//--------显示子函数----------------
void  display()
  {   
      //int ss,sm,sh;
      PORTC=shuma[s%10];
      PORTA=0X2F;
      delay(); 

      PORTC=shuma[s/10];
      PORTA=0x1f;
      delay();

      PORTC=shuma2[m%10];
      PORTA=0X3B;
      delay();

      PORTC=shuma[m/10];
      PORTA=0X37;
      delay();

      PORTC=shuma2[h%10];
      PORTA=0X3E;
      delay();

      PORTC=shuma[h/10];   
	  PORTA=0X3D;        
	  delay();          
		
  }
//===============延时子函数-=====================
void  delay()
  {
    int n=0;
    for(n=0x100;n>0;n--);
  } 
             
//===============端口初始化子函数====================
void  initPORT()
  {
     TRISA=0X00;
     TRISC=0X00;
     ADCON1=0X07;
    // PORTC=shuma[0];
    // PORTA=0x3f;
  }                
            

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -