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 + -
显示快捷键?