本帖最后由 千年老姚 于 2023-1-3 17:26 编辑
各位冬至好!刚才看完了第八和第九集,以下为简略版笔记
若笔记有误,请各位指正:lol
第六集:LED闪烁和花式点灯
一.基于Delay函数实现的led灯闪烁
1.例子:闹钟中间的两个点闪烁——一亮一灭的过程为闪烁。
1s= 1000ms =1000 000μs
工程中添加以下语句:
- #define MAIN_Fosc 24000000UL //定义一个IRC主时钟
- void delay_ms(u16 ms) //unsigned int
- {
- u16 i ;
- do
- {
- i=MAIN_Fosc/6000;
- while(--i);
- }
- while(--ms);
- }
复制代码
u16变量定义:typedef unsigned int u16
点亮灯部分函数(省略开头定义文件)
- void main()
- {
- while(1)
- {
- P40 = 0 ; //三极管低导通
- P60 = 0 ; //led4引脚低电平
- P67 = 0 ;
- delay_ms(500) ;
- P60 = 1 ;
- P67 = 1 ;
- delay_ms(500);
- }
- }
复制代码
语法分析:
1.while
{
条件A
}
判断方式:条件A是否为真?真执行代码,否则跳出
2.do
{
功能B
}while();
判断方式:先执行一次功能B,再判断是否为真,真继续执行,否则跳出
注意:单片机定义变量的时候在void main()为局部定义,在外面为全局定义
举例:
- int a =10;
- do
- {
- printf ("a的值:%d\n",a);
- a=a+1;
- }while(a<20);
-
- while (a<20)
- {
- printf ("a的值:%d\n",a);
- a=a++;
- }
- //两个printf结果无区别
复制代码
3.--ms的用法
- printf ("a的值:%d\r\n",a);
- printf ("a的值:%d\r\n",--a);//先自减,再输出a的值为9
- printf ("a的值:%d\r\n",a);//print三个数为:10 9 9
- printf ("a的值:%d\r\n",a);
- printf ("a的值:%d\r\n",a--); //先输出a的值为10,再自减
- printf ("a的值:%d\r\n",a);//print三个数为:10 10 9
复制代码
4.#define 名称 需要定义的内容
二.函数的应用
在模块化编程里,函数使用分为如下三步:
1.函数定义返回值 函数名称( 入口参数 )
{
函数要执行的功能
}
@返回值:没有返回值就是void
@函数名称:避开关键词(使用不带颜色的),不重复,非特殊字符随便取
@入口参数:类型+名称,多个参数“,”分开,空就写void
2.函数声明返回值 函数名称( 入口参数 );
3.函数调用 函数名称( 入口参数 );
例:
- int Add ( int parm1 , int parm2)
- {
- return parm1 + parm2;
- }
- //一般函数定义写在后面,函数名字写在前面,需要的地方复制调用
- printf("计算结果为:%d\r\n",Add(1,2));//输出结果为3
复制代码
三.新建文件,使用模块化编程
新建xxx.c和xxx.h文件,代表一个功能块。xxx.h格式:
#ifndef __XXX_H //if no define 如果没有定义
#define __XXX_H
调用头文件函数声明...
#endif
xxx.c格式:
#include “xxx.h”
函数定义添加文件一定要记得引用路径和添加到工程里。
引用路径配置:魔术棒——C251——include path——点击文件夹
在.c文件中写好函数之后,记得要在.h文件中写入函数名
课后练习:SOS求救灯光编写三短三长三短(. . . _ _ _ . . .) |