历史上的今天
返回首页

历史上的今天

今天是:2025年12月15日(星期一)

正在发生

2022年12月15日 | 【单片机】51单片机入门教程中(LED流水灯)

2022-12-15 来源:zhihu

前言

提示:以下是本篇文章前言内容

在大家学习用点亮LED之前希望大家去复习一下51单片机的最小系统!

大家需要了解一下进制转换,如下图:

1.十进制: 都是以0-9这九个数字组成,不能以0开头。

2.二进制: 由0和1两个数字组成。

3.八进制: 由0-7数字组成,为了区分与其他进制的数字区别,开头都是以0开始。

4.十六进制:由0-9和A-F组成。为了区分于其他数字的区别,开头都是以0x开始。

正文

提示:以下是本篇文章正文内容


一、了解LED的工作原理

简单的理解一下:发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。当给发光二极管加上正向电压后,从P区注入到N区的空穴和由N区注入到P区的电子,在PN结附近数微米内分别与N区的电子和P区的空穴复合,产生自发辐射的荧光。常用的是发红光、绿光或黄光的二极管。发光二极管的反向击穿电压大于5伏。它的正向伏安特性曲线很陡,使用时必须串联限流电阻以控制通过二极管的电流。


实物图如下:

电路原理图如下:

如何计算发光二极管电压

发光二极管的压降是比较固定的,通常红色为1.6V左右,绿色有2V和3V两种,黄色和橙色约为2.2V,蓝色为3.2V左右。对于常用的几毫米大小的二极管,其工作电流一般在2毫安至20毫安之间,电流越大亮度越高,用电源电压减去二极管的压降,再除以设定的工作电流,就得出限流电阻的阻值。


串联R=(U-LED压降)/设定的工作电流

简单了解一下即可,如果想深入了解的话可以学学《模拟电路》,第一章就是讲的二极管,在这里就不过多赘述了!


二、用Proteus画原理图

共阴接法:

共阳接法:

三、用Keil写代码

方法一:点亮流水灯-位操作(共阴)

#include


sbit led1=P1^0;

sbit led2=P1^1;

sbit led3=P1^2;

sbit led4=P1^3;

sbit led5=P1^4;

sbit led6=P1^5;

sbit led7=P1^6;

sbit led8=P1^7;


void Delay500ms();


void main()

{

while(1)

{

P1=0x00;

led1=1;

Delay500ms();

led1=0;

Delay500ms();

led2=1;

Delay500ms();

led2=0;

Delay500ms();

led3=1;

Delay500ms();

led3=0;

Delay500ms();

led4=1;

Delay500ms();

led4=0;

Delay500ms();

led5=1;

Delay500ms();

led5=0;

Delay500ms();

led6=1;

Delay500ms();

led6=0;

Delay500ms();

led7=1;

Delay500ms();

led7=0;

Delay500ms();

led8=1;

Delay500ms();

led8=0;

Delay500ms();

led8=1;

Delay500ms();

led8=0;

Delay500ms();

led7=1;

Delay500ms();

led7=0;

Delay500ms();

led6=1;

Delay500ms();

led6=0;

Delay500ms();

led5=1;

Delay500ms();

led5=0;

Delay500ms();

led4=1;

Delay500ms();

led4=0;

Delay500ms();

led3=1;

Delay500ms();

led3=0;

Delay500ms();

led2=1;

Delay500ms();

led2=0;

Delay500ms();

led1=1;

Delay500ms();

led1=0;

Delay500ms();

}

}



void Delay500ms() //@11.0592MHz

{

unsigned char i, j, k;

i = 4;

j = 129;

k = 119;

do

{

do

{

while (--k);

} while (--j);

} while (--i);

}

方法二:点亮流水灯-左移右移(共阴)


#include

void Delay100ms();


unsigned char  i=0;


//主函数

void main()

{

while(1)

{

//for循环让Led依次点亮

for(i=0;i<8;i++)

{

P1=~(0x01< Delay100ms();

}

}

}


//100ms的延时函数

void Delay100ms() //@11.0592MHz

{

unsigned char i, j;


i = 180;

j = 73;

do

{

while (--j);

} while (--i);

}

方法三:点亮流水灯-用数组点亮(共阴)


#include

#define uchar unsigned char

uchar tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,

0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff};

uchar tab1[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,

0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};


void delay();

void main()

{

uchar i;

while(1)

{

for(i=0;i<16;i++)

{

P1=tab1[i];

delay();

}

}

}


void delay()

{

uchar i,j;

for(i=0;i<255;i++)

for(j=0;j<255;j++);

}


四、下载代码

双击芯片,然后会弹出如下界面,然后点击黄色文件夹

找到刚刚编译完生成的hex文件

选择OK就可以了!

然后点击左下角的蓝色三角就可以开始运行程序了

五、调试代码

在写代码的时候需要不停的调试,直到能实现自己想要的现象!

推荐阅读

史海拾趣

HellermannTyton公司的发展小趣事

随着全球对环境保护意识的增强,Heimann Optoelectronics Gmbh积极响应,将绿色环保理念融入产品设计和生产中。公司投入大量资源研发出低功耗、长寿命的光电传感器,这些产品在使用过程中能够显著减少能源消耗和废弃物产生。此外,公司还采用环保材料进行包装,确保从生产到废弃的整个生命周期都符合环保标准。这一举措不仅赢得了市场的广泛赞誉,还为公司树立了良好的企业形象。

