历史上的今天
返回首页

历史上的今天

今天是:2026年01月12日(星期一)

正在发生

2023年01月12日 | 单片机点灯(点亮、闪烁、流水灯)

2023-01-12 来源:zhihu

一、点亮


工作原理:

如图,二极管阳极连接电阻,二极管阴极连接单片机引脚。D0对应P20,D1对应P21,,,,,,,都通过P2孔进行控制。

二极管:

电源正极连接到二极管阳极,负极连接到阴极,二极管正常工作。所以,原理图中,引脚为低电平,连接的是二极管的阴极,阳极通过与电阻连接,电阻连接的是高电平,所以二极管正常工作。电阻的作用为保护二极管。

程序编写


#include"reg52.h"

sbit LED=P2^0;  /*sbit用于定义变量。LED为自定义变量。将P2.0(注意不要写成P2.0,应写为P^0)孔赋给变量LED*/

void main()

{

while(1)

{

LED=0;/*由二极管的工作原理可得,二极管接P2.0孔,所以该孔为低电平,为0*/

}

}

二、闪烁


工作原理

在点亮LED灯的基础之上。

原理上基本与点亮LED灯工作原理相同。

自定义一个延时函数。

主函数先点亮灯,在调用延时函数,在熄灭灯,然后在调用延时函数,将这些放入循环一直执行。完成


代码


#include "reg52.h"

typedef unsigned char u8; //重定义字符型变量

typedef unsigned int u16; //重定义整型变量


/*自定义延时函数*/

void dealy(u16 i)

{

while(i--);

}

sbit led=P2^0;


void main()

{

  while(1)

  {

led=0; //点亮,阴极接低电平

dealy(50000);

led=1;  //熄灭,阴极接高电平

dealy(50000);

  }

}

三、流水灯


工作原理

1.在LED点亮、LED闪烁实验的基础之上。

2.移位函数

crol(a,b):循环左移函数,a为左移的值,b为左移的位数。

cror(a,b):循环右移函数,a为右移的值,b为右移的位数。

移位函数包含在instrins.h库函数里面。

3.c语言中十六进制的表示

Ox代表的是十六进制的前缀,不用读。例如OXaaOxbb,只看aa,bb就行。

十六进制到二进制转换

十六进制表示:每一位有不同的数码0~9,A(10),B(11),C(12),D(13),E(14),F(15)

十六进制转二进制:将十六进制的每一位转化为二进制即可。例如8FA,=>1000 1111 1010

运作过程

先看原理图

LED原理图(阳极解高电平),阴极通过电阻接接引脚

引脚默认接高电平,所以,初始时灯为熄灭状态。


流水实现

利用十六进制位位移函数实现左移和右移

_crol_(0xfe,1):0xfe转化为二进制为1111 1110;1代表位数

f代表原理图中的4个高位引脚,e代表4个低位引脚。

1111 1110 =>p0=0(低电平,灯亮)

1111 1101 =>左移,p1=0,第二个灯亮

1111 1011 =>p2

…………

_cror_(oxfe,1):与左移原理相同(从0111 1111 开始向右移)

代码实现

#include

#include

typedef unsigned char u8; //重定义全局字符型变量

typedef unsigned int u16; //重定义全局整型变量

#define led P2//宏定义LED为p2端口

/*延时函数*/

void dealy(u16 i)

{

while(i--);

}


void main()

{

  u16 i;                   //定义变量i

  P2=0xfe;               //点亮第一个LED灯,即1111 1110.

  dealy(50000);       //延时450ms

  while(1)

  {

     for(i=0;i<7;i++)                //8个LED灯,利用for循环一直执行

   led=_crol_(led,1);            //  1111~1110~0111 1111,左移

   dealy(50000);

}

  for(i=0;i<7;i++)               //8个LED灯,利用for循环一直执行

{ led=_cror_(led,1);            //0111 1111~1111 1110 ,右移

   dealy(50000);

}

  }

 

}


推荐阅读

史海拾趣

南晶电子(DGNJDZ)公司的发展小趣事

随着市场竞争的加剧,南晶电子意识到技术创新是企业发展的核心动力。公司投入大量研发资金,与多所高校和科研机构建立合作关系,共同研发新型半导体器件。经过不懈努力,南晶电子成功推出了一系列具有自主知识产权的高性能产品,赢得了市场的广泛认可。

Broyce Control公司的发展小趣事

进入70年代,Broyce Control开始将目光投向更广阔的市场。公司投入大量资源进行技术研发,成功开发出了一系列具有创新性的电气和电子产品,如继电器、漏电继电器和接地故障检测器等。这些产品不仅提高了工业生产的效率和安全性,也使得Broyce Control在行业内逐渐崭露头角。同时,公司还积极拓展产品线,将业务范围延伸到监控和保护设备领域,为大型工业应用提供了更全面的解决方案。

Deutronic Elektronik GmbH公司的发展小趣事

