论坛风格切换
您好,欢迎光临本站!   登录 注册新用户
  • 2715阅读
  • 0回复

[.NET]单片机入门经典!11 个单片机程序设计经典项目!25个项目资料免费放送! [复制链接]

上一主题 下一主题
 
发帖
3
黑豆
-16
威望
-17
贡献值
0
交易币
0
红豆
0
只看楼主 倒序阅读 0 发表于: 2016-09-14



单片机 入门经典!11 个单片机程序设计经典项目!25个项目资料免费放送!
项目 1    P0.0 接口驱动 LED 闪烁

闪烁控制是安全灯、高层建筑、高空飞行器、警示灯等设备灯光闪烁控制的原理基础,也是单片机项目学习过程中最简单的项目。这里我们做为一个项目设计,详细叙述项目实现的基本过程。

1.电路设计


电路硬件是单片机项目实现的基础,在项目设计过程中必须先设计项目的电路原理。为了提高程序和电路的联调效果,我们采用 Proteus 软件设计单片机项目的仿真电路,当程序设计完成后,可在仿真系统中直接加载程序验证程序设计的完整性。
















(a)低电平驱动    (b)高电平驱动




图 1    P0 接口驱动 LED 电路



LED 闪烁电路参考图 1b 低电平直接驱动方式。项目设计时,应先根据项目的原理图利用 Proteus 软件设计仿真电路图,下面重新说明 Proteus 使用过程。

(1)打开 Protuse 软件的 ISIS 程序并保存文件


一个项目包含程序和电路两部分,因此在使用 Protuse 软件的设计电路时,应首先考虑仿真电路文件的目录。在学习项目设计过程中,建立科学的项目目录结构对于养成良好的项目开发习惯有很多益处,因为真正进行单片机项目开发时,你所做的一切都很重要。项目 1
所在的目录结构见图 2 所示。































图 2    项目 1 目录结构


操作过程中,首先打开 Protuse ISIS 程序,鼠标左键点击 FileSave Design As,在弹出的窗口中选择合适路径,然后点击创建新文件夹并命名为项目 1-LED 闪烁;然后进入这个文件夹后,再创建一个新文件夹命名为电路。再一次进入电路文件夹中,这时才对要保存电路文件命名,比如LED 闪烁

(2)Protuse ISIS 设计电路




使用 Protuse 进行原理图设计主要操作为放置元器件和连线。本项目所使用的单片机型号虽然为 STC89C51,但在 Protuse 中是 51 内核的单片机都可以使用。这里选择

Micropocessor Ics-8051 Family 中的 80C51。Protuse 原理图中的单片机电路符号,含有
完整的单片机最小系统模型,并且电源默认连接完好。仿真电路设计见图 3 所示,为了使

LED 达到显示效果,上拉电阻 R1 取值为 470 欧姆,实际应用要取值大一些。电路设计完成

后,再次保存设计,下面就可以设计程序了。

























图 3    项目 1 的仿真电路图


2.程序设计


本项目采用 Keil 软件进行设计,基本操作共 4 个步骤,分别是创建一个项目、新建 C

文件、程序设计、生成 HEX 文件。


创建项目和新建 C 文件比较简单,这里不再详细说明,但要注意,在打开 Keil 软件时,新建的工程必须保存在项目 1 目录下的程序中,新建一个 C 文件,应保存为 main.c,并加载到工程中。

(1)程序设计


由于单片机内部的 P0~P3 寄存器都可以进行位操作,程序设计过程中,可以利用程序对

P0.0 位直接操作即可控制 LED 的闪烁。



C51 定义 P0.0 为 P0^0,因此在利用 C 语言程序设计时,可使 P0.0 输出高、低电平,如

P0.0 输出低电平,程序中编写 P0^0 为 0 即可。为了使程序简单明了,可以利用 sbit LED = P0^0 语句,让 LED 代替 P0^0。
在程序编写过程中,项目程序设计的一般顺序是先写#include<reg51.h>,然后编写主

函数,用到 LED 时,才在程序的预处理区写sbit LED = P0^0;,用到延时函数时才在主

函数前面写 void delay(unsigned int x)函数。千万不要按照提供的程序一步一步地照

抄,因为这样等于自己没有一个完整的编程思路。本项目的具体程序为


#include<reg51.h>

//包含头文件

sbit LED = P0^0;

