定时器中断实现流水灯实验——proteus仿真

本文主要讲述用51单片机内部定时器实现流水灯显示,通过介绍用最简单的仿真元件实现仿真。

其次会介绍一些基础的proteus仿真的知识

目录

Proteus仿真


keil5编程

一、Keil5下载安装

基本在B站都有教程

Proteus仿真

一、Proteus下载与安装

需要自取

链接:www.ruancang.net

二、Proteus工程创建以及原理图绘制

1、安装完成后,点击proteus软件后,点击新建工程

2、修改工程名以及工程路径

3、接着一直点next,直到出现finish,点击finish,工程创建完成

三、添加元器件

1、点击P标识

2、搜索所需要的元器件,输入相应元器件的英文名或是缩写(以51芯片为例)

3、在侧边栏上有许多模式。

4、元件模式:可以用于查看自己添加的元器件,点击相应元器件后,再在原理图上相应位置双击即可将元器件放置在原理图上。

5、总线模式:将各个连线集合到一条总线上,防止连线过多时,原理图过于杂乱。

连线标号模式:用于对连接到总线上的连线进行标号,标识连线对应的接口。

6、虚拟仪器模式:可以调用一些用于仿真时实时监测的仪器。如示波器等;

实验实现过程

一、实验要求

要求用51单片机的某一个串行口,如P0,P1等;并使用51单片机定时中断方式实现流水灯现象。

二、实现程序

源码:

#include <reg51.h>
int ldelay=0;            //定义输出信号标志位
char t=0;                //计数标志
void main()
{
	char code ledp[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd};    //实现流水灯串行口输出的端口输出值,可通过改变段码值来改变是单向流水灯还是双向流水灯
    Timer0_Init();
	char ledi=0;        //段码标志位
	while(1)
	{
		if(ldelay)
		{
				ldelay=0;
				P1=ledp[ledi];
				ledi++;
			if(ledi==14)
			{
				ledi=0;
			}
		}
	}
}
void Timer0_Init()    //定时器初始化
{
    TMOD=0x01;        //设置定时器工作方式
	TR0=1;            //启动定时器T0
	TH0=0x3c;         //设置定时器初值  
	TL0=0xb0;         //设置定时器初值 
	ET0=1;            //打开T0中断开关
	EA=1;             //打开中断总开关
}
timer0()	interrupt 1        //中断服务程序
{
	t++;
	if(t==20)                 //记中断次数
	{
		t=0;
		ldelay=1;
	}
	TH0=0x3c;TL0=0xb0;        //重新装入计数初值
}

三、仿真原理图

根据前面所提到的基本知识及操作进行原理图绘制

四、仿真运行

1、在keil5软件中需要让其输出*.hex文件,步骤如下

2、在proteus中需要将keil5中所创建的*.hex文件与51芯片建立连接

注:在创建工程时最好将keil文件与proteus文件放在一个文件夹中,这样在找*.hex文件时好找一些。

实现结果

定时器中断实现流水灯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值