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

【流水灯例程】

*基本语言*

1,LED1_Open();    //点亮LED

2,LED2_Close();    //熄灭LED

3,LED1_Toggle();    //闪烁LED

4,delay();    //延迟函数

*代码组成*

    1,定义延迟函数

void delay()
        {
         int i,j;
          for(i=0;i<1000;i++)
           {
             for(j=0;j<1000;j++);
           }
         }

//如果没有定义的话会有一个警告和一个错误提示

(Warning[Pe223]: function "delay" declared implicitly;

Error[Li005]: no definition for "delay" )

    2,定义主函数

int main(void)
                        {
                             CLK_CKDIVR&= (uint8_t)(~0x18);/*时钟复位*/
                              /*设置内部高速时钟16M为主时钟*/ 
                              CLK_CKDIVR|= (uint8_t)0x00;

/*!<Set High speed internal clock */
                               LED_Init();
                               while(1231)
                                   {
                                        LED1_Toggle();
                                       delay();
                                    }

}

//貌似while()里面的这个数字可以输入任意大于1的整数;

LED_Init()的作用是初始化 然后后面的状态什么的

都是在它初始化的基础上弄得;

    3,定义头文件

void LED_Init(void)

{
         PF_DDR|=0xe0;   // 设置数据方向寄存器 1为输出,0为输入*/
         PF_CR1|=0xe0;   //设置推挽输出 */
         PF_CR2|=0xe0;   //设置输出频率 1为10M,0为2M

}

//定义LED_Init函数,并且设置相关数据;

void LED1_Toggle(void)
        {
         PF_ODR_ODR5=!PF_ODR_ODR5;
        }

//定义LED1_Toggle函数;

*程序执行*

此时LED1在不停的闪烁 LED2和LED2处于点亮状态;

*代码变形*

    1,将while循环里面的 delay();去掉 即  

while(1231)
           {
               LED1_Toggle();

}

3个LED灯均处于点亮状态 无闪烁现象

    2,在while循环里面添加多个 

LED1_Toggle();

delay();

程序运行正常 闪烁频率等现象均无变化

    3,将while里面改成

LED1_Toggle();
             delay();
         LED2_Toggle();
             delay(); 
         LED3_Toggle();
             delay();

LED1闪烁频率变慢 LED2和LED3闪烁 3个LED灯依次闪烁

出现传说中的流水灯现象 闪烁形式为1-2-3-1-2-3-循环

    4,给上述代码末尾加入 LED2_Close(); 即

LED1_Toggle();
             delay();
         LED2_Toggle();
             delay(); 
         LED3_Toggle();
             delay();

LED2_Close();

LED2闪烁频率明显变快 出现新的流水灯现象 闪烁形式

为1-2-3-2-1-2-3-循环 其中1-2-3比3-2-1“走”的快些

    5,给上述代码末尾加入 delay(); 即

LED1_Toggle();
             delay();
         LED2_Toggle();
             delay(); 
         LED3_Toggle();
             delay();

LED2_Close();

delay();

LED2闪烁频率比LED1和LED3快 比3中代码慢

依旧是上述闪烁方式但是由于频率变慢会显得有点别扭

    6,将上述代码 LED2_Close();-->LED2_Open(); 即

LED1_Toggle();
             delay();
         LED2_Toggle();
             delay(); 
         LED3_Toggle();
             delay();

LED2_Open();

delay();

LED2闪烁频率和4中相同 程序执行时LED2和LED3先亮

LED1先熄灭后点亮 实现闪烁 此时已无流水灯现象

   7,上述代码取消末尾 delay(); 即

LED1_Toggle();
             delay();
         LED2_Toggle();
             delay(); 
         LED3_Toggle();
             delay();

LED2_Open();

3个LED灯闪烁频率均增快 依旧是LED2闪烁频率最快

*疑惑之处*

1,怎样通过CLK_CKDIVR&= (uint8_t)(~0x18);实现时钟复位的?

2,while()里面的数字含义是什么 可以任意输入吗?

3,怎样设置LED闪烁频率?

4,delay()函数对上述实验的影响原理是什么?

*温馨备注*  

1,上述实验现象均为肉眼观测 与实际可能会有些许误差;

2,本人刚开始入门stm8 有说明错误的地方欢迎大家指出;

3,希望各位前辈在有幸看到此篇文章时能够多多指教 不胜感激;

(0)

相关推荐

  • Arduino在中断函数里面怎么延时

    Arduino在中断函数里面怎么延时 Arduino里面有两种中断,一种是内部中断,就象系统时钟那样,一直在那儿持续,轮询到中断信号,以最高的优先级去执行.另一种是外部中断,输入中断信号,以低于内部中 ...

  • 51单片机 4个独立按键控制LED灯 (protues仿真)(C语言版)

    一.思路及相关问题 1.逻辑思路: 当按下key1时 led1亮起来 因为按下去具有瞬时性不用while,用if语句,当松开时,用while(!key1) ,函数调用. 先在脑海里想象它的大致运行过程 ...

  • Go 最小硬件编程(第一部分)

    我们能够让 Go 在多低的配置下运行并做一些实用的事情呢? 最近我购买了这个特别便宜的开发板: 购买它,我基于以下三个理由:第一,我(作为一个程序员)从未搞过 STM32F0 系列的开发板:第二,ST ...

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

    [按键查询例程] *基本语言* if(PE_IDR_IDR4==0); //判定按键是否按下 *代码组成* 1,定义延迟函数  void Delay(uint32_t temp)     {      ...

  • 2016年12月读书及观影笔记

    2016年12月读书及观影笔记 司马狂/文 12月读书:<清明上河图密码3> 作    者:冶文彪  这老兄属于典型的一部书大红大紫的牛人,虽然说尚且不能称其为一部书成为代表作,但< ...

  • 【精品博文】4.12、静态时序分析工具介绍(Lattice Timing Analysis View篇)

    静态时序相关博文连载目录篇: http://blog.chinaaet.com/justlxy/p/5100052092 今天,来聊一聊本次连载博文的最后一个内容(至少暂时是最后一篇)--Lattic ...

  • 【精品博文】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 ...

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

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