51单片机学习笔记——点亮流水灯(基于Proteus仿真)


前言

这是我第一次在csdn上面写博客,我第一次接触单片机到现在有很长段时间了,51单片机是我接触的第一款MCU,入门的话它毕竟是首选。论起我写博客的初衷:
一是我在csdn上白嫖了半年多,是时候写一些自己的文章;二是军训完社团招新,社团里面学弟学妹入门51,我趁着招新之前复习一遍51,同时温故而知新。

(咋写博客还得去学习一哈)


提示:以下是本篇文章正文内容,下面案例可供参考

一、Proteus是什么?

我的理解就是:Proteus用来对mcu搭建的电路进行仿真
关于Proteus的环境搭建就不再赘述,csdn上有很多优秀的文章

https://blog.Proteus8.9 下载与安装教程

二、搭建电路

我采用的MCU是STC89C52,我是基于普中A5的电路图进行画图:

(时钟频率是直接双击芯片,在里面设置的)
在这里插入图片描述

怎样使用Proteus和他的相关操作,阔以借鉴这位老哥的文章:
proteus8.6初学入门——使用教程

三、程序设计

对流水灯的控制,本质上是对51的GPIO口电平高低的控制;

第一种方法最为粗暴,直接用八位二进制数对P2口赋值,每一位决定了相应位的高低:

#include <reg52.h>
//延迟函数	大约延时xms毫秒
void delay_ms(int xms)
{
	int i,j;
	for(i=xms;i>0;i--)
		for(j=110;j>0;j--);
}

void main(void)
{
	while(1)
	{
		P2=0xfe;			//对应二进制1111 1110
		delay_ms(500);		//大约延时500ms
		P2=0xfd;			
		delay_ms(500);
		P2=0xfb;
		delay_ms(500);
		P2=0xf7;
		delay_ms(500);
		P2=0xef;
		delay_ms(500);
		P2=0xdf;
		delay_ms(500);
		P2=0xbf;
		delay_ms(500);
		P2=0x7f;
		delay_ms(500);
	}
}

第二种方法使用库函数 <intrins.h> 内含循环左移,循环右移函数,
左移_crol_()、右移_cror_()函数
能够缩小代码量:

#include "reg52.h"
#include "intrins.h"
//延迟函数	大约延时xms毫秒
void delay_ms(int xms)
{
	int i,j;
	for(i=xms;i>0;i--)
		for(j=110;j>0;j--);
}
void main()
{
	unsigned int i=0;
	P2=~0x01; 

	while(1)
	{
		for(i=0;i<7;i++) 
		{
			P2=_crol_(P2,1); 		//将 led 左移一位
			delay_ms(500);
		}
	}
}

总结

这篇文章没啥含金量,我打算下次从51的最小系统开始写起,到后面单片机每一个片上外设的基本原理和实操。我之前开始接触51的时候很多东西看见都很懵逼,我会卡在一些意义不大的,或者是次要的东西上面。我踩过很多坑,但是该踩得坑还是要踩。
其实大可不必用Proteus仿真,直接上手开发板,我主要是手边没有开发板。


版权声明:本文为qq_65227003原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。