-
单片机模块化编程
2019-10-15 16:35:54单片机模块化编程步骤: 1、先建5个文件夹:LED总文件夹、project、user、output和bsp文件夹 project文件夹主要放工程项目;user文件夹主要放main程序和pbdata程序,pbdata为自定义程序,存放公用的函数和引脚定义...单片机模块化编程步骤:
1、先建5个文件夹:LED总文件夹、project、user、output和bsp文件夹
project文件夹主要放工程项目;user文件夹主要放main程序和pbdata程序,pbdata为自定义程序,存放公用的函数和引脚定义;output放生成的HEX文件;bsp放外设电路程序(例如:数码管和按键程序)。
2、然后打开keil4软件,新建工程保存在project文件夹下面;新建pdata.c和pdata.h两个文件,保存在user文件夹下;新建main.c文件保存在user文件夹下;
3、点击图片所示图标,进行工程文件夹分类
4、按下图操作
4、对源程序来源文件夹进行位置定义,如下图所示:
5、进行程序编写:程序编写时要注意子模块的头文件写#include
“pdata.h”,而子文件的头文件声明写在pbdata.h文件中。最后编程项目结果如下图所示:
【特此声明】本文并未用作商业用途,主要是根据海创电子设计团队视频进行整理,以便自己下次创建模块化编程,详细可搜索模块化编程进行学习。欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本引用文本
H2O is是液体。
210 运算结果是 1024.
插入链接与图片
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的
代码片
.// An highlighted block var foo = 'bar';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 Value 电脑 $1600 手机 $12 导管 $1 设定内容居中、居左、居右
使用
:---------:
居中
使用:----------
居左
使用----------:
居右第一列 第二列 第三列 第一列文本居中 第二列文本居右 第三列文本居左 SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE ASCII HTML Single backticks 'Isn't this fun?'
‘Isn’t this fun?’ Quotes "Isn't this fun?"
“Isn’t this fun?” Dashes -- is en-dash, --- is em-dash
– is en-dash, — is em-dash 创建一个自定义列表
- Markdown
- Text-to-HTML conversion tool
- Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。2
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 是通过欧拉积分
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎
-
8051单片机模块化编程技巧
2020-07-16 00:57:51本文主要讲了8051单片机模块化编程技巧 ,希望对你的学习有所帮助。 -
51单片机模块化编程设计与实例
2012-11-27 20:52:4651单片机模块化编程设计与实例 -
基于51单片机模块化编程模块
2019-03-24 01:33:19基于51单片机的开发详细讲解,为大家更好的学习51单片机,方便交流 -
单片机全局有必要封装_单片机模块化编程的分层设计经验
2020-12-24 02:48:52单片机模块化编程的分层设计经验 模块化编程的分层设计经验(转载)电脑技术 2011-01-04 16:48:54 阅读 12 评论 0 字号:大中小 订阅 模块化编程的分层设计经验操作要点:1、每一层直接对下一层操作,尽量避免交叉调用...单片机模块化编程的分层设计经验
模块化编程的分层设计经验(转载)电脑技术 2011-01-04 16:48:54 阅读 12 评论 0 字号:大中小 订阅 模块化编程的分层设计经验操作要点:1、每一层直接对下一层操作,尽量避免交叉调用或越级调用2、某些器件会把硬件驱动层合并成一个文件时,则归于较高的层3、相同功能的外部函数尽量一致,尽量保证通用性4、对于初次编程的模块,要严格保证中间各层的正确性好处:1、对于后期维护扩展,只需修改应用层和物理层,根据需要扩展功能层2、一个新项目只需把要用到的文件加入工程,简单修改调试就出来了3、随着模块的不断积累,新的项目将越来越容易完成,后期的维护扩展也变得非常简单了4、对于 C 语言编程,只需简单修改物理层就可完成不同单片机间的移植呵呵,一些经验,大家有好的想法可以继续补充指正一般分为以下几层:---应用层--面向用户软| ↓件|---协议层--现成的协议栈、软件包、标准库,大多是移植,不自己写,如 FAT、TCPIP、OS、GAME 等相| ↓关| ↓---功能层--实现器件无关性,实现器件的各种功能扩展和器件通用性处理,如 LCD 的线、圆、矩形等功能,如EEPROM 的块写,自己的 print硬| ↓ 件|---器件层--实现硬件无关性,保证 IO 无关性,只提供器件的基本功能,如字节读写、点驱| ↓动 ---物理层--IO 相关,直接操作硬件,实现硬件连接的多种方案对应文件举例 1:---应用层--面向用户的主程序软| ↓件|--- 协议层--如 FAT、TCPIP、OS 等现成的协议栈、算法、游戏等相| ↓关| ↓---功能层--如文件lcd.c;led.c;eeprom.c;time.c;ir.c;keybord.c;harddisk.c;引出LCD 的线、圆、矩形、填充等功能硬| ↓ ↓件|--- 器件层--文件 lcd61202.c;lcd1520.c;lcd6963.c;lcd133x.c;lcd44780.c;lcd162x.c;lcd856x.c 或 者 lcd1602.c;lcd12864.c;lcd320240.c等,引出基本的初始化、定位、写点、写字节函数驱| ↓ ↓动 ---物理层--文件 lcd61202_io.c;lcd61202_bus.c;引出器件的基本读写函数对应文件应用举例 2:---应用层--面向用户的主程序软| ↓件|--- 协议层--如 FAT、TCPIP、OS 等现成的协议栈、算法、游戏等相| ↓关| ↓---功能层--如文件lcd.c;led.c;eeprom.c;time.c;ir.c;keybord.c;harddisk.c;如EEPROM 的块写统一化硬| ↓ ↓件|---器件层--文件ee24xx.c;ee93xx.c;ee_sdcard.c;ee29xx.c;ee28f.c;ee39xx.c;等驱| ↓ ↓动 ---物理层--文件 bus_i2c.c;bus_spi.c 等一个大的单片机程序往往包含很多模块,我是这样组织的1。每一个 C 源文件都要建立一个与之名字一样的 H 文件,里面仅仅包括该 C 文件的函数的声明,其他的什么也不会有,比如变量的定义啊等等不应该有。2。建立一个所有的文件都要共同使用的头文件,里面当然就是单片机的管脚使用的定义, 还有里面放那些需要的 KEIL 系统的头文件,比如 #include,#include 等等,把这个文件命名为 common.h,或者干脆就叫 main.h3,每个 C 源文件应该包含自己的头文件以及那个共同的使用的头文件,里面还放自己本文件内部使用的全局变量或者以 extern 定义的全局变量4。主文件 main.c 里面包含所有的头文件包括那个共同使用的文件,main.c 里面的函数可以再做一个头文件,也可以直接放在文件的开头部分声明就可以了,里面一般还有中断服务程序也放在 main.c 里面5。对于那些贯穿整个工程的变量,可以放在那个共同的使用的头文件里面,也可以用 extern 关键字在某个 C 源文件里面定义,哪个文件要使用就重复定义一下6.建立工程的时候,只要把 C 源文件加到工程中,把 H 文件直接放到相应的目录下面就可以了,不需要加到工程里面。三层开发电脑技术 2010-12-28 22:28:57 阅读 6 评论 0 字号:大中小 订阅 1.什么是三层架构所谓的三层开发就是将系统的整个业务应用划分为表示层 ——业务逻辑层 ——数据访问层,这样有利于系统的开发、维护、部署和扩展。分层是为了实现“高内聚、低耦合”。采用“分而治之”的思想,把问题划分开来各个解决,易于控制,易于延展,易于分配资源。表示层:负责直接跟用户进行交互,一般也就是指系统的界面,用于数据录入,数据显示等。意味着只做与外观显示相关的工作,不属于他的工作不用做。 业务逻辑层:用于做一些有效性验证的工作,以更好地保证程序运行的健壮性。如完成数据添加、修改和查询业务等;不允许指定的文本框中输入空字符串,数据格式是否正确及数据类型验证;用户的权限的合法性判断等等,通过以上的诸多判断以决定是否将操作继续向后传递,尽量保证程序的正常运行。 数据访问层:顾名思义,就是用于专门跟数据库进行交互。执行数据的添加、删除、修改和显示等。需要强调的是,所有的数据对象只在这一层被引用,如System.Data.SqlClient 等,除数据层之外的任何地方都不应该出现这样的引用。ASP.NET 可以使用.NET 平台快速方便地部署三层架构。 ASP.NET 革命性的变化是在网页中也使用基于事件的处理,可以指定处理的后台代码文件,可以使用C#、VB 、 C++和 J#作为后台代码的语言。. NET 中可以方便的实现组件的装配,后台代码通过命名空间可以方便的使用自己定义的组件。显示层放在 ASPX 页面中,数据库操作和逻辑层用组件或封装类来实现,这样就很方便的实现了三层架构。2.为什么使用三层架构对于一个简单的应用程序来说,代码量不是很多的情况下,一层结构或二层结构开发完全够用,没有必要将其复杂化,如果对一个复杂的大型系统,设计为一层结构或二层结构开发,那么这样的设计存在很严重缺陷。下面会具体介绍,分层开发其实是为大型系统服务的。在开发过程中,初级程序人员出现相似的功能经常复制代码,那么同样的代码为什么要写那么多次?不但使程序变得冗长,更不利于维护,一个小小的修改或许会涉及很多页面,经常导致异常的产生使程序不能正常运行。最主要的面向对象的思想没有得到丝毫的体现,打着面向对象的幌子却依然走着面向过程的道路。意识到这样的问题,初级程序人员开始将程序中一些公用的处理程序写成公共方法,封装在类中,供其它程序调用。例如写一个数据操作类,对数据操作进行合理封装,在数据库操作过程中,只要类中的相应方法(数据添加、修改、查询等)可以完成特定的数据操作,这就是数据访问层,不用每次操作数据库时都写那些重复性的数据库操作代码。在新的应用开发中,数据访问层可以直接拿来用。面向对象的三大特性之一的封装性在这里得到了很好的体现
-
单片机模块化编程串口中断怎么处理
2021-01-19 18:22:26单片机编程时,如果代码量不多,可以将所有的函数和定义等放在一个main.c文件中,但是随着代码量的增加,如果将所有代码都放在同一个.C文件中,会使得程序结构混乱、可读性与可移植性变差,而模块化编程就是解决这个... -
c51单片机模块化编程
2018-11-18 17:46:03在刚接触单片机,刚编写代码的时候都...为了解决这个缺点就必须学会模块化编程。将程序分解成一个一个模块。这样就有了多个.c 和多个.h。下面开始讲解什么是模块化编程,怎么去模块化。 借用网上的流水灯例子来说...在刚接触单片机,刚编写代码的时候都只是有一个.h 和一个.c文件。把所有的函数都写在.c里面。这样遇到复杂的系统时,代码量就很大,一下子就是几百行。而且把所有函数写在一个.c里不利于移植,对于以后的开发有了很大的限制。为了解决这个缺点就必须学会模块化编程。将程序分解成一个一个模块。这样就有了多个.c 和多个.h。下面开始讲解什么是模块化编程,怎么去模块化。
借用网上的流水灯例子来说明,侵删。
在不模块化情况下:
#include <reg52.h> #include "intrins.h" #define uchar unsigned char #define uint unsigned int void Delay_Ms(uint xms) { uint i,j; for(i=0;i<xms;i++) { for(j=0;j<110;j++); } } void Display_Led() { uchar aa,j; aa = 0x7f; for(j=0;j<8;j++) { P1 = aa; aa = _cror_(aa,1); Delay_Ms(500); } } void main() { while(1) { Display_Led(); } }
上面这个程序是全部写在了main.c这一个C文件里。完成了一个流水灯功能,程序非常简单,那么下面我们将程序模块化。模块化我们就建立一个 main.c led.c led.h 这三个文件,那么这三个文件里分别写什么东西呢,下面一个一个的写。led.h 里内容如下(如果看不懂ifndef这一边,你把它先理解为固定格式就行了,.h文件就是要先写 ifndef;define endif,照猫画虎先过一遍流程再说):
#ifndef LED_H //理解为 if not define led.h #define LED_H //如果没有定义 led.h ,这里就定义一个 led.h #include "reg52.h" //由于 led,c 里面要用到 51单片机寄存器 P1, // 所以这里包含 51 单片机的头文件 #include "intrins.h" // 循环移位用到 #define uchar unsigned char #define uint unsigned int // 这些宏定义都可以在头文件 .h 里定义 void Delay_Ms(uint xms); void Display_Led(); // 将led.c 里的函数在led.h 里面申明 #endif // 定义结束
led.c 里内容如下,将流水灯的主要程序放在这个.c 里面。作为单独的流水灯模块,在以后的程序中如果要用到这个流水灯程序
就直接把 led.c 和 led.h 移植过去。#include "led.h" // 这里包含 led.h 这个头文件 void Delay_Ms(uint xms) { uint i,j; for(i=0;i<xms;i++) { for(j=0;j<110;j++); } } void Display_Led() { uchar aa,j; aa = 0x7f; for(j=0;j<8;j++) { P1 = aa; aa = _cror_(aa,1);Delay_Ms(500); } }
用来完成流水灯功能的模块程序已经写好了,现在就开始主函数的编写。主函数就只需要调用一个Display_Led()函数就行了,看现在是怎么写的:
#include "led.h" //在 main.c 里现在包含的也是 led.h 而不是 reg52.h了 void main() { while(1) { Display_Led(); // 这样直接调用就行。 } }
模块化编程的时候要想到你把一个 .c 和.h 文件给另一个人,那个人能够很轻松的运用你给的这个模块来实现效果,且不需要去改动很多东西,那就算成功了。
extern是什么:extern文件间的全局变量。因此,.c里面用到的变量名字,一般在对应的.h文件中用extern声明(只声明不定义)
-
51单片机模块化编程
2020-07-14 18:41:25最近捋了捋模块化编程,将LED闪烁程序拆分,一个是只有h文件,一个是c和h文件,最后才是主函数调用 1.delay.h #ifndef __DELAY_H #define __DELAY_H void DelayUs2x(unsigned char t) { while(--t); } void ...最近捋了捋模块化编程,将LED闪烁程序拆分,一个是只有h文件,一个是c和h文件,最后才是主函数调用
1.delay.h #ifndef __DELAY_H #define __DELAY_H void DelayUs2x(unsigned char t) { while(--t); } void DelayMs(unsigned char t) { while(t--) { //大致延时1mS DelayUs2x(245); DelayUs2x(245); } } #endif
2.led.h #ifndef __LED_H #define __LED_H #include <reg51.h> sbit led1=P2^7; void LED_Init(void);//初始化 #endif
3.led.c #include <reg51.h> #include "led.h" #include "delay.h" void LED_Init() { //led1=1; //DelayMs(100); led1=0; DelayMs(100); led1=1; DelayMs(100); }
4.main.c #include <reg51.h> #include "led.h" void main() {while(1) { LED_Init(); } }
-
单片机模块化编程的原则有哪些
2021-01-19 18:17:49目前我们在学习和开发单片机时广泛采用 c 语言进行编程,当我们开发的单片机项目较小时,或者我们所写的练习程序很小时,我们总是习惯于将所有代码编写在同一个 c 文件下,由于程序代码量较少,通常为几十行或者上百... -
51单片机模块化编程调用文件
2014-07-16 10:52:05详细的51单片机开发代码 各种详细的头文件调用 有注释 24c02 数码管 液晶 1302 18b20 键盘 等等 -
经验分享|十年老司机的单片机模块化编程
2020-06-17 11:55:22本课程讲解单片机C语言模块化编程思维,利用结构体、枚举、指针、函数指针等将外设进行封装,方便程序的阅读、修改与移植。讲师简介: 刘杰, 软硬件工程师,10多年项目开发经验,擅长单片机产品开发,长期进行... -
单片机奇偶交替闪烁_单片机模块化编程的原则有哪些
2020-12-31 19:01:55目前我们在学习和开发单片机时广泛采用 c 语言进行编程,当我们开发的单片机项目较小时,或者我们所写的练习程序很小时,我们总是习惯于将所有代码编写在同一个 c 文件下,由于程序代码量较少,通常为几十行或者上百... -
51单片机模块化编程初识
2012-08-04 18:34:54在51单片机C语言编程中,为了提高程序的可移植性,有必要用可移植的变量类型的别名进行编程。把以下内容保存到编程软件的Include目录,并保存为了mytype.h文件. 如果你用的是Keil,这个目录可能就是:Keil\C51\INC... -
keil中的单片机模块化编程
2014-04-22 08:24:15我们今天所做的一切都是为了在单片机编程上做的更好。 在谈论今天的主题之前,先说下我以前的一些经历。在刚开始接触到C语言程序的时候,由于学习内容所限,写的程序都不是很大,一般也就几百行而矣。所以所有的... -
#学习笔记 keil环境下单片机模块化编程的方法
2019-03-18 00:57:071.选择”add new item to group“建立一个.c文件,一个.h文件,并且名字一致 2.h文件的写法 ...声明这个模块函数所需要的库以及接口(接口也可以放在.c文件里写); 声明配套c文件里的函数,相当于一个... -
单片机的模块化编程简介
2020-08-10 16:46:32现在生产的许多单片机对8051的内核进行了扩展,比如,内部看门狗,ADC转换、EEPROM、PWM等功能。在编程控制程序时,如需要利用这些扩展...在调试程序时就显得不太方便了,较好的方法是根据程序段的功能进行模块化编程。 -
单片机之模块化编程
2017-03-31 14:42:00单片机编程时,如果代码量不多,可以将所有的函数和定义等放在一个main.c文件中,但是随着代码量的增加,如果将所有代码都放在同一个.C文件中,会使得程序结构混乱、可读性与可移植性变差,而模块化编程就是解决这个... -
单片机的模块化编程
2016-10-08 17:38:46当一个项目小组做一个相对比较复杂的工程时,就需要小组成员分工...最后,小组成员都将自己负责的模块写完并调试无误后,由项目组长进行综合调试,像这些场合就要求程序必须模块化。模块化的好处非常多,不仅仅是便于
-
LQ 方案 .pdf
-
C++11多线程之future和promise
-
LVS + Keepalived 实现 MySQL 负载均衡与高可用
-
情感励志类短视频素材
-
批量新建工作簿
-
QmlGrowing.zip
-
利用windows防火墙可以干嘛
-
iOS视频硬编码技术
-
用php发https请求
-
ML 方案 .pdf
-
使用PHP实现WEB网站登陆后台编写
-
NFS 实现高可用(DRBD + heartbeat)
-
MySQL NDB Cluster 负载均衡和高可用集群
-
Java程序代码中的注释方式、详解及IDEA中的快捷键
-
xxx讲话实录.zip
-
MHA 高可用 MySQL 架构与 Altas 读写分离
-
php中上传图片到mysql数据库中
-
华为信息安全风险评估服务主打胶片.ppt
-
零基础一小时极简以太坊智能合约开发环境搭建并开发部署
-
HTML 时间获取器 laydate