Accetek公司的发展小趣事

Accetek公司深知人才是企业发展的核心竞争力。因此,公司一直注重人才引进和团队建设工作。公司通过与高校合作、举办招聘会等方式吸引了一批批优秀的人才加入。同时,公司还建立了完善的培训机制和激励机制,为员工的成长和发展提供了良好的平台。这些优秀的人才为公司的技术创新和市场拓展提供了有力的支持。

Adam Tech公司的发展小趣事

随着电子行业的快速发展,Adam Tech意识到只有不断创新才能在激烈的市场竞争中立于不败之地。因此,公司加大了对研发的投入,不断推出具有创新性的电子连接器产品。同时,公司还积极拓展产品线,从最初的插头、插座逐渐扩展到线束、端子、电缆组件等多个领域。这些举措不仅提升了公司的市场竞争力,也为客户提供了更加丰富的选择。

EPSON公司的发展小趣事

EPSON公司,原名精工爱普生,成立于1942年,最初以制造手表起家。然而,随着技术的不断进步和市场需求的变化,EPSON逐渐将业务扩展到电子领域。在创始人及其团队的带领下,EPSON凭借其卓越的技术创新能力,成功研发出了一系列具有划时代意义的电子产品,如世界上第一台微型打印机和喷墨打印机,奠定了其在电子行业的领先地位。

Forge Europa Ltd公司的发展小趣事

随着技术实力的不断增强,Forge Europa Ltd公司开始将目光投向国际市场。公司积极参与国际展会,与全球客户建立联系,并通过优化供应链管理,确保产品能够迅速响应国际市场需求。在欧洲市场,Forge Europa凭借其高品质的产品和专业的服务,迅速赢得了众多知名客户的青睐。同时,公司还不断拓展北美、亚洲等新兴市场,逐步建立起覆盖全球的销售网络。

DESIGNERSYSTEMS公司的发展小趣事

DESIGNERSYSTEMS公司的创始人在电子行业有着深厚的背景和独特的见解。他们发现市场上缺乏一种能够集成多种功能、高度定制化的电子设备设计解决方案。于是,他们创立了DESIGNERSYSTEMS,专注于提供从概念到原型再到量产的全方位设计服务。通过不断的技术创新和对市场需求的精准把握,DESIGNERSYSTEMS迅速在电子行业树立了自己的品牌形象,赢得了客户的信赖。

问答坊 | AI 解惑

触摸屏选型

本人正在做用单片机控制触摸屏,想问下各位大虾,有谁曾将做过,推荐下触摸屏厂家? 要3.8寸的触摸屏!谢谢!…

查看全部问答>

FPGA/CPLD初学者应该如何入手?

作为一个有电子基本理论基础的新手,应该如何入手? 是应该先学习verilog&vhdl语言,还是其他什么? 我有听说过ilinx,altera和quartus,modelsim谁能帮忙具体解释下是什么?…

查看全部问答>

电子大赛试练 宽带放大器设计求助

最近在做一个宽带放大器 0-8M输入 要求放大1万倍 考虑三运放的仪表放大电路 找不到合适的放大器 买了ad846放大倍数不行啊 哪位高人能给推荐个合适的啊 或者换个电路用三极管场效应管也行  实在是在这方便没什么思路啊  给点指 ...…

查看全部问答>

华为硬件工程师手册..pdf免费!!!

.华为硬件工程师手册..pdf免费!!!…

查看全部问答>

【xilinx技术问答】FPGA能够实际工作的频率?

ISE软件中给出的综合报告和静态时序分析报告都有工作频率,请问哪一个是FPGA能够实际工作的频率? 答:经过映射和布线的频率值才是FPGA可以真正跑到的频率值看静态时序分析报告,基本上是这个数值。通过查看ISE9.103的 implement Design>Place ...…

查看全部问答>

音频驱动某函数代码看不太懂,救助。

PBYTE OutputStreamContextM16::Render2(PBYTE pBuffer, PBYTE pBufferEnd, PBYTE pBufferLast) {     LONG CurrT = m_CurrT;     LONG DeltaT = m_DeltaT;     LONG CurrSamp0 = m_CurrSamp[0];     ...…

查看全部问答>

SQLServer CE 3.1

哪位大哥有SQLServer CE 3.1在WinCE6.0下应用的例子啊,以及如何详细部署的 资料,有的请指教,问题解决在送分.谢谢~…

查看全部问答>

msntp使用问题

请问各位大侠,msntp启动时候,能不能指定时区??? 如果不行,有没有其他的ntp软件可以的或其他的办法,我嵌入式的,请各位指点!!!!…

查看全部问答>

CortexM0_IAP示例代码程序下载

CortexM0_IAP示例代码程序下载…

查看全部问答>

求助画PCB时出现的问题

在画PCB时,想让下图中间部分可以放置器件,环形部分不放器件,即把器件放在环形区域要变绿色,显示规则检查错误。我就将整个环形做成了一个PCB封装,但是这样器件放在中间部位也变绿色显示错误了。怎么才能只让环形区域部分显示绿色错误,而中间掏 ...…

查看全部问答>