历史上的今天
返回首页

历史上的今天

今天是:2026年01月06日(星期二)

正在发生

2023年01月06日 | 51单片机学习笔记(一):LED

2023-01-06 来源:zhihu

第一次接触51单片机,就直接按照附赠的学习手册自己学一学,做个笔记。


一、点亮LED

LED即发光二极管,具有单向导电性,通过一定电流时就能发光。单片机开发板上的LED采用共阳接法,即所有LED阳极管脚接电源VCC,阴极管脚通过470欧限流电阻接到P2口上。使LED发光的方法是让对应阴极管脚变成低电平,熄灭则为高电平。


用51单片机控制LED的方法就是让单片机设定管脚在P2口上输出低电平。


在main.c内先包含51单片机头文件,使用sbit关键字定义P2.0管脚叫做LED1,再让LED1=0,最后进入while死循环。

#include "reg52.h"sbit LED1=P2^0;void main(){
  LED1=0;
  while(1);}

设定P2.0管脚为低电平即可让连接在P2.0的LED发光。

二、延时函数

如果要让LED闪烁则需要编写程序使其延时开启关闭,手册里给了一个延时函数。

void delay_10us(u16 ten_us)
{
  while(ten_us--);
}

用while循环强行拖时间,执行一次指令大约10微秒。参数类型u16是为了方便使用而重定义的,更方便判断数据范围。

typedef unsigned int u16;
typedef unsigned char u8;

令ten_10us=50000可以延时大约450毫秒。使用延时函数可以让LED在肉眼辨识范围内变化。


三、Keil C51的移位库函数

开发板上有8个LED灯,分别对应8个比特,可以用一个8位字节来控制。流水灯则是8个比特不断变化,流水效果在字节的数据如下:

01111111→10111111→11011111→11101111→11110111→11111011→11111101→11111110

用移位操作和循环语句可以实现不断循环。


但是Keil C51软件有对应移位库函数,包含头文件intrins.h,左移函数是_crol_(),右移函数是_cror_()。函数有两个参数,分别是被移位的变量和移位个数。返回值是移位结果。C语言的移位操作会使最高位消失,最低位用0或1填充,但是移位库函数的功能相当于队列内循环移动,最高位会被移到最低位,所以移位库函数比C语言移位操作方便。


推荐阅读

史海拾趣

CAO Group Inc公司的发展小趣事

自创立以来,CAO Group一直致力于牙科材料和器械的研发。公司不断投入研发资源,成功推出多款具有创新性的牙科产品,如Lumist美白贴、SPRAY BOTTLE HEAD喷雾瓶头等,这些产品不仅在国内市场获得了广泛认可,还成功打入了国际市场。公司的研发实力和产品品质,使其在牙科行业中树立了良好的口碑。

DCCOM [ DC COMPONENTS ]公司的发展小趣事

为了进一步扩大市场份额,DCCOM公司积极寻求与国内外知名企业的合作。通过与这些企业的合作,DCCOM不仅获得了更多的客户资源,还学习到了先进的管理经验和技术知识。这种合作模式使得DCCOM在激烈的市场竞争中保持了强劲的增长势头。

Electroswitch公司的发展小趣事

随着市场竞争的加剧,Electroswitch意识到仅仅依靠产品质量已经不足以赢得市场。因此,公司开始注重提升服务质量,为客户提供更加全面和专业的支持。通过加强售前咨询、售后服务以及技术支持等方面的投入,Electroswitch成功赢得了客户的信任和忠诚。这也使得公司在电子行业中的地位得到了进一步提升。

Elite Semiconductor Products Inc公司的发展小趣事

人才是企业发展的根本。Elite非常重视人才的培养和引进工作。公司建立了完善的人才选拔和培养机制,为员工提供了广阔的职业发展空间和良好的工作环境。同时,Elite还积极引进外部优秀人才,为公司注入新的活力和创新力。这些人才的加入不仅提升了公司的整体实力,也为公司的长远发展提供了有力保障。

Carroll & Meynell Transformers Ltd公司的发展小趣事

随着国内市场的饱和,Carroll & Meynell Transformers Ltd公司开始将目光投向国际市场。公司积极参与国际电子行业的交流与合作,学习借鉴国际先进经验和技术。同时,公司还加大了对海外市场的拓展力度,通过参加国际展览、建立海外销售网络等方式,将产品推向全球。这一国际化战略不仅为公司带来了更广阔的市场空间,也提升了公司的国际影响力。

德崧电子(D-SWITCH)公司的发展小趣事

随着公司业务的不断发展,德崧电子开始积极拓展市场。公司深入分析市场需求和行业趋势,针对不同领域推出了具有针对性的产品和服务。例如,在汽车行业,德崧电子推出了耐高温、耐磨损的汽车专用开关;在家电行业,公司则推出了外观精美、功能丰富的智能开关。这些产品的推出不仅满足了市场的多样化需求,也为公司带来了丰厚的回报。

问答坊 | AI 解惑

PAC的优缺点点评

缺点: 1、价格高,相对于PLC来说 2、可靠性低,这一点不要再争论,已争论很多次了,与体系架构相关系 3、体积大 4、对模拟量处理的精度和抗干扰能力低,与内部的结构和接口相关系 5、系统的抗干扰能力弱,因为自身内部的频率太高,体系是为商 ...…

查看全部问答>

下载有问题找版主!

新手的话可能新币不够用,下载不了,由于一些后续的工作还没有做好,利用现有的条件,建议直接找版主,因为版主下载附件不要芯币,也可以直接给你评分,直接加芯币就完事啦!看到新手抱怨下不了的帖子太多了,有点麻木了! 至于其他的现在还在考虑 ...…

查看全部问答>

管理员可不可以举行一项学习AVR的活动呀

最近看到坛子中有学习51的帖子,而自己一直在为AVR苦恼,所以建议是不是可以也举行一项学习AVR的活动呢??…

查看全部问答>

找不到理想的器件,大家知道的话帮提个建议。

用avr做一个4位的led的动态显示,选了fdc6330l作为控制com端的开关。 结果显示1234的时候,第一位除了显示1,还显示2,只不过2的亮度很暗,后面这几位也是。 我认为是fdc6330l的响应速度太慢了。 所以想换个开关,开关要求耐压12v,5v的控制 ...…

查看全部问答>

如何用程序控制I/O口使得输出低电平以开启SIM300模块?

各位大虾:    今遇到一棘手问题:程序在使用SIM300模块进行通信的时候,发现SIM300模块开启的时候需要给它的PWRKEY引脚供低电平2秒钟,我怎么写程序能控制PWRKEY引脚呢?我用的是2440,硬件的连接我不清楚,但我估计应该是使用通用I/O ...…

查看全部问答>

SIM300C使用简单串口,上网时出现收发数据问题,谢谢

我使用的是SIM300C模块,用三线的简单串口与S3C2410连接。 现在网络是通上了,也能正常与服务器端进行发送接收! 当我向SIM300C发送命令的时候,他会反馈一些字符信息。 问题是当我正在向SIM300C发送命令、数据的时候,服务器端下发的数据也从串 ...…

查看全部问答>

请教:IIS和UDA1341工作原理

L3-interface用来控制音量,低音等,怎么控制的,控制信号是什么信号?PWM脉冲波?还是其他的 …

查看全部问答>

STM32定时器与PWM快速使用入门

STM32  定时器与 PWM 快速使用入门要求:在 万利的开发板 EK-STM32F 上产生 周期为1秒,占空比分别为 50% 10%的 PWM       并且点亮 板上 ...…

查看全部问答>

button(中断)驱动程序中 错误原因!

/home/wq/linux_drv/int_key/int_key_drv.c:69: warning: initialization from incompatible pointer type /home/wq/linux_drv/int_key/int_key_drv.c:72:25: error: macro \"key_init\" passed 1 arguments, but takes just 0 /home/wq/linux_dr ...…

查看全部问答>

STM32F429I-discovery+FreeRTOS+STemWin

STM32F429I-discovery+FreeRTOS+STemWin,小试了一下,刷屏速度还是很快的,比LPC1788快。本来是打算回来后周末移植的RTOS+emwin的,后来发现Demo里面都有现成的了,但是发现一下问题,就是有些demo会花屏,不知道是不是STemwin修改了有问题,你们 ...…

查看全部问答>