文章目录
- 摘要
- 软件更新
- 什么是闪烁
- Tips:u16是什么?
- 语法分析:
- 验证代码
- Tips:a--和--a的区别(--ms 的用法)
- 测试代码:
摘要
1.基于Delay实现的LED闪烁
2.函数的使用
3,新建文件,使用模块化编程
软件更新
打开时会提示有版本更新,需要及时更新为最新版本。选择立即下载,选择保存路径,运行。
目前最新的是6.92a版本,选择可执行文件,发送到桌面快捷方式。
新版软件,资料下载里下载最新版手册(8-15):
什么是闪烁
根据百度百科释义。
闪烁是一个汉语词语,拼音:shǎn shuò。释义:指光亮晃动不定、忽明忽暗;(说话)稍微露出一点想法,但不肯说明确;物体忽隐忽现,变动不定;显露,现出。出自南朝·梁·王僧孺《中寺碑》:“日流闪烁,风度清锵。”
1.基于Delay实现的LED闪烁
闹钟中间有两个点,两个点是不断的闪动,0.5秒点亮0.5秒熄灭0.5秒点亮0.5秒熄灭.
这一亮一灭的过程,利用Delay函数实现LEB的闪烁的过程。
1秒=1000毫秒=1000 000微秒,0.5s=500毫秒=500 000微秒
复制示例工程,改名为LED闪烁,添加以下语句:
#define MAIN_Fosc 24000000UL 定义IRC系统时钟24M,方便下载时选择,定义的名称写在前面。
定义IRC系统时钟,方便下载时选择,方便查看和修改。ISP中IRC频率和系统时钟的IRC频率应该保持一致,防止程序出现错误。
void delay_ms(u16 ms)
{u16 i;do{i = MAIN_Fosc / 6000;while(--i);}while(--ms);
}
Tips:u16是什么?
选中u16,右键选中:Go To Definition Of "u16’,转至u16的定义头文件stc.h:
typedef unsigned int u16; //定义的名称写在后面,开头无“#”号,末位加“;”号。
我们的编译器(也就是这个KEIL C251)会把我们写的"u16"替换成“ unsigned int”。
取值范围是:u16 取值0-65535。
之后采用do…while循环:
do{i = MAIN_Fosc / 6000;while(--i);}while(--ms);
//主while循环中加入延时代码,实现闪烁P22 = 0; //设置低电平 (屠龙刀三板载led)delay_ms(500);P22 = 1; //设置低电平 (屠龙刀三板载led)delay_ms(500);
如果需要两个等一起闪,修改代码:
P22 = 0; //设置低电平 (屠龙刀三板载led)P24 = 0;delay_ms(500);P22 = 1; //设置低电平 (屠龙刀三板载led)P24 = 1;delay_ms(500);
delay很方便,但需要等待踏步结束后,才能接着往下走。
语法分析:
1.while
执行流程图:
常用死循环while(1).
2.do
{
}while();
验证代码
do{printf("a的值: %d\r\n",a);a = a + 1;}while( a <20 );
执行结果:
改成while循环:
while( a <20 ){printf("a的值: %d\r\n",a);a++;}
执行结果:
本例中作用相同。
Tips:a–和–a的区别(–ms 的用法)
测试代码:
a =10;printf("a的值: %d\r\n",a);printf("a的值: %d\r\n",--a); //先运算再输出printf("a的值: %d\r\n",a);a =10;printf("a的值: %d\r\n",a);printf("a的值: %d\r\n",a--); //先输出再运算printf("a的值: %d\r\n",a);
执行结果:
4.#define的用法
#define 名称 需要定义的内容 编译器会自动替换