【单片机】Keil+Proteus流水灯(模块化编程)

发布者:WhisperingWish最新更新时间:2021-11-26 来源: eefocus关键字:单片机  Keil  Proteus  流水灯  模块化编程 手机看文章 扫描二维码
随时随地手机看文章

本篇文章:

主要是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[i];

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[i];

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仿真

流水方式一:

在这里插入图片描述

流水方式二:

在这里插入图片描述

流水方式三:

在这里插入图片描述

现在的话,就到这里了,对模块化编程还有不理解的地方的话,请在评论区,表示自己的困惑。


完结,撒花…

关键字:单片机  Keil  Proteus  流水灯  模块化编程 引用地址:【单片机】Keil+Proteus流水灯(模块化编程)

上一篇:【单片机】实战篇:Keil+Proteus数码管计数99
下一篇:【单片机】Keil+Proteus两个按键实现开关灯

推荐阅读最新更新时间:2024-11-07 09:16

单片机上的按键检测框架
下面是我之前写的一个按键检测的框架,适合比较多的按键操作,从信号接收、滤波、最好处理按键任务,大体上没什么问题,不过没具体测试过到时可能会有bug。 1 /****************************************************************************** 2 * @file button.c 3 * @author wule 4 * @version 5 * @date 6 * @brief 7 ***************************************************************************
[单片机]
基于PICFxx单片机控制的正弦波逆变电源
   0 引言   逆变电源是一种采用电力电子技术进行电能变换的装置。随着电力电子技术的发展,逆变电源的应用越来越广泛,但应用系统对逆变电源的输出电压波形特性也随之提出了越来越高的要求,因为电源的输出波形质量直接关系到整个系统的安全和可靠性指标。   随着数字信号处理技术的发展,以SPWM控制方式设计的逆变电源越来越受到青睐。本文介绍的SPWM逆变电源就是采用PIC单片机来实现SPWM控制和正弦波方式输出,而且电路简单,性能安全可靠,灵活性强,同时可以降低谐波,提高效率。    1 SPWM逆变器结构   逆变电源的拓扑结构有多种形式,图l所示是SPWM逆变电源的基本结构,它主要由变压器中心抽头推挽式升压电路、逆变电路、滤
[电源管理]
用于HV/EV电机控制的32位微控制器MB91580
富士通半导体推出了用于HV/EV电机控制的32位微控制器MB91580系列,以及用于驾驶辅助显示控制的系统LSI MB86R11。我们不妨来看看两款器件到底有哪些具体功能和特点,又在汽车中发挥怎样的作用。   MB91580的驱动电机控制优势   MB91580系列是富士通半导体紧跟市场需求推出的节能汽车驱动电机控制芯片。作为高性能32位闪存嵌入微控制器(MCU)的FR家族成员,该系列产品可广泛应用于电动汽车和混合动力汽车的驱动电机控制功能。   该系列拥有专用嵌入旋转变压器感应器接口,能够开拓性地控制EV和HV中使用的三相电机,实现EV/HV驱动电机必须的高转矩响应控制过程达到改善电机运行和降低能耗的目的。   此外,
[模拟电子]
用于HV/EV电机控制的32位<font color='red'>微控制器</font>MB91580
TI全球首款多标准MCU无线平台是什么样子的
从电视机遥控到无线耳机,从智能家居到上网冲浪,无线应用无处不在,我们的生活因此方便了许多。不过有些工程师不这么想,由于应用场合的不同,无线特点与标准各有差异,给开发者带来诸多困扰,尽管可以提前根据应用场景选择合适的技术,但复杂的网络标准及无线设计仍是阻碍创新的一大因素。 为了解决工程师们的普遍困扰,德州仪器推出全球第一款同时支持2.4GHz与Sub-1GHz双频段的无线MCU CC1350,集成包括蓝牙,ZigBee,RF4CE,Sub-1GHZ等多种物联网无线协议与射频,一颗芯片就解决了开发者的选型困扰。 比如在网络摄像头的应用中,一方面我们可能需要用手机通过蓝牙控制云台,另外也需要摄像头之间进行Sub-1GHz协议的
[物联网]
TI全球首款多标准<font color='red'>MCU</font>无线平台是什么样子的
单片机实验板2011_V1.1-ADC0809练习程序
原理图: ADC0809控制时序: 测试程序 /************单片机教学实验板 ******************/ /*功能描述:ADC0809练习 */ /*作者:郑 文 */ /*编写时间:2011.3.1 */ /*接外部晶振11.0592 MHZ */ /*功能描述*/ //AD采集声音 LED输出 #include reg52.h #include STC_Delay.h #include stdio.h #include stdlib.
[单片机]
<font color='red'>单片机</font>实验板2011_V1.1-ADC0809练习程序
基于MSP430F2274单片机的倒车雷达设计
随着人们对汽车辅助驾驶系统智能化要求的提高和汽车电子系统的网络化发 展,新型的倒车 雷达 应能够连续测距并显示障碍物距离,并具有通信功能,能够把数据发送到汽车总线上去。以往的倒车 雷达 设计使用的元器件较多,功能也较简单。本文介绍的基于新型高性能 超低功耗 单片机 MSP430F2274的倒车 雷达 可以弥补以往产品的不足。   系统总体设计   系统采 用 超声波测距 原理。 超声波测距 仪器一般由发射器、接收器和信号处理器三部分组成。工作时,超声波发射器发出超声波脉冲,超声波接收器接收遇到障碍物反射回来的反射波,准确测量超声波从发射到遇到障碍物反射返回的时间,根据超声波的传播速度,可以计算出
[单片机]
基于MSP430F2274<font color='red'>单片机</font>的倒车雷达设计
瑞萨蓝牙5 32位MCU助力工程师快速着手开发
全球领先的半导体解决方案供应商瑞萨电子株式会社推出首款集成了蓝牙5(Bluetooth® 5)的RA微控制器(MCU)产品RA4W1,支持低功耗蓝牙。在单芯片56引脚QFN封装内集成了48 MHz 32位Arm® Cortex®-M4内核和蓝牙5内核。RA4W1 MCU与易用的灵活配置软件包(FSP)相结合,加上Arm生态系统中支持RA MCU开箱即用的软硬件模块,可帮助工程师即刻启动开发。 RA4W1 MCU可帮助嵌入式设计人员轻松地为工业4.0、楼宇自动化、计量、医疗、消费类可穿戴设备及家电等应用开发安全可靠的物联网终端设备。此款MCU还非常适合构建用于无线传感网络的IoT边缘设备、IoT集中器、网关附加组件以及Io
[嵌入式]
瑞萨蓝牙5 32位<font color='red'>MCU</font>助力工程师快速着手开发
STM32Note初识单片机
单片机是如何构成的呢? 单片机,集成的微型计算机系统(也称MCU),由CPU、内存、I/O接口电路等部分组成,把单片机比做人的话,CPU负责思考,内存负责记忆,而接口电路则像神经系统连接着大脑和身体,完成信号的传导和各种动作的实现。 单片机基本运作流程 尽管我们说CPU相当于大脑,进行思考等过程,但它并不能像人脑一样自发主动的进行思考。事实上,CPU只能依次读取并执行预先存储在内存中的指令组合,而且,这些指令都是一些非常基本的运算以及读写操作,不过,这些简单指令的组合却足以完成非常复杂的功能。 从上图可以看出,单片机运作主要是由CPU读取内存中的指令,完成对存储器中数据的运算或者通过I/O接口完成对外设的操作,而上图也反映
[单片机]
STM32Note初识<font color='red'>单片机</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved