运用Proteus完成一个C51简单程序设计和仿真——流水灯

一、Proteus部分

1、保存项目

(一)【文件】\rightarrow保存设计
请添加图片描述

(二)某盘\rightarrowProteus(双击)\rightarrow空白处右键\rightarrow新建文件夹\rightarrow 重命名“项目”
在这里插入图片描述
(三)双击项目\rightarrow文件名输入“1.流水灯” \rightarrow保存
在这里插入图片描述
(四)点击元件模式(左侧黄色运放按钮)\rightarrow点击“P”

(五)输入关键字\rightarrow选中器件\rightarrow确定
在这里插入图片描述
在这里插入图片描述
(六)放置元器件

先单击元件的关键字\rightarrow在原理图编辑窗口的合适位置再次单击即可

在这里插入图片描述

双击元器件的值即可修改
在这里插入图片描述

放置VCC
电路原理图如图所示
在这里插入图片描述

2、烧录程序

双击单片机\rightarrow点击Program File后面的文件夹标志\rightarrow上传.hex文件\rightarrow确定
在这里插入图片描述
若仿真时出现Cannot open ‘C:\User\XXX\AppDate\Local\Temp\LISA4823.SDF’

步骤:右键“此电脑”–>属性–>高级系统配置–>环境变量–>将“用户变量”和“系统变量”中TEMP与TMP的变量值改为%SystemRoot%\TEMP。

二、keil部分

1、创建项目

(一)新建一个文件夹保存项目
(二)双击"keil"\rightarrow“项目”\rightarrow“新uVision项目”
在这里插入图片描述
(三)将文件命名为项目名
在这里插入图片描述
(四)选择单片机型号
在这里插入图片描述
(五)单击“是(Y)”
(六)新建Text
在这里插入图片描述
(七)保存
(八)命名“.c”文件
在这里插入图片描述
(九)双击“Source Group 1”
(十)添加“.c”文件
(十一)生成.hex文件
在这里插入图片描述
点击“输出”\rightarrow勾选“创建HEX文件”
(十二)编译

2、参考程序

(一)位操法
缺点:代码冗长

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
 
sbit L1=P1^0;//将P1^0赋值给变量L1
sbit L2=P1^1;
sbit L3=P1^2;
sbit L4=P1^3;
sbit L5=P1^4;
sbit L6=P1^5;
sbit L7=P1^6;
sbit L8=P1^7;
 
void delay(uint n)//延时函数(n)ms
{
	uchar i;
	uint j;
	for(j=0;j<n;j++)
	for(i=0;i<123;i++);
}
 
void flash1()//LED1亮0.5s后熄灭
{
	L1=0;//LED1亮
	delay(500);
	L1=1;//LED1灭
}
 
void flash2()
{
	L2=0;
	delay(500);
	L2=1;
}
 
void flash3()
{
	L3=0;
	delay(500);
	L3=1;
}
 
void flash4()
{
	L4=0;
	delay(500);
	L4=1;
}
 
void flash5()
{
	L5=0;
	delay(500);
	L5=1;
}
 
void flash6()
{
	L6=0;
	delay(500);
	L6=1;
}
 
void flash7()
{
	L7=0;
	delay(500);
	L7=1;
}
 
void flash8()
{
	L8=0;
	delay(500);
	L8=1;
}
 
void main (void)
{
	while(1)
	{
		flash1();
		flash2();
		flash3();
		flash4();
		flash5();
		flash6();
		flash7();
		flash8();
		
		flash8();
		flash7();
		flash6();
		flash5();
		flash4();
		flash3();
		flash2();
		flash1();
	}
}

(二)数组总线法
在这里插入图片描述
在这里插入图片描述
优点:代码简短

缺点:点亮数据编写比较麻烦,且容易出错

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar tab[ ]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//前8个数据为左移点亮数据,后8个数据为右移点亮数据
 
void delay(uint n)
{
	uchar i;
	uint j;
	for(j=0;j<n;j++)
	for(i=0;i<123;i++);
}
 
void main (void)
{
	uchar i;
	while(1)
	{
		for(i=0;i<16;i++)
		{
			P1=tab[i];
			delay(500);
		}
	}
}

