Proteus仿真基于跑马灯的控制 |“朝闻道”知识分享大赛

工藤小兰 2023-12-19 23:24:28

这是我参加朝闻道知识分享大赛的第2篇文章:

任务:Proteus绘制仿真电路图,单片机型号为AT89C51。使用keil软件编写c语言程序,并将代码烧录到仿真单片机中,实现Proteus与keil的联调仿真,对八个LED灯(跑马灯)进行控制。

功能1:从左至右依次点亮八只led灯

功能2:从右至左依次点亮八只led灯

功能3:按顺序点亮奇数1357的led灯

功能4:按顺序点亮偶数2468的led灯

在仿真电路图中加入按钮等元器件,以实现以下功能

1.按下按键k1,实现功能1➕功能2

2.按下按键k2,实现加速点亮功能3的跑马灯

3.按下按键k3,实现减速点亮功能3的跑马灯

4.按下按键k4,暂停按键,并控制蜂鸣器长鸣

 

 

一、绘制Proteus仿真电路图

如下图绘制即可

二、编写代码:

1、四种功能流水灯的实现代码:

#include"reg51.h"

sbit led=P2^0;

void delay()
{
	unsigned char i,j,k;
	for(i=0;i<50;i++)	 
		 for(j=0;j<20;j++)
			 for(k=0;k<100;k++);
}

unsigned char LEDdat1[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};  //1111 1110	//1111 1101/
unsigned char LEDdat2[8]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};
unsigned char LEDdat3[4]={0xFE,0xFB,0xEF,0xBF};	
unsigned char LEDdat4[4]={0xFD,0xF7,0xDF,0x7F};

void main()
{
	unsigned char n;
	while(1)
	{
			for(n=0;n<8;n++)
			{
				P2=LEDdat1[n];
				delay();
			}

				for(n=0;n<8;n++)
			{
				P2=LEDdat2[n];
				delay();
			}

			for(n=0;n<4;n++)
			{
				P2=LEDdat3[n];
				delay();
			}

				for(n=0;n<4;n++)
			{
				P2=LEDdat4[n];
				delay();
			}


	 }
}

2、跑马灯的控制代码:

#include <REGX51.H>

sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
sbit beep=P2^0;



void delay(unsigned int n)
{
	unsigned char i,j,k;
	for(i=0;i<n;i++)	 
		 for(j=0;j<20;j++)
			 for(k=0;k<100;k++);
}

unsigned char LEDdat1[18]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xFF,0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF};
unsigned char LEDdat2[5]={0xFE,0xFB,0xEF,0xBF,0xFF};




void main()
{
	unsigned char n;
	
	IT1=0;
	EA=1;
	EX1=1;


	while(1)
	{
		
		  if(key1==0)
		  {
		
		        for(n=0;n<18;n++)
			    {
				      P1=LEDdat1[n];
				      delay(50);
					  
					 
			    }
		   }
		   
		   if(key2==0)
		   {
				 for(n=0;n<5;n++)
				 {
                      P1=LEDdat2[n];
					  delay(50);
				 }

		   }
		    if(key3==0)
		   {
					    
				  for(n=0;n<5;n++)
				  {
					  P1=LEDdat2[n];
					  delay(200);
				   }
		   }


	 }
	 
	 	   

}




void int1() interrupt 2
{
	  

  if(key4==0)
	{
	                
	  beep=0;
		while(1);

	
    }

}

三、烧录文件,实现功能:

1、按下k1:从左至右依次点亮八只led灯,从右至左依次点亮八只led灯。

 2、按下k2:加速点亮奇数1357的led灯。

 3、按下k3:减速点亮奇数1357的led灯。

  4、按下k4:暂停流水灯,蜂鸣器长鸣。

 以上为此次帖子所有内容!

 

...全文
213 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复 1
哇,他好有实力
vivy184 2023-12-19
  • 打赏
  • 举报
回复 1
哇,他好有实力
工藤小兰 2023-12-19
  • 打赏
  • 举报
回复 2
太棒了,快来点赞啊啊啊

1,040

社区成员

发帖
与我相关
我的任务
社区描述
中南民族大学CSDN高校俱乐部聚焦校内IT技术爱好者,通过构建系统化的内容和运营体系,旨在将中南民族大学CSDN社区变成校内最大的技术交流沟通平台。
经验分享 高校 湖北省·武汉市
社区管理员
  • c_university_1575
  • WhiteGlint666
  • wzh_scuec
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

欢迎各位加入中南民族大学&&CSDN高校俱乐部社区(官方QQ群:908527260),成为CSDN高校俱乐部的成员具体步骤(必填),填写如下表单,表单链接如下:
人才储备数据库及线上礼品发放表单邀请人吴钟昊:https://ddz.red/CSDN
CSDN高校俱乐部是给大家提供技术分享交流的平台,会不定期的给大家分享CSDN方面的相关比赛以及活动或实习报名链接,希望大家一起努力加油!共同建设中南民族大学良好的技术知识分享社区。

注意:

1.社区成员不得在社区发布违反社会主义核心价值观的言论。

2.社区成员不得在社区内谈及政治敏感话题。

3.该社区为知识分享的平台,可以相互探讨、交流学习经验,尽量不在社区谈论其他无关话题。

试试用AI创作助手写篇文章吧