【精品博文】stm8自学笔记 2016/3/15

【按键查询例程】

*基本语言*

if(PE_IDR_IDR4==0);

//判定按键是否按下

*代码组成*

1,定义延迟函数 

void Delay(uint32_t temp)
    {
      for(; temp!= 0; temp--);
    }

//延迟是为了防止机械抖动 抖动瞬间会产生电压峰值

而形成“毛刺” 影响脉冲识别

    2,定义主函数

int main(void)
    { 
       CLK_CKDIVR&= (uint8_t)(~0x18);
       CLK_CKDIVR|= (uint8_t)0x00;

LED_Init();
       KEY_Init();//按键初始化
       LED1_Close();
       LED2_Close(); 
       LED3_Close();//设置初始3个灯均为熄灭状态

while(1)                            
       { 
       if(PE_IDR_IDR4==0)//判定按键是否按下
         {
          Delay(10000); 
          if(PE_IDR_IDR4==0)//判定按键是否按下
           {
             while(PE_IDR_IDR4==0);
             LED1_Toggle();
             LED2_Toggle();
             LED3_Toggle(); //反转led灯
           }   
         }
       }
    }

    3,定义头文件

void KEY_Init(void)
    {  
      PE_DDR_DDR3=0;
      PE_DDR_DDR4=0;
      PI_DDR_DDR0=0;//设置数据方向寄存器 1为输出,0为输入
      PE_CR1_C13=1; //设置1为上拉输入
      PE_CR1_C14=1; 
      PI_CR1_C10=1; 
      PE_CR2_C23=0; 
      PE_CR2_C24=0; 
      PI_CR2_C20=0;//设置0无中断
    }

*程序执行*

开始3个灯全灭 按一次按键LED状态变换一次

*代码变形*

1,将while(PE_IDR_IDR4==0);改成如果按键松开 即
        while(1)                            
           { 
           if(PE_IDR_IDR4==0)//判定按键是否按下
             {
              Delay(10000); 
              if(PE_IDR_IDR4==0)//判定按键是否按下
               {
                 if(PE_IDR_IDR4==1);
                 {

LED1_Toggle();
                  LED2_Toggle();
                  LED3_Toggle(); //反转led灯

}
               }   
              }
            }

//代码的思想是如果按键松开 就执行反转LED

理想状态是和上述现象一毛一样 然而 现实是

根本连亮都不亮 悲剧了 求解答

2,将上述if(PE_IDR_IDR4==1);语句去掉 即

while(1)                            
           { 
           if(PE_IDR_IDR4==0)//判定按键是否按下
             {
              Delay(10000); 
              if(PE_IDR_IDR4==0)//判定按键是否按下
               {

LED1_Toggle();
                  LED2_Toggle();
                  LED3_Toggle(); //反转led灯
               }   
              }
            }

//唉 本来以为这样就可以实现按键查询的功能 可是

这次运行的情况更奇葩 在按下去的时候LED在一直闪

并且在松开的时候 点亮和熄灭是随机的 这状况还有谁

3,再删掉第二个判断语句 即

while(1)                            
           { 
           if(PE_IDR_IDR4==0)//判定按键是否按下
             {
              Delay(10000);

LED1_Toggle();
                  LED2_Toggle();
                  LED3_Toggle(); //反转led灯
                  
              }
            }

//结果是和上面第2个 执行情况相同

4,再删掉延迟后 即

while(1)                            
           { 
           if(PE_IDR_IDR4==0)//判定按键是否按下
             {
                  LED1_Toggle();
                  LED2_Toggle();
                  LED3_Toggle(); //反转led灯   
              }
            }

//这次可以实现 按键查询功能 但是在按下去的时候

感觉有过度功能 就是 先亮一点 再亮全部 熄灭时

先暗一点在全部熄灭

*疑惑之处*

1,Toggle();函数为什么会有反转的功能

2,在给板子通电的时候 会出现闪亮的情况 是特别弱的光

在复位的时候 LED也是会出现这个情况的 跑任何关于LED的程序都是会出现这个情况的 不知道是什么原因?

3,上述4种情况是由于什么原因的呢?

*由衷感谢*

1,十分感谢大家的指导

2,再次感谢

