打印
[DemoCode下载]

【赛元95F】+3.定时器闪烁LED小练

[复制链接]
707|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xyz549040622|  楼主 | 2020-4-1 16:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xyz549040622 于 2020-4-1 16:49 编辑

1.使用定时器0进行LED的闪烁,定时器配置为1ms
2.每500ms闪烁一次LED
#include "SC95F861x_C.h"

/*---------------------------------------------------------------------
// 宏定义
----------------------------------------------------------------------*/

#define LED        P40
/*---------------------------------------------------------------------
// 函数申明
----------------------------------------------------------------------*/
void ClockInit(void);
void GpioInit(void);
void delay_ms(unsigned int ms);
void Timer0Init(void);

/*---------------------------------------------------------------------
// 函数: void main(void)
// 描述: 主函数
// 参数: non
// 返回: none.
// 版本: VER1.0
// 日期:
// 备注:
----------------------------------------------------------------------*/
void main(void)
{
        ClockInit();
        GpioInit();
        Timer0Init();
        EA = 1;
        while(1)
        {        
        }
}

/*---------------------------------------------------------------------
// 函数: void ClockInit(void)
// 描述: 时钟初始化
// 参数: non
// 返回: none.
// 版本: VER1.0
// 日期:
// 备注:
----------------------------------------------------------------------*/
void ClockInit(void)
{
//上电默认使用HRC32Mhz作为Fhrc,可以用编程软件进行配置分频输出为Fsys,也可以用程序进行配置,这里用编程软件配置,方便
}

/*---------------------------------------------------------------------
// 函数: void ClockInit(void)
// 描述: 时钟初始化
// 参数: non
// 返回: none.
// 版本: VER1.0
// 日期:
// 备注:
----------------------------------------------------------------------*/
void GpioInit(void)
{        
        //芯片为SC95F8617,则不用调用宏定义。
        P4CON |= 0x01;  //设置P40为强推挽模式
        P4PH  |= 0x01;        //P40上拉电阻打开
}

//========================================================================
// 函数: void Timer0Init(void)
// 描述: 定时器0的初始化,1ms定时
// 参数: none
// 返回: none.
// 版本: VER1.0
// 日期:
// 备注:
//========================================================================
void Timer0Init(void)
{
        TMCON |= 0X01;    //Timer0选择时钟Fsys

        TMOD &= 0xFB;//选择定时器0为定时模式
        TMOD |= 0x01;//选择定时器0工作为模式1,16位定时器,不自动装载   
        
        TL0 = (65536 - 32000)%256;    //溢出时间:时钟为Fsys,则32000*(1/Fsys)=1ms;
        TH0 = (65536 - 32000)/256;
        TF0 = 0;//清除定时器0
        ET0 = 1;//使能定时器0中断
        TR0 = 1;//定时器0开始计时
        
}
//========================================================================
// 函数: void timer0() interrupt 1
// 描述: 定时器0中断函数
// 参数: none
// 返回: none.
// 版本: VER1.0
// 日期:
// 备注:
//========================================================================
void timer0() interrupt 1
{
        static unsigned int LedCounts = 0;
  TL0 = (65536 - 32000)%256;
        TH0 = (65536 - 32000)/256;
        LedCounts++;
        if(LedCounts == 500)
        {
                LedCounts = 0;
                LED = ~LED;        //LED进行500ms的闪烁        
        }
}



//========================================================================
// 函数: void  delay_ms(unsigned int ms ms)
// 描述: 延时函数。主频32M,使用STC软件生成
// 参数: ms,要延时的ms数, 这里只支持1~65536ms.
// 返回: none.
// 版本: VER1.0
// 日期:
// 备注:
//========================================================================
void  delay_ms(unsigned int ms)//@32MHz
{
    unsigned char i,j;
    unsigned int N;
                for(N = 0; N < ms;N++)
                {
                        i = 32;
                        j = 29;
                        do
                        {
                                while (--j);
                        } while (--i);
                }
}


使用特权

评论回复

相关帖子

沙发
qwe123zxc| | 2020-4-1 20:02 | 只看该作者
同一按键如何实现长按短按

使用特权

评论回复
评论
knk 2020-4-1 22:00 回复TA
很容易的,单击,双击,长按,都可以实现 
板凳
xyz549040622|  楼主 | 2020-4-1 21:49 | 只看该作者
qwe123zxc 发表于 2020-4-1 20:02
同一按键如何实现长按短按

定时器配合,用状态机检测。

使用特权

评论回复
地板
598330983| | 2020-4-5 19:12 | 只看该作者
操作非常6.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群: 嵌入式系统arm初学者 224636155←← +→→点击-->小 i 精品课全集,21ic公开课~~←←→→点击-->小 i 精品课全集,给你全方位的技能策划~~←←

2810

主题

19297

帖子

104

粉丝