lesson5_tmr1.c

来自「PIC16F877入门程序和仿真原理图」· C语言 代码 · 共 78 行

C
78
字号
//利用T1中断实现每秒加1功能 //
#include <pic.h>
#include <pic1687x.h>
#define uint  unsigned int
#define uchar unsigned char
const char table[10]={0x40,0xf9,0xa4,0xb0,0x19,0x12,0x03,0xf8,0x00,0x10,};
uchar count=0 ;
uchar data1=0;
void Delay(char x)
{
    char i;
    while(x--)
    for(i=0;i<200;i++);
}
////////////系统初始化////////////////////////
void initial()
{
 TRISB=0x00;    //端口设置
 //TRISC=0x00;    
 TRISD=0x00;
 //PORTB=0xFF;   //开始都关
 //PORTC=0xFF;   //共阳极
 PORTD=0x00;
 INTCON=0xC0;    //关中断
 PIE1=0x00 ;  
 PIR1=0x00 ;
}
 
//////////T0初始化///////////////////////////
void time1_init()
{
 T1CON=0x08;  //16位定时方式,
 TMR1IE=1;  //中断允许位  
 TMR1IF=0;  //清中断标志位
 TMR1H=(65536-50000)/256;             //设置初始值
 TMR1L=(65536-50000)%256;
}
void display(uchar data)
{ uchar a,b;
 b=(data/10); //十位
 a=(data%10);    //个位
     
 PORTD=0x02;
 PORTB=table[a];  //显示个位
 Delay(2);
 PORTD=0x01;
 PORTB=table[b];  //显示十位
 Delay(2);
 
}
void interrupt time1_ISR()
{
if(TMR1IF==1)
 {
 TMR1H=(65536-50000)/256;             //设置初始值
 TMR1L=(65536-50000)%256;
  TMR1IF=0 ; //清中断         
  count++ ;
   if(count==5)
  { count=0;        //每1秒清count ,重新开始等待1秒    
        data1++; //每1秒+1,并显示
	if(data1==60)
	{data1=0;}
  }
 }
}
main()
{       
 //uchar i;      
 initial();
 time1_init();
 TMR1ON=1;        //打开定时器1
 while(1)
 {
 display(data1);                 
 }
} 

⌨️ 快捷键说明

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