打印
[STM8]

初学一些疑问求解

[复制链接]
398|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yj96923|  楼主 | 2019-3-28 11:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yj96923 于 2019-3-28 14:10 编辑

如下程序  刚开始是灯全亮 我想用操纵杆上下左右的时候分别控制1个灯灭  然后按键控制所有灯的亮灭  但是现在是程序写进去运行就像跑马灯一样。搞不懂  所以求解


#include <iostm8s208sb.h>
#include <stdint.h>
/* Private defines -----------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

void Delay(uint32_t nCount)
{
    /* Decrement nCount value */
    while (nCount != 0)
    {

      nCount--;
    }
}

void main(void)
{
PH_DDR|=0x0F;  /*设置PH.0 PH.1 PH.2 PH.3为推挽输出*/
PH_CR1|=0x0F;
PH_CR2|=0x00;

PB_DDR|=0xEF; /*设置PB.4为上拉输入*/
PB_CR1|=0x10;
PB_CR2|=0x00;

PB_DDR|=0xDF; /*设置PB.5为上拉输入*/
PB_CR1|=0x20;
PB_CR2|=0x00;

PB_DDR|=0xBF; /*设置PB.6为上拉输入*/
PB_CR1|=0x40;
PB_CR2|=0x00;

PB_DDR|=0x7F; /*设置PB.7为上拉输入*/
PB_CR1|=0x80;
PB_CR2|=0x00;

PD_DDR|=0x7F; /*设置PD.7为上拉输入*/
PD_CR1|=0x80;
PD_CR2|=0x00;



  while (1)
  {




    if(PD_IDR_IDR7==0)
    PH_ODR&=0xF0; /*输出低电平*/
    else           
    PH_ODR|=0x0F;/*输出高电平*/
    Delay(5000);

    if(PB_IDR_IDR4==0)
    PH_ODR&=0xFE; /*输出低电平*/
    else           
    PH_ODR|=0x0F;/*输出高电平*/
    Delay(5000);

     if(PB_IDR_IDR5==0)
    PH_ODR&=0xFD; /*输出低电平*/
    else           
    PH_ODR|=0x0F;/*输出高电平*/
    Delay(5000);

    if(PB_IDR_IDR6==0)
    PH_ODR&=0xFB; /*输出低电平*/
    else           
    PH_ODR|=0x0F;/*输出高电平*/
    Delay(5000);

    if(PB_IDR_IDR7==0)
    PH_ODR&=0xF7; /*输出低电平*/
    else           
    PH_ODR|=0x0F;/*输出高电平*/
    Delay(5000);



  }

}

使用特权

评论回复
沙发
yj96923|  楼主 | 2019-3-28 11:33 | 只看该作者
   

使用特权

评论回复
评论
yj96923 2019-3-28 11:33 回复TA
这是原理图 
板凳
aqawasaz| | 2019-3-28 15:25 | 只看该作者
首先要防抖,其次这里用硬延时不太好,要把定时器用起来。

使用特权

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

本版积分规则

9

主题

162

帖子

2

粉丝