05-框架式编程基础概念、任务调度和数据分配

框架式编程基础概念、任务调度和数据分配

1. 案例引入:

image-20210817190408309

代码如下:

image-20210817190457311

遇到要求简单的可以采用上述代码实现,但遇到接下来的呢?

image-20210817190648838

2.代码实现

因此,采用另一种代码实现方式,while主循环里面套if分支判断

clude <STC15.H>		//头文件包含,STC15W系列单片机使用(注意:使用STC15.H,需要删除下面的sfr行)


sbit LED1=P3^5;						//定义3个灯
sbit LED2=P3^6;
sbit 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的运行时会发现

image-20210817202224497

image-20210817201429370

这是因为90,315,4365的最小公约数是61110,而unsigned short的范围最大是65535

计算器计算:65535可以被count计数到4365多少次

image-20210817201807878

image-20210817201918529

计算剩余的60即波形图1.399ms的来由

image-20210817202043133

image-20210817202125066

解决方法:

image-20210817202603424

使count++到61110结束,再由0重新计数。

**总结:**合理利用碎片时间,避免占用资源。

3. 框架式编程的概念

image-20210817203219412

image-20210817203401505

要点:

根据器件特性,合理分配时间。例:数码管每秒刷新次数要大于LCD1602每秒刷新次数

image-20210817203523862

框架式概念图

image-20210825185619549

4. 搭建框架式编程文件

任务

以74HC595命名,建立一个框架式编程最简单的程序框架,并实现简单的数据分配

工程建立步骤

  1. 新建文件夹

image-20210817204700191

  1. 新建工程

image-20210817204913150

image-20210817205021820

image-20210817205146326

image-20210817205213745

  1. 对工程下的源文件进行分类管理

image-20210817205501191

image-20210817205532534

  1. 新建所需源文件和头文件

image-20210817210522867

image-20210817210706460

image-20210817210730238

  1. 魔术棒选项设置

image-20210817210908091

image-20210817211015508

image-20210817211111347

  1. 添加新建的.c文件和.h文件

image-20210817211218463

image-20210817211302932

image-20210817211332073

  1. 测试代码

image-20210817211730232

至此,工程新建完毕。

代码编程

  • 文件调用规范
  1. .h文件关联.c文件

image-20210817212952957

  1. 为头文件新建标签

image-20210817213102277

  1. 写HC595_Init()初始化函数
void HC595_Init()
{
	P3M0 = 0;
	P3M1 = 0;
	P3   = 0X55;
}
  1. 代码执行流程分析

image-20210817214655939执行main.c

在主函数内找不到HC595_Init();

去头文件"HC595_Drive.H"里找

因此需要在"HC595_Drive.H"声明了该函数,同时HC595_Drive.c也包含了"HC595_Drive.H",由此找到函数体本身

"HC595_Drive.H"实现了HC595_Drive.cmain.c的关联和调用

  • 优化

用all.h包含所有头文件

新建all.h

image-20210817215403187

image-20210825191139867

  • 数据分配
  1. 简单数据分配:定义数组

image-20210817220141959

2… 声明

image-20210817220235919

  1. 赋值

image-20210817220307221

注:

变量或函数遵循“先定义,再声明,最后使用”的原则。

  • 框架式编程的数据分配

定义595数据分配函数,主函数内循环调用

image-20210817221529380

  • typedef取别名操作简化书写

使用取别名关键字

image-20210817221037068

u8,u16,u32取别名的位置很关键

必须在"HC595_Drive.H"前面

C语言不会向后找取别名的定义

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值