3,还要感谢 重要的事情说三遍

(0)

相关推荐

  • 试驾 | 强者自强,长途深度体验19款本田CR-V瑞●混动版!

    在插电混动当道的今天,日系车却走了一条完全不同的混动实现方式,这其中,本田CR-V是典型代表.那么,非插电式的混动究竟怎么样?新款CR-V又有哪些新的改变呢? 伴随着从甘肃敦煌到青海西宁的" ...

  • 长江存储将展示新型3D NAND结构Xtacking,I/O速度堪比DDR4

    国内厂商使用的NAND闪存及DRAM内存全部来自进口,去年光是存储芯片进口就高达896亿美元,目前国内已经布局了三大存储芯片基带,紫光旗下的长江存储目前专注于3D NAND闪存研发.生产.在今年8月份 ...

  • STC51(点灯+五向开关)

    实物 原理图 丝印层 这个实验需要做程序的烧录,需要一些下载的软件什么的 https://www.stcisp.com/ STC的官网丢上来. 菊花里面夹芯片 哪个鬼才整的这花活 好家伙儿,我一往开点 ...

  • 【华大测评】+ 环境搭建,点灯、按键等

    今天搭建开发板开发环境,keil+JLink,其实论坛很多 人都写过了,坑也填的差不多了,这里就不多废话了,我搭建和顺利,基本没出现什么问题.这里只说一个我踩到的雷,估计大多数人都碰不到.对一个自己之 ...

  • 【精品博文】stm8自学笔记 2016/3/12

    [流水灯例程] *基本语言* 1,LED1_Open();    //点亮LED 2,LED2_Close();    //熄灭LED 3,LED1_Toggle();    //闪烁LED 4,de ...

  • 【精品博文】Itop4412学习笔记(2)

    今天学习的是文件IO的操作,需要记录的点: 1.库函数头文件 在所有Linux系统中,对文件的操作都只需包含下面四个头文件即可: #include <unistd.h>     #incl ...

  • 【精品博文】Itop4412学习笔记(1)

    学习了ubuntu下自己编译最小Linux系统,大概步骤为构建根文件系统+编译:具体这里不再记录. 需要记录下来的是给itop4412烧写系统的方法:  1. COM3用串口或者串口转USB连接到电脑 ...

  • 【精品博文】openMSP430 应用笔记

    openMsp430 是OpenCore 上的一款很小巧的开源MCU核,指令集完美兼容市面上MSP430 MCU.从2009年发布开始,一直到2015年,该core每年都有更新,可见作者对这个core ...

  • 【精品博文】spartan6 硬件设计笔记

    用spartan6主要是想利用它的差分收发器做一些应用,那么这里就需要注意lvds引脚,任何io bank都可以用作lvds 输入,但是lvds 输出引脚只能从bank0 和bank2 中选择. 可选 ...

  • 【精品博文】读zynq_ebook笔记知识点(三)

    第十一章:硬件/软件划分 FPGA 可编程逻辑适合解决那种能高效地划分为多道并行任务的问题.由于可编程逻辑固有的并行执行方式,多个运算可以被同时处理,用比串行处理更短的时间计算出最终的结果.FPGA ...

  • 【精品博文】笔记:近期总结之开发大坑

    有一阵子没有更新博文了... 人的惰性也是有惯性的,而且一旦停下来,再次开始就有了一些难度.就好像汽车在启动的时候油耗往往是最高的,跑起来之后,油耗反而会下降. 最近新接手一个比较急的项目,拿到手之后 ...

  • 【精品博文】Zedboard 学习笔记之《ZYNQ中断的学习》

    由于ZYNQ芯片内部有ARM处理器,那么必然具有到中断资源.我们在学习嵌入式时,中断总是很重要但是很复杂的东西,那么现在来回顾一下当中断来临时的处理过程: -中断待处理. -处理器停止执行当前的线程. ...

  • 【精品博文】Zedboard 学习笔记之《XADC的使用》

    赢一个双肩背包 有多难? 戳一下试试看! →_→ 长摁识别 在Xilinx的7系列芯片上,有一个XADC模块,这是一个双12bit的模数转换器.通过该模块,我们可以检测芯片的外部输入的各种电压和温度等 ...