Proteus软件仿真教程:手把手实现LED流水灯

1 单片机8051系列

爬虫是不能发了,审核总是不通过,算了,发点其他的。

51单片机是对兼容英特尔8051指令系统的单片机的统称。51单片机广泛应用于家用电器、汽车、工业测控、通信设备中。因为51单片机的指令系统、内部结构相对简单,所以国内许多高校用其进行单片机入门教学。

2 proteus,keil C

有的同学学习单片机是买开发板来做的,很便宜,能看得见实物。当然不买开发板也是可以的,通过Proteus仿真来实现,效果是一样的。

安装keil C软件如果要破解的话,需要关闭杀毒软件。

3 Proteus构建51单片机最小系统

3.1、新建工程

打开新建工程,在相关文件夹下新建个工程文件夹,flashled。

  

这里可以选择没有固件项目,也可以选择创建固件项目,编译器如果用的是汇编,就选择ASEM-51,如果用C语言,需要选keil,因为安装的keil有C编译环境,如果你的软件没有则点编译器,检查全部。(需要先安装keil,我装的是uvision5)

然后下一步结束新建工程。

3.2、放置原件

首先需要绘制原理图,刚开始确实有点手生,操作不太顺,正常,等练多了,就快了。我们需要画一个单片机最小系统。这个和微机原理中的8086类似,但比8086要简单些,因为8051是微控制器,内存,定时器等都集成到CPU内部,8086是微处理器,仅有CPU,外部电路图要复杂些。

我们需要放置必备的元器件构成单片机最小系统,这个在其他项目里面直接复制也可以。

 点确定之后电路图左边就会有这个器件,然后选中放到sheet里面就可以了。

3.3、构建最小系统

 

 如果要放置一个节点,右键选择放置-终端-有电源有接地,单片机最小系统电源和接地引脚不用管了,都是默认接好的,因此从图上看不到这2个引脚。

3.3.1 复位电路

单片机复位时RST要保持2个机器周期以上的高电平,这个地方接的电阻不能过大,正常工作时为低电平,当按下按键电源给高电平,完成复位,电容充满电后的作用为隔断电源。

3.3.2 时钟电路

在51单片机片内有一个高增益的反相放大器,反相放大器的输入端为XTAL1,输出端为XTAL2,由该放大器构成的振荡电路和时钟电路一起构成了单片机的时钟方式。

4 LED流水灯

这个是最常用的仿真实验,主要是对P口的输出信号,一般都是共阳极,给低电平点亮。如果共阴极高电平点灯则电流小,驱动不够。这共阳极接上拉电阻,阻值低则LED越亮,但是不能太低,太低则输出态为高阻态。51单片机的P0口是一个OC门输出的I/O口,所以要加上拉电阻才能有电平输出,在PROTEUS里的蓝色为低电平,红色为高电平,灰色则是高阻态,如果不是P0口,则不需要上拉电阻。

P0口第一个功能是数据接口,第二个功能是地址低八位,P2口第二个功能是地址高八位。另外除了P0口没有内部上拉电阻外,其他三个都有内部上拉电阻。

绘图的时候有个坑大家注意:用proteus画仿真图时,元件的每个引脚都必须有一段导线与其它元件或电路相连才行,不能用引脚直接连接。所有LED都有一个结点,这样才行的。不然中间6个LED灯不亮。

5 C程序

C程序比较简单,这里面要引用reg51.h头文件,也可以引用REGX52头文件也是可以的,51头文件是proteus自带的,52的头文件需要另外添加到工程里面。还有个延时程序,_NOP_,这个可以在程序前面自己定义,也可以引用头文件的定义,执行Nop指令只使程序计数器PC加1,所以占用一个机器周期。

#include <reg51.h>
void   _nop_  (void);
void Delay500ms()		//@12.000MHz
{
	unsigned char i, j, k;
	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


void main()
{
	while(1)
	{
		P0=0xFE;//1111 1110
		Delay500ms();
		P0=0xFD;//1111 1101
		Delay500ms();
		P0=0xFB;//1111 1011
		Delay500ms();
		P0=0xF7;//1111 0111
		Delay500ms();
		P0=0xEF;//1110 1111
		Delay500ms();
		P0=0xDF;//1101 1111
		Delay500ms();
		P0=0xBF;//1011 1111
		Delay500ms();
		P0=0x7F;//0111 1111
		Delay500ms();
	}
}

 1、延时程序的时间可以改进,通过函数的参数来控制时间,循环控制,基本的时间如1ms可以通过软件生成。

void Delay1ms(unsigned int xms)        //@12.000MHz
{
    unsigned char i, j;
    while(xms)
    {
        i = 2;
        j = 239;
        do
        {
            while (–j);
        } while (–i);
        xms–;
    }
}

2、主程序的流水灯也可以 通过循环移位来实现 ,这就不介绍了

6. 演示

物联沃分享整理
物联沃-IOTWORD物联网 » Proteus软件仿真教程:手把手实现LED流水灯

发表评论