完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
1个回答
|
|
大家好!我是皮皮猫。本篇文章: 主要是Keil的模块化编程,同时实现了一个小实验,通过Keil模块化编程来实现流水灯(设计了三种流水方式)。 进入正文: 一、Proteus仿真图 1)在编写代码的时候,我们首先要做的就是绘图,绘制好模型图之后,才可以编写对应的代码。首先,在Proteus创建一个工程(PS:新手请看:Proteus和Keil分别创建单片机工程) 2)根据自己的要求,绘制指定的图形。此次做的是流水灯,请看图: (PS:如果对画图有难度的话,请查看:Proteus画图) 3)绘制好Proteus之后,开始Keil部分。 二、Keil的模块化编程 Keil模块化编程:对代码分开管理,每一部分都是一个完整的代码,需要使用的时候,最后被主函数调用即可。可以方便程序排查错误,方便管理。 1)在keil新建一个工程 新手请看:Proteus和Keil分别创建单片机工程 2)在工程中创建自己的主函数,主函数控制着整个单片机的运行。 附上我的主函数:example.c #include #include #include"hanShu.h" #define led P1 void main(){ while(1){ yici(); //LED灯依次亮 bianToMiddle();//LED灯从两边向中间逐次点亮 led = 0xff; //关闭LED灯 topToBottom();//由上向下依次点亮LED灯 } } 3)在工程中创建独自的函数。 流水方式一:led1.c LED灯的流水方式:一次点亮一个,从上到下,循环两次 #include"hanShu.h" #include //LED点亮方式:依次点亮(一次一个,循环三次) void yici(){ uchar i, j; for(j = 0; j < 2; j++){ led = 0xfe; for(i = 0; i < 7; i++){ led = _cror_(led, 1); delay(); } led = 0x7f; for(i = 0; i < 7; i++){ led = _crol_(led, 1); delay(); } } } 流水方式二:led2.c LED灯的流水方式:从两边向中间点亮,循环三次 #include"hanShu.h" uchar toMiddle[] = {0x7e, 0xbd, 0xdb, 0xe7, 0xdb, 0xbd, 0x7e};//LED灯点亮方式 void bianToMiddle(){ uchar i, j; for(j = 0; j < 3; j++){//循环三遍 for(i = 0; i < 7; i++){//LED点亮方式:从两边到中间 led = toMiddle; delay(); } } } 流水方式三:led3.c LED灯的流水方式:从上到下依次点亮,循环三次 #include"hanShu.h" uchar toBottom[] = {0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00}; void topToBottom(){ char i, j; for(j = 0; j < 3; j++){ led = 0xff; for(i = 0; i < 8; i++){ led = led << 1; delay(); } for(i = 6; i >= 0; i--){ led = toBottom; delay(); } } } 延迟函数:delays.c #include"hanShu.h" void delay(){ uint a, b; for(a = 0; a < 200; a++) for(b = 0; b < 200; b++); } 4)重点:创建一个.h文件 此文件是模块化编程的关键文件。创建一个hanshu.h文件。 该文件需要包含你自定义函数,例如:在led1.c中定义了一个void topToBottom()函数,我们在hanshu.h中就要有一个对应的void topToBottom()函数。同时,在led1.c的头文件中,需要加上:#include “hanshu.h”(其他文件一样)。这样子的话,当你包含了hanshu.h文件之后,当你调用topToBottom()函数的时候,调用的就是led.c中的topToBottom()函数。 注意: 此时的hanshu.h文件中包含了四个函数,这四个函数分别在自己创建的.c文件中,当调用这几个函数的时候,默认调用的是自己创建的.c文件中的同名函数 现在再看上方的.c文件,是不是都含有一个#include "hanshu.h" #ifndef _HANSHU_H_ //防止重复定义 #define _HANSHU_H_ #define uint unsigned int #define uchar unsigned char #define led P1 #include void topToBottom(); void bianToMiddle(); void yici(); void delay(); #endif 5)此时,模块化编程还没有结束,我们在我们的主文件中,也需要包含#include “hanshu.h”(注:自己写的.h文件加双引号,单片机自带的.h文件是<>) 6)我们来看一下我的效果: 7)编译,生成对应的.hex文件 (不知如何生成.hex文件的,看这边:Keil生成.hex文件) 三、Proteus仿真 流水方式一: 流水方式二: 流水方式三: 现在的话,就到这里了,对模块化编程还有不理解的地方的话,请在评论区,表示自己的困惑。 完结,撒花… |
|
|
|
只有小组成员才能发言,加入小组>>
2497 浏览 0 评论
1062浏览 2评论
681浏览 1评论
443浏览 0评论
177浏览 0评论
295浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 21:03 , Processed in 1.060811 second(s), Total 50, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号