微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 11个单片机程序设计经典项目!25个项目资料免费放送!

11个单片机程序设计经典项目!25个项目资料免费放送!

时间:06-21 来源:互联网 点击:
本文以STC89系列单片机为例,重点训练读者的C语言基础和单片机的程序设计能力。

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

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

(a)低电平驱动  (b)高电平驱动
图1  P0接口驱动LED电路

LED闪烁电路参考图1b低电平直接驱动方式。项目设计时,应先根据项目的原理图利用Proteus软件设计仿真电路图,下面重新说明Proteus使用过程。
(1)打开Proteus软件的ISIS程序并保存文件
一个项目包含程序和电路两部分,因此在使用Proteus软件的设计电路时,应首先考虑仿真电路文件的目录。在学习项目设计过程中,建立科学的项目目录结构对于养成良好的项目开发习惯有很多益处,因为真正进行单片机项目开发时,你所做的一切都很重要。项目1所在的目录结构见图2所示。

图2  项目1目录结构

操作过程中,首先打开Proteus ISIS程序,鼠标左键点击File→Save Design As,在弹出的窗口中选择合适路径,然后点击“创建新文件夹”并命名为“项目1-LED闪烁”;然后进入这个文件夹后,再创建一个新文件夹命名为“电路”。再一次进入“电路”文件夹中,这时才对要保存电路文件命名,比如“LED闪烁”。
(2)Proteus ISIS设计电路
使用Proteus进行原理图设计主要操作为放置元器件和连线。本项目所使用的单片机型号虽然为STC89C51,但在Proteus中是51内核的单片机都可以使用。这里选择Micropocessor Ics-8051 Family中的80C51。Proteus原理图中的单片机电路符号,含有完整的单片机最小系统模型,并且电源默认连接完好。仿真电路设计见图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,可以实现更大功率的负载驱动。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top