// LED 接 P0.0。在 kell C51 软件中,定义 P0.0 为 P0^0,

void delay(unsigned int x)

//延时函数

{





while(x--);


}


void main(void)    //主函数


{


LED =0;    //P0.0 输出低电平,LED1 灭


delay(50000);    //调用延时函数,延时一段时间,约 0.3 秒,不精确


LED ==1;    //P0.0 输出高电平,LED1 亮


delay(50000);


}


(2)程序说明


1)本项目中,单片机型号为 STC89C51,因此程序包含 reg51.h 文件,reg51.h 文件定义了 51 单片机所有特殊功能寄存器的名称定义和相对应的地址值。
2)单片机程序顺序执行,先执行主函数,在主函数内可以调用子函数,子函数可以调用子函数,但子函数不能调用主函数。单片机程序从主函数入口依次执行每一条指令,执行完毕后返回到主函数入口进行下次循环。
3)延时函数。延时的过程是程序执行了一个延时函数 delay()。在主函数调用延时的过程中,如果单片机没有中断发生,单片机只能忙于执行这个延时函数。
单片机在执行延时函数相关指令时,每一条指令都会占用一定数量的机器周期,执行完延时函数的所有指令,浪费或占用的时间就是调用延时函数所获得的延时时间,但执行延时函数不能得到精确的延时时间。
4)利用位定义命令让 LED 等价于 P0.0 位,程序执行 LED1=1 后,单片机内部位寄存器

P0.0 位就设置为高电平,同时 P0.0 端口就会输出高电平。单片机的所有 I/O 接口都可以进行位操作,也可以字节操作。
5)利用 C 语言编写单片机程序时,每个人都有自己的风格。虽然 C 语言格式自由,但作为单片机的程序语言,具有严格的书写格式。为了提高单片机 C 语言程序的可读性,增加程序页的层次感,一般情况下,函数的字符左边距为 0,函数体每条语句前留一个tab

键空;算数逻辑符号的左右各留一个空格,关键语句要有中文或英文注释,关键函数有时需要用/**...**/说明,并把主函数所在的程序命名为 main.c。
6)实际应用中,把 LED 换成继电器或其它驱动电路,就可以让单片机间接驱动一个大功率的负载,如额定电压为交流 220V、200W 的红色的灯泡闪烁。图 4 电路为安全灯闪烁驱动电路,双向光电晶闸管型号为 MOC3061,再加上一级晶闸管 VTH,可以实现更大功率的负载驱动。


















图 4    单片机大功率交流负载驱动



3.程序编译并创建 HEX 文件
程序编译是检验程序设计格式或代码错误的过程。如果程序在编译过程中出错,会在

Keil 的编译结果栏中进行提示。程序的调试修改过程一般先用鼠标左键双击最上面的错误提示进行修改,然后再编译,一直到无错误、无警告为止。
HEX 文件是单片机可以执行的二进制文件,程序编译无误后可以通过 Keil 软件创建一个 HEX 文件。在工具栏中 Project→Options For Target ‘target 1’→Output 窗口中选中Create HEX Fi,再编译时,Keil 即可创建一个 HEX 文件,这个文件自动保存在项目程序的目录下。 可将 Keil 软件创建的 HEX 文件直接下载到实验开发板上的单片机中运行,也可以加载到仿真电路中的单片机内运行。
4.软件仿真

软件仿真是一种单片机系统测试,在没有硬件的条件下,利用 Protuse 进行软件仿真可以快速检验单片机程序设计的正确性。本项目在仿真时,需要利用 Protuse 先画出项目的参考电路,然后把本项目程序创建的 HEX 文件加载到单片机中,最后单击运行即可可以看到本项目 LED 闪烁的效果。
Protuse 是单片机程序设计的重要仿真工具,但软件仿真不能测试软件的安全性和可靠性,也不能测试电路电气特性的完整性。单片机的程序设计或相关产品开发必须有相关的软件和硬件实验支撑。本项目中,为了进一步验证程序的可靠性,可以把程序下载到实验开发板或实验箱中的单片机内进行实际运行。
因为本项目比较简单,初学者在了解项目的设计过程后可亲自动手设计电路并编写程序,实现项目的功能和要求。如果能看到成功的仿真结果,一定会有成就感,这就是项目设计的兴趣所在。
快速回复
限100 字节
 
上一个 下一个