完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1. 案例引入:
代码如下: 遇到要求简单的可以采用上述代码实现,但遇到接下来的呢? 2.代码实现 因此,采用另一种代码实现方式,while主循环里面套if分支判断 clude ***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命名,建立一个框架式编程最简单的程序框架,并实现简单的数据分配工程建立步骤
至此,工程新建完毕。 代码编程
在主函数内找不到HC595_Init(); 去头文件"HC595_Drive.H"里找 因此需要在"HC595_Drive.H"声明了该函数,同时HC595_Drive.c也包含了"HC595_Drive.H",由此找到函数体本身 "HC595_Drive.H"实现了HC595_Drive.c和main.c的关联和调用
新建all.h
2… 声明
注: 变量或函数遵循“先定义,再声明,最后使用”的原则。
u8,u16,u32取别名的位置很关键 必须在"HC595_Drive.H"前面 C语言不会向后找取别名的定义 |
|
|
|
只有小组成员才能发言,加入小组>>
3314 浏览 9 评论
2995 浏览 16 评论
3494 浏览 1 评论
9059 浏览 16 评论
4088 浏览 18 评论
1180浏览 3评论
605浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
599浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2335浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1896浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 21:55 , Processed in 1.465202 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号