![d49395558a9669e80cc551aefdbf089c.gif](https://i-blog.csdnimg.cn/blog_migrate/2eca2fe41f77835ead1211465b46dcdd.gif)
![6aeb9cb35c3a76a6d7dd62e962a23993.png](https://i-blog.csdnimg.cn/blog_migrate/60516914b6f6efd2230ecd777e193061.png)
![17ef35e13202f7471f7c60c73295b408.png](https://i-blog.csdnimg.cn/blog_migrate/e58b6f3314734ff5a43682cf499bbd45.png)
使用Keil4手把手教你建立8051工程 (戳蓝色字体可直接跳转哟!)
需要注意的是,尽管keil开发51单片机使用的是C语言,但这个C语言并不是标准C!我们通常把51中的C语言称为c51,它和标准C在一些地方是有区别的。最直观的就是关键字不全相同,比如标准C中是没有sbit、sfr这些关键字的,但是c51就有~ ~ 注意!注意!注意!此处需要包含的头文件是 #include ,而不是 #include 。不同的头文件有不同的功能,养成好的习惯,不要胡乱载入用不到的头文件![4b382897dced66cc43a0b7b3c6ecdaa5.gif](https://i-blog.csdnimg.cn/blog_migrate/5d1fe8bcc5cef069c04f9ed7d23b9875.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](https://i-blog.csdnimg.cn/blog_migrate/81fe1e2edafc612f52e5033ec2c73a5e.png)
![1822040da25a0ddd66810d2770706c74.png](https://i-blog.csdnimg.cn/blog_migrate/81fe1e2edafc612f52e5033ec2c73a5e.png)
![0e0106961bbe924b25b58c65665c8fb5.png](https://i-blog.csdnimg.cn/blog_migrate/e173499dd8dfae5bd0b7c8a33f5e364a.png)
![c56f248e2435c8fbe1c4b38ceeba5756.png](https://i-blog.csdnimg.cn/blog_migrate/b84beebb0123b3484537e3e079870abd.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;
下面以共阳极接法为例,完整代码如下:
编译:
最后,仍以共阳极接法为例,给出一个流水灯的小例子:
使用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](https://i-blog.csdnimg.cn/blog_migrate/7b9acb7d6840363ccb543ab222f48981.gif)
使用Keil4手把手教你建立8051工程
51系列 | 什么是单片机?
51系列 | 单片机之预备
![0a1b00620988a78bb32f2855c8525c5c.png](https://i-blog.csdnimg.cn/blog_migrate/3191bfbb77ffd1b9b4f56e1341cdcb10.jpeg)
编辑:谢嘤嘤
作者:hope
官方邮箱:qrswjj@163.com 有趣的灵魂在等你长按扫码可关注
![d49395558a9669e80cc551aefdbf089c.gif](https://i-blog.csdnimg.cn/blog_migrate/2eca2fe41f77835ead1211465b46dcdd.gif)