Deutronic Elektronik GmbH深知客户服务的重要性,始终将客户需求放在首位。公司建立了完善的客户服务体系,为客户提供全方位的服务支持。通过优质的产品和服务,Deutronic Elektronik GmbH赢得了客户的广泛赞誉和信任。同时,公司也注重品牌建设和提升,通过品牌推广和营销活动,进一步提升了品牌知名度和美誉度。

请注意,以上故事概要基于假设和逻辑构建,可能不完全符合Deutronic Elektronik GmbH公司的实际发展历程。如需更详细和准确的信息,请参考公司官方发布的历史资料和新闻报道。

Galaxy Microelectronics公司的发展小趣事

飞翼科技(FEIYI)在多个领域的发展均体现了其创新驱动的发展战略。无论是无人机技术的智能化应用,还是绿色矿山技术的创新突破,亦或是电容式触摸感应芯片的市场领先,都离不开公司对技术创新的不断追求。飞翼科技积极与高校、研究机构及行业专家开展合作,集聚顶尖科技人才,共同推动技术进步和产业升级。同时,公司还注重知识产权保护,拥有国家专利技术300余项,为企业的持续发展提供了有力保障。通过这些努力,飞翼科技在电子行业中不断崛起,成为行业内的佼佼者。

E-Switch公司的发展小趣事

随着公司的发展,E-Switch不断推出新产品,以满足不同客户的需求。从最初的轻触开关,到后来的防破坏按钮、摇杆开关、滑动开关等多种类型,E-Switch的产品线逐渐丰富起来。同时,公司也积极拓展市场,将产品销往全球各地,进一步提升了品牌影响力。

Herotek Inc公司的发展小趣事

在全球倡导绿色低碳的背景下,Henkel也积极投身于绿色材料的研发和应用中。在电子行业中,Henkel推出了多款环保型粘合剂产品,这些产品不仅具有优异的性能表现,还符合国际环保标准和法规要求。通过推广绿色材料和技术解决方案,Henkel不仅为电子行业的可持续发展做出了贡献,也进一步巩固了其在该领域的领先地位。

以上五个故事展示了Henkel公司在电子行业中的发展历程和成就。凭借其创新的技术、全面的解决方案以及对可持续发展的承诺,Henkel将继续在电子行业中发挥重要作用。

问答坊 | AI 解惑

M57962a驱动IGBT的问题

大家好,我按照下面这个电路图设计的驱动电路 照着上面的做了,13号脚给个高电平或者低电平,为什么5号脚输出测G和E极电压怎么都是-15V左右, 变换根本不大啊,正常应该是G和E极电压应该是-15变为6V左右可以驱动IGBT呀,为什么5号脚输出电压很低 ...…

查看全部问答>

请教驱动 代码39

作了一个驱动 用wdk7600编译通过,生成的.sys 文件可以正常安装使用。 用VS2008 编译链接后,能够生成相应的.sys文件,但是安装时会出现提示“Windows无法加载这个硬件的设备驱动程序 。驱动程序可能已损坏或不见了。”(代码39) 请知道的XDJM ...…

查看全部问答>

孔内螺纹的检测技术

各位大虾,有什么方法可以检测孔内的螺纹?只要检测孔内是否有螺纹就可以了。…

查看全部问答>

关于WinCE5 C#下的绘图问题

大家好,有个问题想问一下: 1 WinCE5 C# 获得从 panel 获得绘图面的方法? 说明 : 精简版的compect Frame Work 不支持CreatGraphics 我使用Graphics.FromHdc()但是发生了内存溢出错误,应该是使用方法不正确,请指教! 我看有资料说使用WinAPI ...…

查看全部问答>

请教一下makefile文件规则

最近看书看到几段makefile文件的片段,但是看不懂,哪位好心人帮忙看看啊!! %.d:%.c     set -e;$(CC) -M $(CPPFLAGS) $$@;\\     [-s $@]||rm -f $@ 还有一个,这个是使用LPC2200开发板时,配置内核,执行命令make ...…

查看全部问答>

arm-gcc编译问题,高手指教,在线等!!!指教!在线等!!!帮忙!!!!!

#include #include #include #include char RoundToInt64 (float dval) {     char val;     static float magic = 12582912.0;     dval += magic;     val = *(char *)&dval;   &nbs ...…

查看全部问答>

香主,请造福广大stm32的使用者吧!

到哪儿能够搞到STM32系列的原理图符号?自己画麻烦,而且容易错。ST有现成的吗?…

查看全部问答>

STM32F103VB的编码器计数引脚是不是和比较输出是同一个引脚?

                                 STM32F103VB的TIMx的外部编码器计数引脚和比较输出是不是同一个引脚?我看了好几天手册没搞明白,告诉我一下吧,我 ...…

查看全部问答>

有关c语言中字符串的处理.

我是一个430得初学者,对430c语言中的字符串不是很理解,查资料后知道需要使用字符数组和指针可以实现,但是现在对字符串的赋值不是很清楚,书上所只能一个一个数组元素的赋值,不能给数组整体赋值,我感到很不方便,请教各位大虾,再430c语言中是 ...…

查看全部问答>

C8051F330中文资料

现在都没有人用80C51单片机了,给个新的单片机中文资料,供大家学习…

查看全部问答>