打印
[DemoCode下载]

【赛元95F】第2步:按键测试

[复制链接]
984|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaoyang9992006|  楼主 | 2020-3-22 16:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 gaoyang9992006 于 2020-3-26 15:29 编辑
/*
SC95F8617,GPIO输入输出例子,利用P11输出闪灯,P10作为按钮
按下按钮可以调节闪烁的频率.
GPIO说明
PxCON=0x00;设置为高阻输入模式
PxCON=0xFF;设置为推挽输出模式
PxPH = 0xFF;设置上拉电阻
*/
#include"SC95F861X.H"
#include"stdio.h"

#define LED P11
#define Button_PIN P10
unsigned int x=50000;

/*
---------IO输出测试代码---------
*/

void delay(void);
void GPIO_Init(void);
void Timer0_Init(void);
void Blink(void);
void key(void);
/*
---------主函数---------
*/
void main(void)
{
        GPIO_Init();
        Timer0_Init();

        while(1)
        {
                Blink();
                key();
        }
}

void delay(void)
{
//设置为320,延时0.5S,设置到80即延时0.125S,8个IO口跑马灯则每个IO的闪烁频率刚好是1Hz
        int i=320;
        TR0=1;
        while(i--)
        {
                TL0 = (65536 - x)%256;    //时钟为Fsys,则溢出时间=50000*(1/Fsys);
                TH0 = (65536 - x)/256;
                while(TF0==0);
                TF0=0;
        }
        TR0=0;
}

void GPIO_Init(void)
{

//P10设置为输入上拉,P11设置为输出        
        P1CON=BIT1;
        P1PH =BIT0;
}
void Timer0_Init(void)
{
/*
        TCON,定时器控制寄存器,    |TF1|TR1|TF0|TR0|---|IE1|-|IE0|-|
        
        TMOD,定时器工作模式寄存器,|- |C/T1|M11|M01|---|C/T0|M10|M00|
        模式0:13位定时器计数器模式
        模式1:16位定时器计数器模式
        模式2:8位自动重载模式
        模式3:两个8位定时器计数器模式
*/
//设置定时器0工作模式1        
        TMOD        |=        BIT0;
//设置定时器0时钟源不分频,32MHz;默认是12分频        
        TMCON        |=        BIT0;
}

void Blink(void)
{
        LED=~LED;
        delay();
}
void key()
{
        if(Button_PIN==0)
        {

                while(Button_PIN==0);
                if(Button_PIN==1)
                        {
                                x=x-5000;
                                if(x==0)
                                x=50000;
                        }
        }
}
试了一下,可以进行十级闪烁速度调整。

使用特权

评论回复

相关帖子

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

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

1974

主题

15994

帖子

210

粉丝