如何用Keil uVision3和ISIS 7 Professional中C51单片机做出 LED流水灯

大家好,今天教一教大家如何做出LED流水灯的实验,本文将分为四个部分,第一部分将教大家如何用ISIS软件排布电路,第二部分教大家如何用Keil写出实现流水灯的代码,第三部分教大家如何将二者联系起来,第四部分是结语。

一.排布电路

1.首先我们先打开软件,这里我使用的是Proteus 7 Professional图标如下:

 

2.接下来我们打开软件,找到“P”的按钮(看图片中红圈)点击进入找寻我们所需的单片机

 3.在搜索栏输入“89C51”看到左边最上面一个就是我们这次要找的C51单片机“AT89C51”选中之后点击右下角的“OK”按钮

 4.点击“OK”后我们自动会回到主界面,这时光标变为了铅笔样式,我们点击一次鼠标左键即可出现所选单片机,可以通过滑动鼠标进行位置的改变,也可以通过键盘上的“+”按钮进行单片机的旋转,之后我们再点击一次鼠标左键即可将单片机放置于操作界面上,如下图所示:

 5.现在我们就要寻找LED灯了,首先跟寻找C51单片机一样重复上面的操作,只是在搜索的时候输入“LED”,这里我选择了一个黄灯 ,接下来如何放置也是和单片机的放置方法相同。

 6.那么我们需要实现流水灯,所以要放多个灯,(注意灯的放置的方向)这时我们继续点击鼠标左键,会继续出现LED灯,依次放置即可:

 7.现在我们要将他们挨个与单片机上的端口连接,我们将鼠标移到P0.0/AD0端口处,点击鼠标左键即可进行线的放置,在移动光标移到LED灯的左端接口点击鼠标左键,那么电线就布置成功了,最后的效果图如图所示 :

 8.那么接下来我们要放置电阻,这里起到的是限流的作用,寻找方式也是和单片机的方式一样,在搜索栏中输入“Resistors”,这里我选择的是“0.6W Metal Film”,右边点击的是第一个之后点击“OK”

 9.之后我们将其放置,(注意电阻的放置方向),然后我们将其依次与LED灯连接,效果如图所示

 

 10.接下来我们要放置电源,我们点击鼠标右键点击“Place”,点击“Terrminal”再点击“Power”即可放置和单片机方式一样: 

 11.放置成功后,在进行电线的连接,效果如图所示:

 12.到此为止,我们的电路排版就算完成了,接下来就是我们如何通过代码实现我们想要的流水灯的效果。

二.通过使用keil软件输入代码,来实现所要的流水灯效果:

1.首先呢,我这次使用的软件是Keil uVision3,图片如下图所示:

 2.我们接下来打开keil,要生成一个hex文件,这个文件是我们与上一个软件之间搭建桥梁的一个重要文件,我们打的代码就会储存于其中随后应用于上一个文件,首先我们新建一个工程

 3.这里我将其命名为demo2(因为之前有一个是命名为demo)之后会出现选择CUP的界面,我们一定要选择和我们刚刚上一个软件所选择的单片机型号相同即“AT89C51”,(在有书本图标旁边写的是Atmel)

 

 4.点击“确认”后我们会出现这个界面,我们点击“否”就可以了

 

 5.接下来我们要在工具栏(左上角)的 File中新建一个文件

 6.点击后会出现一个输入代码的框,这时我们再按Ctrl+S保存为demo2.c一定要将后缀修改为.c。这个文件就是我们要的C语言源文件

 7.之后我们点击左边的项目工作空间,点击Target的Source Group1下面,鼠标右击点击“Add Files to Group'Source Group' ”:

 8.之后所出现的界面双击demo2.c就可以将其添加到Source Group1文件夹中

 如果出现这种情况不用担心,这时已经添加好了,直接关了就可以了:

 8.这时候我们就发现Source Group1中就有我们的demo2.c,那么下来就是打代码的时间啦

 9.这里我建议大家打代码是可以在vs里面打,因为这个软件直接打的话会很麻烦,所以会建vs里面打代码,接下来就是教大家如何打出我们所需代码了,这里我先写了部分代码的注释:

 10.接下来为大家解释第16行代码的具体含义:这里的的P0 << 1是指左移的意思,举个例子我们上面的代码是让P0 = 0xfe,这里0xfe是十六进制转换为二进制就是1111 1110,当P0左移时P0也就等于1111 1100,向左移一位,空出的位数补0,但是我们只是让第二个灯亮,其余灯灭,而这时我们的P0的值是让第一二的灯亮其余的灭,所以我们要通过或运算做到我们所期望的效果,这里的或运算与我们大学所学的离散数学有关。

        大家应该知道1V0=1(这里的V是或的意思),这个就是我们或运算的核心,这里我用的是0x01,转换为二进制就是0000 0001,大家跟我一起来看,当P0左移一位时是1111 1100,这时我们的或运算进行使用也就是1111 1100 V 0000 0001 = 1111 1101,多么美妙,这是就是第二个灯亮,其余灯灭,那么我们再来一次,再左移一位也就是1111 1010,那么或运算登场1111 1010 V 0000 0001 = 1111 1011

        好了这就是这一行语句的基本含义,抱歉由于个人水平有限,自己很难给大家讲清楚,也是自己想了些时候才有所体会,望大家多多包涵,那我们接着继续

 11.这里我简单的解释了一下,相信读者们一定会理解其中的含义:

void delay(u16 num)//这里是前面定义的delay函数括号里面是要设置的灯闪烁间隔时间
{
	u16 x, y;//不知道的可以看一看前面几步
	for (x = num; x > 0; x--)
	{
		for (y = 110; y > 0; y--)
		{
			;
		}
	}
}

12.这时我们将所打代码复制到keil上并且点击下图中红圈的按钮,观察下方的框里是否显示有error有的话就是代码打错了(这里我是0个error就是没有错误的意思,大家输入的代码也要有这样的显示哦):

三.二者结合

1.好了,现在我们输入代码的过程就结束了,接下来就是生成hex文件,将其与我们上一个软件联系起来,让我们开始吧,首先执行如图所示的操作:

 2.下面我们点击“Option for Target ‘Target 1’”点击Output,在Create HEX File处打勾,再点击确定即可:

 3.这时我们再点击下图中红圈按钮,即可生成一个hex文件(可看下方的框中所画的红线)

 4.这时我们可以回到上一个软件中,双击C51单片机即可出现如下图所示界面

 5.我们再点击图中红圈内容

 6.点击之后出现如下界面,我们找到我们之前所存储keil文件处找到以.hex为后缀的文件,点击“打开”即可:

 7.我们再点击红圈的内容,也就是“OK”即可

 8.之后再点击左下角的按钮“play”即可开始运行即演示我们的流水灯实验

 9.想要结束运行可点击左下角一列图标中最右边的一个(红圈)即可结束:

 四.结语

那么大家辛苦了,这么有耐心看我讲这么长时间的流水灯实验,由于本人是一位知识还很浅薄的学生,一些的点没有讲的那么清楚,所以希望大家能够理解。大家有什么疑问也可以留言向我提问等等各种方式,只要是我看到的会尽自己一切能力给大家解答的,那么,争取下次给大家带来更优质的文章,感谢大家的阅读,谢谢大家,再见啦!

  • 50
    点赞
  • 193
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HAIRBLUE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值