本文主要讲述用51单片机内部定时器实现流水灯显示,通过介绍用最简单的仿真元件实现仿真。
其次会介绍一些基础的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文件时好找一些。
实现结果
定时器中断实现流水灯