📄 tmr1_04.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 + -