点亮流水LED灯

       根据我们的学习,我们已经开始接触 Proteus、Keil uVision5 这两款软件,同时随着我们51汇编语言的学习,基于之前我们所学习 C / C++ 语言,我们尝试主要使用 Proteus 与 Keil uVision5 软件完成点亮流水LED灯的任务。

       目标:采用多个LED,设计一个LED流水灯电路,分别用51汇编语言和C语言编程,实现流水灯正常工作。

软件介绍:

一、Proteus软件介绍

       Proteus软件是英国Lab Center Electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是比较好的仿真单片机及外围器件的工具。

       Proteus从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DSPIC33、AVR、ARM、8086和MSP430等 。我们以Proteus8为例简单介绍其使用。 

如上图所示,为Proteus8的首页,下面我们用该软件构建新的工程。

构建新的工程:

构建新的工程有两个途径,一是软件界面左上角的白纸,二是开始设计下方的 “ 新建工程选项 ” (已用红色方框标注出来)。

按照上述箭头指引的操作,依次点击下一步 ,需要注意到达固件项目时,需要选择 “ AT98C51  ” 该选项再进行下一步操作。

直到点击完成,即完成了新工程的建立。(如下图)

二、Keil uVision5软件介绍

       Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统。与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

软件首页如上图所示。

创建新工程:

根据箭头所示步骤进行操作,即可创建成功,成功过后左方状态栏如下图所示:

任务实现:

C语言编程实现点亮流水LED灯:

原理图绘制:

这一步需要使用Protues软件,根据上述操作创建好新的工程,进入原理图界面,其左边为模型选择工具栏(如下图),可以在该栏中选取自己需要使用的模型或者工具。例如,用于即时编辑元件参数(先单击该图标,再单击要修改的元件)选择元件、放置连接点、放置标签(备注)、放置文本、用于绘制总线、用于放置子电路等等。

然后根据箭头指示操作,进入界面搜索相关元器件(AT89C51芯片、LED灯、电阻、线路、电源等),绘制相关的原理图。

 

 如上图所示,为选择的全部元器件,其中LED灯我们选择黄色。

最终原理图如下图所示:

注意: 

其中线路的编号使用 LBL 为支线标记编号,支线要通过编号才能与主线正常连接,且编号需要一致,才能确保后续步骤的正常运行。

其中电阻的阻值我们选择的是300Ω。

编写程序:

在连接好电路原理图之后我们需要开始编写程序了,主要的程序如下:

//头文件

	#include <reg51.h>
	#include <intrins.h>
	//延迟函数

	void delay_ms(int a)
	{
		int i,j;
		for(i=0;i<a;i++)
		{
			for(j=0;j<1000;j++) _nop_();
	
		}
	}
	
	void main(void)
	{
		while(1)
		{
			P0=0xfe;
			delay_ms(50);
			P0=0xfd;
			delay_ms(50);
			P0=0xfb;
			delay_ms(50);
			P0=0xf7;
			delay_ms(50);
			P0=0xef;
			delay_ms(50);
			P0=0xdf;
			delay_ms(50);
			P0=0xbf;
			delay_ms(50);
			P0=0x7f;
			delay_ms(50);
		}
	}

 按照上述操作对代码进行复制粘贴,然后保存,保存时文件名要加以  " .c " 的后缀

根据箭头指引的步骤操作,然后再在刚才保存的地址中找到保存的 " .c " 文件,再点击 " Add " 进行添加。

根据之前的操作可以看到左边工程栏已经有了 " .c " 文件,再根据箭头指示操作,进行编译过后看到工程栏增加了新的 " .h " 文件,则操作成功。 

进行仿真:

再次打开Protues软件

双击芯片,然后根据箭头指示,添加编译生成的 " .hex " 文件。

 点击开始键,即可开始仿真。仿真结果如下:

51汇编语言实现点亮流水LED灯:

原理图:

为了体现出与上述方法的区别,对原理图稍加改变,但实质不变,如下。

编写程序:

代码如下:

ORG 0000H
LJMP MAIN

ORG 0100H
MAIN:
MOV A,#80H
LOOP:
MOV P2,A
LCALL DELAY 
RR A  
LJMP LOOP

DELAY:
MOV R2,#255
D1:MOV R3,#250
D2:DJNZ R3,D2       
DJNZ R2,D1
RET

END

总统操作与上述步骤一样,但是保存文件时,要使用 " .asm " 的后缀。

进行仿真:

其步骤也只是再选择文件的地方有所区别,选择对应的 " .hex " 文件。

 然后同样点击开始运行,运行完成即完成仿真。

  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是点亮流水LED的示例代码: 1. 首先,在CubeMX中配置GPIO引脚作为输出模式,具体操作如下: - 打开CubeMX软件,选择对应的MCU型号 - 在Pinout选项卡中,选择需要控制的GPIO引脚(例如PA0) - 在右侧的Mode下拉菜单中选择Output mode - 在右侧的Pull-down/Pull-up下拉菜单中选择No pull-up and no pull-down - 点击Apply按钮,然后点击Generate Code按钮生成代码 2. 在生成的代码中,找到以下函数并编写点亮流水的代码: ```c /* USER CODE BEGIN 4 */ /* USER CODE END 4 */ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { /* USER CODE BEGIN Callback 0 */ /* USER CODE END Callback 0 */ if (htim->Instance == TIM3) { HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0); } /* USER CODE BEGIN Callback 1 */ /* USER CODE END Callback 1 */ } ``` 以上代码中的HAL_TIM_PeriodElapsedCallback函数是一个定时器中断的回调函数,在该函数中可以编写控制LED的代码。在上述代码中,我们使用了HAL_GPIO_TogglePin函数来控制GPIO引脚的电平翻转,从而实现流水的效果。 3. 在main函数中,启动定时器以便定时触发回调函数: ```c int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_TIM3_Init(); /* USER CODE BEGIN 2 */ HAL_TIM_Base_Start_IT(&htim3); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } ``` 在以上代码中,我们启动了TIM3定时器,并开启了定时器中断模式。当定时器计数完成后,将会自动触发HAL_TIM_PeriodElapsedCallback回调函数,从而实现流水的效果。 注意:以上代码仅供参考,具体的实现方式可能会因为硬件和软件环境的不同而有所差异,需要根据实际情况进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值