📄 main.c
字号:
/******************** 2011电子科技协会 ********************
;名称 :定时器的使用
;作者 : 郑品洪
;日期 : 07/25/2011
;描述 : 数码管显示0~F,利用定时器使得1秒变换一次
;***********************************************************/
#include <stm8s105s4.h>
#define uint unsigned int
#define uchar unsigned char
uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uchar t;
void init(void)
{
PB_DDR=0XFF;
PB_CR1=0XFF;
PB_CR2=0X00;
PC_DDR=0XFF;
PC_CR1=0XFF;
PC_CR2=0X00;
TIM2_EGR=0X01; //允许产生更新事件
TIM2_PSCR=0X01; //分频,使频率为1MHz
TIM2_ARRH=0XC3; //更新后计数器的值
TIM2_ARRL=0X50;
TIM2_CR1=0X05; //允许定时器工作
TIM2_IER=0X01; //允许更新中断
_asm("rim"); //汇编语句,启动定时器
//注意!使用定时器时要定义中断函数入口,详请打开main.c下面的stm8_interrupt_vector.c,请按照注释进行修改
}
void main(void)
{
uchar i=0,j;
init();
while(1)
{
PB_ODR=table[i];
PC_ODR=0x02; //选择第二个数码管显示
if(t==20) //这里设置50ms进入一次中断,t=20刚好为1秒
{
t=0; //t清零
i++;
if(i==16)
i=0; //由于数组中只有16个数,所以i最大只能为15,否则显示会出现乱码现象
}
}
}
@far @interrupt void TIM2_UP_IRQHandler (void) //中断函数
{
TIM2_SR1 = 0x00; //进入中断时TIM2_SR1最低位会被硬件自动置一,进入中断后必须将其清零,否则无法再次产生中断
t++; //进入中断后t自加1
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -