精品博文stm8自学笔记 2016/3/12_stm8s003f3p6中文手册

精品博文stm8自学笔记 2016/3/12_stm8s003f3p6中文手册

编码文章call10242025-09-11 15:46:584A+A-

【流水灯例程】

*基本语言*

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;去掉即

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

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

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

3,将while里面改成

LED2_Toggle;

delay;

LED3_Toggle;

delay;

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

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

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

LED2_Close;

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

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

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

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

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

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

LED2_Open;

delay;

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

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

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

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

*疑惑之处*

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

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

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

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

*温馨备注*

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

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

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

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4