三、LED流水灯

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

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

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

四、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可以通过软件生成。
在这里插入图片描述

五、演示

在这里插入图片描述

  • 25
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 流水灯程序文件是指用于控制流水灯运行的程序文件,一般采用C语言编写。该文件中包含了流水灯的控制逻辑和相关的函数定义。例如,可以定义一个函数来实现流水灯的移动效果,并调用相应的IO口控制LED灯的状态。 Proteus仿真文件是一种用于进行电路仿真的文件格式,用于模拟电路的功能和性能。在Proteus软件中,可以创建电路原理图并根据电路组件的参数进行仿真。对于流水灯来说,可以使用Proteus中的LED模块和计时器模块来模拟LED灯和流水灯的移动效果。仿真文件中会包含电路的连接关系、元器件的参数和相应的仿真设置。 通过将流水灯的源程序文件连接到Proteus仿真文件中,我们可以通过仿真来验证流水灯的运行效果。在仿真中可以模拟LED灯的亮灭状态和流水灯的移动效果,从而检查程序是否正常工作。此外,仿真还可以帮助我们优化算法和调试代码,减少实际硬件调试的时间和成本。 总之,流水灯程序文件和Proteus仿真文件是协同工作的,源程序文件定义了流水灯的控制逻辑,而仿真文件则用于验证和调试这个逻辑。它们在流水灯的设计和开发过程中起到了非常重要的作用。 ### 回答2: 流水灯是一种常见的电子技术实验项目,它通过多个LED灯按照一定的顺序不断点亮和熄灭,形成灯流水般的效果。要实现流水灯,需要编写一段源程序文件,并进行仿真测试。 流水灯程序文件是用来控制流水灯的实际代码。它通常是由C语言或者汇编语言编写而成的,通过对MCU(单片机)的GPIO(通用输入输出口)进行控制来逐个点亮和熄灭LED灯。在编写源程序文件时,需要确定流水灯的流动方向、速度以及使用的引脚,并按照相应的逻辑来设置GPIO的状态,从而实现流水灯的效果。 Proteus仿真软件是一种电子电路设计与仿真工具,它可以对电路原理图进行仿真和测试。在设计流水灯时,我们可以使用Proteus来模拟流水灯的运行情况,以确保源程序文件的正确性和流水灯的效果。我们可以在Proteus中绘制相应的电路原理图,将MCU和LED等元件连接起来,并加载流水灯程序文件进行仿真。通过仿真,我们可以观察LED灯的点亮和熄灭情况,以及流水灯的流动效果是否符合预期。 综上所述,流水灯程序文件和Proteus仿真文件在实现流水灯项目中起着重要的作用。源程序文件通过对MCU的GPIO进行控制来实现流水灯的点亮和熄灭,而Proteus仿真文件可以帮助我们验证流水灯的运行效果和源程序文件的正确性。同时,通过仿真,我们还可以进行调试和优化,以得到更好的流水灯效果。 ### 回答3: 流水灯程序文件和proteus仿真文件是用于控制流水灯功能的两个文件。 流水灯程序文件是以某种编程语言编写的程序文件,例如C/C++、Python等。在源程序文件中,主要包含了控制流水灯的相关代码逻辑和设备驱动函数。通过编写源程序文件,可以实现流水灯的闪烁、灭灯、变换等功能。源程序文件可以被编译生成可以在特定的硬件平台上运行的可执行文件。 而proteus仿真文件则是用于在电路仿真软件proteus中模拟流水灯的运行情况的文件。proteus是一种常用的电路仿真软件,它模拟了电路中各个元器件的特性和连接方式。通过创建proteus仿真文件,并在其中添加相应的元器件和连线,可以实现对流水灯的模拟运行。在proteus中,可以设置流水灯的输入信号、周期、亮度等参数,观察流水灯的亮灭情况,以及流水灯在不同情况下的波形和电压。 总结起来,流水灯程序文件和proteus仿真文件是分别用于控制流水灯功能和模拟流水灯运行情况的文件。前者用于实际硬件的控制程序编写和运行,后者用于在电路仿真软件中模拟流水灯的工作过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值