【精品博文】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,希望各位前辈在有幸看到此篇文章时能够多多指教 不胜感激;