前言
这是我第一次在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版权协议,转载请附上原文出处链接和本声明。