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

📄 main.c

📁 STM8S105S4程序
💻 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 + -