单片机学习小组
直播中

陈杰

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语言不会向后找取别名的定义
举报

更多回帖

发帖
×
20
完善资料,
赚取积分