用稳压管保护单片机引脚_51系列|单片机之单片机中的HelloWorld

d49395558a9669e80cc551aefdbf089c.gif点击上方“蓝字”关注我们吧! 6aeb9cb35c3a76a6d7dd62e962a23993.png 17ef35e13202f7471f7c60c73295b408.png 学过编程的朋友相信对于Hello, world都不会陌生

e350325d403f9574dfe708e0695797e4.png

在计算机上Hello, world普遍作为新手入门的第一个程序。据说最早出现于1972年,Brian Kernighan巨佬率先使用~ ~ 不过在单片机的入门入门中我们普遍用的入门程序并不是Hello, world 我们的操作是:点灯 没错,就是用单片机去点亮一盏LED,然后就是很多盏LED灯。。。。如果你喜欢花样的话 (:

528153751dcc60f6b8dc43b8ba76fc01.gif

嘿嘿,言归正传。单片机使用点灯来入门是非常合适的,而Hello, world在单片机中对于初学者而已就显得过于复杂,也很难提起兴趣 本系列教程使用的开发环境是keil 4,还不回会建工程的同学请参考:

使用Keil4手把手教你建立8051工程 (戳蓝色字体可直接跳转哟!)

需要注意的是,尽管keil开发51单片机使用的是C语言,但这个C语言并不是标准C!我们通常把51中的C语言称为c51,它和标准C在一些地方是有区别的。最直观的就是关键字不全相同,比如标准C中是没有sbit、sfr这些关键字的,但是c51就有~ ~ 注意!注意!注意!此处需要包含的头文件是 #include ,而不是 #include 。不同的头文件有不同的功能,养成好的习惯,不要胡乱载入用不到的头文件

0a9f8648c293f85f4846b225e5342b9f.png

引入reg51.h的目的是:这个文件定义了51单片机相关的寄存器。我们需要通过操作这些寄存器来达到控制像单片机引脚、定时器、IIC、PCA模块等的目的 为方便后面内容的叙述,现在我们假设51单片机的P1.0~P1.2各接了一盏LED灯。那么在引入头文件后,我们需要“告诉单片机”:使用了哪些引脚 要达到这个目的,我们需要使用keil c51的 sbit 关键字。sbit是定义特殊功能寄存器的位变量。 语法格式: sbit 位变量名 = P0/1/2/3^0~7 例如下图中三个LED的位变量名分别为LED1~3,依次连接在P1.0~P1.2上

ef6603ceae8afffe15f1e859648f70a2.png

4b382897dced66cc43a0b7b3c6ecdaa5.gif

特殊功能寄存器:

特殊功能寄存器是80C51单片机中各功能部件对应的寄存器,用于存放相应功能部件的控制命令,状态或数据 例如,sfr定义P1口的地址(sfr P1=0x90;)为0x90,则0x90这个地址就是P1口的特殊功能寄存器。引入reg51.h后,由于 P1 已经被sfr定义,所以我们可以直接用 P1 来操作P1口,也可以使用sbit来操作P1中的某个引脚(比如P1.0或者P1的其他引脚) (为避免读者混乱,本文对 sfr 和 sbit 不再做深入探讨,感兴趣的请自行查看keil c51文档或通过其他途径了解) 至此,引脚就定义完了,接下来就可以操作单片机去点亮LED了~ ~ 点亮LED不是很简单吗?LED=1就行。。。其实还真不是 LED=1是否能使LED发光是要根据LED的电路连接方式来确定的。并不是LED=1就能亮,也可以是LED=0灯才会亮起来哦!    1822040da25a0ddd66810d2770706c74.png 1822040da25a0ddd66810d2770706c74.png 0e0106961bbe924b25b58c65665c8fb5.png c56f248e2435c8fbe1c4b38ceeba5756.png

           图一                    图二

图1的LED使用的是共阴极接法。 LED的负极全部接地,正极接到单片机的引脚上。此时我们只要令单片机引脚输出高电平便可点亮发光二极管(即,LED=1;)
/* 点亮共阴极LED */LED1 = 1;LED2 = 1;LED3 = 1;
图2的LED使用的是共阳极接法。 LED的正极全部接5V电源,负极接到单片机的引脚上。此时我们只要令单片机引脚输出低电平便可点亮发光二极管(即,LED=0;)
/* 点亮共阳极LED */LED1 = 0;LED2 = 0;LED3 = 0;
下面以共阳极接法为例,完整代码如下:

a1297d302f33eedc66fb0e6bac0af480.png

编译:

57fdbdad2d1998f6347884fa60561b9b.png

e8a4949209508b7e9577e14e232b77e8.png

最后,仍以共阳极接法为例,给出一个流水灯的小例子:

使用sbit方式:

// 头文件#include // 定义引脚sbit LED1 = P1^0;sbit LED2 = P1^1;sbit LED3 = P1^2;// 软件延时:50msvoid Delay50ms(void)         //@12.000MHz 适用于STC89系列{    unsigned char i, j;    i = 98;    j = 67;    do    {        while (--j);    } while (--i);}// 主程序void main(){    /* 先熄灭所有的LED灯 */    LED1 = 1;    LED2 = 1;    LED3 = 1;    while(1)    {        /* 从左到右依次点亮 */        LED1 = 0;        Delay50ms();        LED2 = 0;        Delay50ms();        LED3 = 0;        Delay50ms();        Delay50ms();        Delay50ms();        Delay50ms();        Delay50ms();        /* 从右到左依次熄灭 */        LED3 = 1;        Delay50ms();        LED2 = 1;        Delay50ms();        LED1 = 1;        Delay50ms();        Delay50ms();        Delay50ms();        Delay50ms();        Delay50ms();    }}

使用总线方式:

// 头文件#include // 软件延时:50msvoid Delay50ms(void)         //@12.000MHz 适用于STC89系列{    unsigned char i, j;    i = 98;    j = 67;    do    {        while (--j);    } while (--i);}// 主程序void main(){    unsigned char i;    /* 先熄灭所有的LED灯 */    P1 |= 0x03;    while(1)    {        /* 从左到右依次点亮 */        for(i=0;i<3;i++)        {            P1 ^= (1<// 等价于:P1 = P1 ^ (1<            Delay50ms();        }        Delay50ms();        Delay50ms();        Delay50ms();        Delay50ms();        /* 从右到左依次熄灭 */        for(i=0;i<3;i++)        {            P1 = P1 | (1<2-i));                        Delay50ms();        }        Delay50ms();        Delay50ms();        Delay50ms();        Delay50ms();    }}
f85559e64bbc0600d63258f2aff7194c.gif

使用Keil4手把手教你建立8051工程

51系列 | 什么是单片机?

51系列 | 单片机之预备

0a1b00620988a78bb32f2855c8525c5c.png

编辑:谢嘤嘤

作者:hope

官方邮箱:qrswjj@163.com 有趣的灵魂在等你

长按扫码可关注

d49395558a9669e80cc551aefdbf089c.gif点点点,赞和在看都在这儿!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值