基于51单片机的交通灯仿真

本文章实现基于80C51的交通灯程序设计以及使用proteus 8.13软件仿真实现


前言

在电子学习过程中,学会使用一些常用的软件进行仿真是必不可少的,在本篇中将介绍proteus软件的安装及通过仿真51程序来演示基本操作。


一、Proteus软件介绍与安装

1.Proteus是什么?

Proteus是英国著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DSPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MATLAB等多种编译器。

2.Proteus的特点请添加图片描述

1.原理布图

2.PCB自动或人工布线

3.SPICE电路仿真

革命性的特点

1.互动的电路仿真

用户甚至可以实时采用诸如RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。

2.仿真处理器及其外围电路

可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境。

3.proteus软件安装

(1)Proteus软件安装包的下载在官网上找
(2)该软件傻瓜式安装,没有什么要说的,一直下一步就行。

4.Proteus软件的基础

(1)新建工程
请添加图片描述
(2)命名及修改保存路径
在这里插入图片描述
(3)选择Default
在这里插入图片描述
(4)
在这里插入图片描述
(5)
在这里插入图片描述
(6)在元件库中选择原件进行原理图创作
在这里插入图片描述
(7)本次实验选择的交通灯的电路
请添加图片描述

5.程序源码片段

main.c

#include "public.h"
unsigned char gsmg_code[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
				0x7f,0x6f};
unsigned char gsmg_tim[8]={0};

void main()
{
	TIM_init();
	
	while(1)
	{
		gsmg_tim[0]=gsmg_code[(time[0]-time[0]%10)/10];
		gsmg_tim[1]=gsmg_code[time[0]%10];
		gsmg_tim[2]=gsmg_code[(time[1]-time[1]%10)/10];
		gsmg_tim[3]=gsmg_code[time[1]%10];
		gsmg_tim[4]=gsmg_code[(time[2]-time[2]%10)/10];
		gsmg_tim[5]=gsmg_code[time[2]%10];
		gsmg_tim[6]=gsmg_code[(time[3]-time[3]%10)/10];
		gsmg_tim[7]=gsmg_code[time[3]%10];
		
		smg_display(gsmg_tim);
	}
}

shumaguan.c

#include "public.h"
/*sbit flag_0=P2^2;
sbit flag_1=P2^3;
sbit flag_2=P2^4;*/

unsigned int time[4]={20,5,20,5};
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit LED0=P3^0;
sbit LED1=P3^1;
sbit LED2=P3^2;
sbit LED3=P3^3;
sbit LED4=P3^4;
sbit LED5=P3^5;
sbit BEEP=P2^5;

void delay_10us(unsigned int ten_us)
{
	while(ten_us--);	
}
void smg_display(unsigned char gsmg_code[])
{
	u8 i=0;

	for(i=0;i<8;i++)
	{
	   	switch(i)//位选
		{
			case 0: LSC=1;LSB=1;LSA=1;SMG_A_DP_PORT=gsmg_code[0];//传送段选数据
			break;
			case 1: LSC=1;LSB=1;LSA=0;SMG_A_DP_PORT=gsmg_code[1];//传送段选数据
			break;
			case 2: LSC=1;LSB=0;LSA=1;SMG_A_DP_PORT=gsmg_code[2];//传送段选数据
			break;
			case 3: LSC=1;LSB=0;LSA=0;SMG_A_DP_PORT=gsmg_code[3];//传送段选数据
			break;
			case 4: LSC=0;LSB=1;LSA=1;SMG_A_DP_PORT=gsmg_code[4];//传送段选数据
			break;
			case 5: LSC=0;LSB=1;LSA=0;SMG_A_DP_PORT=gsmg_code[5];//传送段选数据
			break;
			case 6: LSC=0;LSB=0;LSA=1;SMG_A_DP_PORT=gsmg_code[6];//传送段选数据
			break;
			case 7: LSC=0;LSB=0;LSA=0;SMG_A_DP_PORT=gsmg_code[7];//传送段选数据
			break;
		}
		delay_10us(100);//延时一段时间,等待显示稳定
		SMG_A_DP_PORT=0x00;//消音
	}
}
void smg_shuzi_decline(void)
{
	static short int i=0,flag=0;
	if(i%2==0)
	{
		LED0=0;LED1=LED2=LED3=1;
		if(time[0]==0)
		{
			i=re_init(i);
			flag=0;
		}
		else if(time[1]==0&&flag==0)
		{
			time[1]=time[3]=5;
			flag++;
		}
		else if(time[1]==0&&flag==1)
		{
			time[1]=time[3]=10;
			flag=0;
		}
		if(flag==1)
		{
			LED5=0;
		}
		else
			LED4=0;
	}
	else
	{
		LED3=0;LED4=LED5=LED0=1;
		if(time[1]==0)
		{
			i=re_init(i);
			flag=0;
		}
		else if(time[0]==0&&flag==0)
		{
			time[0]=time[2]=5;
			flag++;
		}
		else if(time[0]==0&&flag==1)
		{
			time[0]=time[2]=10;
			flag=0;
		}
		if(flag==1)
		{
			LED2=0;
		}
		else
			LED1=0;
	}
	time[0]--;
	time[1]--;
	time[2]--;
	time[3]--;
}
short int re_init(short int i)
{
	short int k=1000;
	while(k--)
	{
		BEEP=!BEEP;
		delay_10us(10);
	}
	if(i%2==1)
	{
		time[0]=30;
		time[1]=10;
		time[2]=30;
		time[3]=10;
	}
	else
	{
		time[0]=10;
		time[1]=30;
		time[2]=10;
		time[3]=30;
	}
	return i+1;
}

6.仿真结果演示

请添加图片描述
请添加图片描述

总结

通过熟练使用Protues仿真软件可以更好的学习电路设计和单片机原理,更能增强自己解决实际问题的能力。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值