单片机学习小组
登录
直播中
陈杰
8年用户
1504经验值
私信
关注
如何搭建框架式编程文件?
开启该帖子的消息推送
框架
编程
如何搭建框架式编程文件?
文件调用规范是什么?
回帖
(1)
梁艳
2022-1-20 09:21:09
1. 案例引入:
代码如下:
遇到要求简单的可以采用上述代码实现,但遇到接下来的呢?
2.代码实现
因此,采用另一种代码实现方式,while主循环里面套if分支判断
clude
//头文件包含,STC15W系列单片机使用(注意:使用STC15.H,需要删除下面的sfr行)
***it LED1=P3^5; //定义3个灯
***it LED2=P3^6;
***it LED3=P3^7;
void main() //主函数 有且唯一
{
static unsigned short count=0; //65535,16位
P3M0 = 0;
P3M1 = 0;
while(1) //主函数死循环
{
count++;
if(count%90==0) //大循环运行90圈,最小公倍数61110=90*679
{
LED1=~LED1; //LED1每2ms 翻转一次,方波频率255Hz
}
if(count%315==0) //大循环运行315圈,最小公倍数61110=315*194
{
LED2=~LED2; //LED2每7ms 翻转一次,方波频率72Hz
}
if(count%4365==0) //大循环运行4365圈,最小公倍数61110=4365*14
{
LED3=~LED3; //LED3每97ms 翻转一次,方波频率5.15Hz
//0~61110
count=count%61110; //最小公倍数,让三颗LED周期更完美
}
}
}
注意:
用逻辑分析仪抓取LED的运行时会发现
这是因为90,315,4365的最小公约数是61110,而unsigned short的范围最大是65535
计算器计算:65535可以被count计数到4365多少次
而
计算剩余的60即波形图1.399ms的来由
解决方法:
使count++到61110结束,再由0重新计数。
**总结:**合理利用碎片时间,避免占用资源。
3. 框架式编程的概念
要点:
根据器件特性,合理分配时间。例:数码管每秒刷新次数要大于LCD1602每秒刷新次数
框架式概念图
4. 搭建框架式编程文件
任务
以74HC595命名,建立一个框架式编程最简单的程序框架,并实现简单的数据分配
工程建立步骤
新建文件夹
新建工程
对工程下的源文件进行分类管理
新建所需源文件和头文件
魔术棒选项设置
添加新建的.c文件和.h文件
测试代码
至此,工程新建完毕。
代码编程
文件调用规范
.h文件关联.c文件
为头文件新建标签
写HC595_Init()初始化函数
void HC595_Init(){ P3M0 = 0; P3M1 = 0; P3 = 0X55;}
代码执行流程分析
执行main.c
在主函数内找不到HC595_Init();
去头文件"HC595_Drive.H"里找
因此需要在"HC595_Drive.H"声明了该函数,同时HC595_Drive.c也包含了"HC595_Drive.H",由此找到函数体本身
"HC595_Drive.H"实现了HC595_Drive.c和main.c的关联和调用
优化
用all.h包含所有头文件
新建all.h
数据分配
简单数据分配:定义数组
2… 声明
赋值
注:
变量或函数遵循“先定义,再声明,最后使用”的原则。
框架式编程的数据分配
定义595数据分配函数,主函数内循环调用
typedef取别名操作简化书写
使用取别名关键字
u8,u16,u32取别名的位置很关键
必须在"HC595_Drive.H"前面
C语言不会向后找取别名的定义
1. 案例引入:
代码如下:
遇到要求简单的可以采用上述代码实现,但遇到接下来的呢?
2.代码实现
因此,采用另一种代码实现方式,while主循环里面套if分支判断
clude
//头文件包含,STC15W系列单片机使用(注意:使用STC15.H,需要删除下面的sfr行)
***it LED1=P3^5; //定义3个灯
***it LED2=P3^6;
***it LED3=P3^7;
void main() //主函数 有且唯一
{
static unsigned short count=0; //65535,16位
P3M0 = 0;
P3M1 = 0;
while(1) //主函数死循环
{
count++;
if(count%90==0) //大循环运行90圈,最小公倍数61110=90*679
{
LED1=~LED1; //LED1每2ms 翻转一次,方波频率255Hz
}
if(count%315==0) //大循环运行315圈,最小公倍数61110=315*194
{
LED2=~LED2; //LED2每7ms 翻转一次,方波频率72Hz
}
if(count%4365==0) //大循环运行4365圈,最小公倍数61110=4365*14
{
LED3=~LED3; //LED3每97ms 翻转一次,方波频率5.15Hz
//0~61110
count=count%61110; //最小公倍数,让三颗LED周期更完美
}
}
}
注意:
用逻辑分析仪抓取LED的运行时会发现
这是因为90,315,4365的最小公约数是61110,而unsigned short的范围最大是65535
计算器计算:65535可以被count计数到4365多少次
而
计算剩余的60即波形图1.399ms的来由
解决方法:
使count++到61110结束,再由0重新计数。
**总结:**合理利用碎片时间,避免占用资源。
3. 框架式编程的概念
要点:
根据器件特性,合理分配时间。例:数码管每秒刷新次数要大于LCD1602每秒刷新次数
框架式概念图
4. 搭建框架式编程文件
任务
以74HC595命名,建立一个框架式编程最简单的程序框架,并实现简单的数据分配
工程建立步骤
新建文件夹
新建工程
对工程下的源文件进行分类管理
新建所需源文件和头文件
魔术棒选项设置
添加新建的.c文件和.h文件
测试代码
至此,工程新建完毕。
代码编程
文件调用规范
.h文件关联.c文件
为头文件新建标签
写HC595_Init()初始化函数
void HC595_Init(){ P3M0 = 0; P3M1 = 0; P3 = 0X55;}
代码执行流程分析
执行main.c
在主函数内找不到HC595_Init();
去头文件"HC595_Drive.H"里找
因此需要在"HC595_Drive.H"声明了该函数,同时HC595_Drive.c也包含了"HC595_Drive.H",由此找到函数体本身
"HC595_Drive.H"实现了HC595_Drive.c和main.c的关联和调用
优化
用all.h包含所有头文件
新建all.h
数据分配
简单数据分配:定义数组
2… 声明
赋值
注:
变量或函数遵循“先定义,再声明,最后使用”的原则。
框架式编程的数据分配
定义595数据分配函数,主函数内循环调用
typedef取别名操作简化书写
使用取别名关键字
u8,u16,u32取别名的位置很关键
必须在"HC595_Drive.H"前面
C语言不会向后找取别名的定义
举报
更多回帖
rotate(-90deg);
回复
相关问答
框架
编程
如何
搭建
STM32软件
框架
?
2021-12-21
1164
如何利用stm32cube
搭建
ST25驱动
框架
?
2022-02-17
890
如何在RK3399这一 Arm64平台上
搭建
Tengine AI推理
框架
呢
2022-03-04
2283
如何在RK3399上
搭建
Tengine AI推理
框架
呢
2022-03-07
2471
如何在微信小程序的
框架
里
编程
?
2020-05-29
1485
DevEco Studio里的java UI
框架
有没有必要做拖拽式
编程
呢?
2022-05-18
2209
与传统机
架式
测试系统相比,基于PXI技术的测试系统有什么优势?
2021-04-13
1900
stm32f103如何烧录程序?怎么进行
编程
和环境
搭建
的?
2021-09-29
5413
求关于8086/8088
编程
和硬件电路
搭建
的资料
2012-12-20
2799
labview操作者
框架
有什么优势
2018-05-21
18712
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分