小白C51流水灯的踩坑之路

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_44203948/article/details/102296804

C51单片机流水灯案例(包括Keil与Proteus的连接)

看到很多大神在说流水灯就好像是单片机里面的Hello world,但是对于像我这样的初学者而言还是存在一定的问题。记录下我的踩坑之路。

1连接问题

我现在看来比较方便的方式是在Proteus中去连接,首先在proteus(ISIS中)构建一个类似这样的结构。要注意的是你选择的是第几个P口,例如下图就是P1口,那么后面的编程你就要对P1口编程(虽然很傻的问题,但如果后面你要是直接复制别人的代码就一定要注意这一点)
在这里插入图片描述
这个结构对于小白来说创建起来不算太难,但也有一定的坑,就是在于这个接地装置,是首先要点击下图的红箭头。
在这里插入图片描述
是在下面这个位置去选择的POWER
在这里插入图片描述
选择完毕之后双击添加组件,还要把string 这个位置改为ground
在这里插入图片描述
再者,灯的选择是LED(颜色随意在窗口p的位置挑选,这个应该比较常见)就是如下这个地方,同理C51单片机也是在这个地方直接输入就可以,至于电阻也是输入res就可以找到电阻,在双击确定电阻之后可以双击修改电阻值,来改变灯泡亮度。
在这里插入图片描述
在这里插入图片描述
后面就是链接这里首先右击C51单片机然后点击Edit Properties
在这里插入图片描述
在这里的Program File中选择你的hex文件
在这里插入图片描述
但是这个时候问题就来了有的小伙伴不知道怎么生成.hex文件,不知道的话没关系下面的编程中会详细介绍如何生成.hex文件,如果现在你已经写完了流水灯的C语言代码,且生成了对应.hex文件你就直接在这个地方选择对应的文件路径就可以运行了,如果没有写代码的话,就继续看下去。

C51代码

打开Keil4这个时候应该会独立创建一个.C文件,如果不会的话自行百度。。
代码如下:

#include<reg51.h>
#include"intrins.h"
typedef unsigned char u8;/*char 为1字节,8位  */
typedef unsigned int u16;

#define led P1

void delay(u16 i)
{
	while(i--);
}
void main()
{

 
         u8 i;
		led=0x01;
		delay(50000);
		while(1)
		{
		  led=led<<1;//高位溢出	  
		  if(led==0x00)
		  led=0x01;
		  
		  delay(50000);
		
		/*第二种灯循环的方式
				for(i=0;i<7;i++)
                {
        	        led=_crol_(led,1);//循环左移
        			delay(50000);
        		}
       			 for(i=0;i<7;i++)
        		{
        			led=_cror_(led,1);//循环右移
        			delay(50000);
        		} */
		}
        
 
}

代码的主要可以通过>>直接进行移位,或者通过cro的方式进行循环左移和右移,要注意的是>>如果超过最高位溢出,溢出位会被舍弃掉变为0x00。

之后就是要生成.hex文件的步骤了如果你用的是Keil4的话按照如下步骤进行即可(其他版本不清楚)

在这里插入图片描述
那么这个时候你编译出来的文件就会生成.hex文件,这是回答之前说的,在proteus中右击C51单片机再选择Edit Properties在修改对应的Program Files的路径改为你的Keil的Project对应的目录下就会找到.hex文件,之后添加。
在这里插入图片描述
之后就运行即可
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44203948/article/details/102296804