基于C51单片机实现LED灯1s闪烁

发布者:Huixin8888最新更新时间:2024-03-20 来源: elecfans关键字:C51  单片机  LED灯 手机看文章 扫描二维码
随时随地手机看文章

C51使用的晶振频率是11.0592MHz一颗LED灯接在C51的P0.0,现在要求设计程序,让这颗LED灯以1s为间隔闪烁。


我们不只是设计程序,更要对这个单片机项目分析一下


顺便看看这道题的难度~~~~~~~~~~~


顺带一提,本节课要用到单片机定时器》》看我上一篇文章,详细介绍定时器


设计一个电路图,单片机用80C52RC,晶振11.0592MHz,一颗LED接在P0.0


535b78d97ebb595471abd37010f0fdcb_wKgaomVDDs-AX4Z-AAJ8DpvdvCI842.jpg

这里说明一下,C51的IO只支持弱上拉,这就意味着单片机的IO上拉的时候只能提供很弱小的电流,这个电流可能不足以点亮一颗LED灯(或者这颗LED灯的亮度很低),为了让LED正常发光,我们使用上拉的方法。这里简单介绍一下使用方法哈

194d5daa1762b0dfd0626c637243c64f_wKgZomVDDs-AZnFXAABHppr1zbQ096.jpg

当P0.0低电平的时候LED灯导通,正常点亮,P0.0给高电平的时候LED不导通,熄灭


考虑到手头的资源问题,我使用现成的开发板来完成这个程序设计,这个开发板使用的是上拉LED,LED1接在P1.0,实际电路图修改后如下:

d1eba55d7fc788cf66b0af6a497893f1_wKgaomVBx7SABco-AADHqvUpCvE716.jpg

现在对程序分析一下


程序框图


111d48747cebc57998a18a912f7f525a_wKgZomVDDs-AODMjAAE32iA-mZ0238.jpg

首先我们要明白,我们使用的LED是上拉模式的,P1.0 = 1的时候关闭LED,P1.0 = 0的时候点亮LED


既然要控制LED,这里就讲一下方法


三条特殊的指令


sfr P0 = 0x80;

这条指令存放在reg52.h里面,已经对IO组的寄存器的地址进行定义,像P0,P1,P2这些关键字我们可以直接用。方便我们对IO的寄存器进行操作,值得一提的是,IO寄存器是可以位寻址


sbit LED = P1^0

sbit指令给IO上的一个端口定义名字,比如说给P1.0(写作P1^0)定义一个叫LED的名字,下次对这个IO进行操作的时候用以下方法


sbit LED = P1^0;//这是前面的定义



LED= 1;//给P1.0IO写高电平

LED= 0;//给P1.0IO写低电平电平

此外,还可以直接对整个IO组进行操作,方法


那么,接下来就是程序了


【1】软件延迟实现


所谓的软件延迟,就是通过执行空代码,实现延迟的效果,这种延迟实现的延迟有一个特点,时间不准,因为单片机里面每次执行C语言下的一条操作的时间是不固定的


程序如下


#include< reg52.h >



sbit LED = P1^0;



void delay(unsigned int xms)  //调用时需提供参数xms的实际值。

{

  unsigned int i,j;   //定义无符号整型变量i、j

  for(i=0; i< xms; i++)  //后面没带';',下一条语句是循环体。参数xms延时x毫秒。

      for(j=0; j< 110; j++);  //后面带';',表示这个for语句的循环体是空语句。

}//这个值得学习,这里的代码是延迟代码



void main ()

{

  LED = 1;//先关闭LED灯


  while(1)

  {

    LED = !LED;//LED状态取反

    /*

    这里说明一下取反

    取反用“!”

    取反前,LED = 1,取反后,LED = 0

    */

    delay(1000);//软件延迟1000ms = 1s

  }

}


这就是效果了,怎么样,还可以吧,但是……


题目要求我们延迟1s,如此精确的提到1s,肯定是希望我们用定时器来完成这个项目


我想,用软件延迟,老师应该会给特别低的分数,而且也体现不出我们的能力


下面我们用定时器完成这一道题


关于定时器的用法


#include< reg52.h >

void main()

{//注意设置定时器初始值要在main函数里面设置



  TMOD = 0x01;


  /*设置定时器模式寄存器TMOD为 0000 0001

  GATE = 0

  C/T = 0

  M1 =0

  M0 = 1

  标准16位定时器

  */


  //先设置定时器初始值

  TL0 = 0x3A;//设置定时器初始值低位

  TH0 = 0x8E;//设置定时器初始值高位


  TR0 = 0;//记得一定要设置定时器开启


  while(1)

  {

    if (TF0 == 1)

      {//这里可以先放下你的定时器计时满了以后要执行的代码


       //溢出后你需要先给你的定时器再次设置初始值

        TL0 = 0x3A;//设置定时器初始值低位

        TH0 = 0x8E;//设置定时器初始值高位


        TF0 = 0;//设置好初始值后再复位定时器

      }

  }

}

我们要设置一个标准的16位定时器,设置方法和流程参考我写过的文章,上面是16位定时器的设置流程


以下是程序框图


0748eaa5ef138fd13182266f31113094_wKgaomVDDs-AOCBNAAFlVYYQ_qA721.jpg

下面是代码


#include< reg52.h >



sbit LED  = P1^0;

unsigned char counter = 0;



void main()

{//注意设置定时器初始值要在main函数里面设置

  TMOD = 0x01;

  /*设置定时器模式寄存器TMOD为 0000 0001

  GATE = 0

  C/T = 0

  M1 =0

  M0 = 1

  标准16位定时器

  */


  //先设置定时器初始值

  TL0 = 0x4B;//设置定时器初始值低位

  TH0 = 0xF5;//设置定时器初始值高位

  TR0 = 1;//记得一定要设置定时器开启



  while(1)

  {

    if (TF0 == 1)

      {

        counter++;

          if(counter >200)

          {

            counter = 0;

            LED = !LED;

          }

        TL0 = 0x4B;//设置定时器初始值低位

        TH0 = 0xF5;//设置定时器初始值高位

        TF0 = 0;//设置好初始值后再复位定时器

      }

  }

}

图片

图片


关键字:C51  单片机  LED灯 引用地址:基于C51单片机实现LED灯1s闪烁

上一篇:51单片机最小系统制作步骤
下一篇:MCS-51的引脚功能说明

推荐阅读最新更新时间:2024-11-14 01:23

知识浅析:不可不知的LED灯具致命缺陷—浪涌电压
所有的 LED 灯具都有这种致命的缺陷,而且至今为止,没有人提出过好的解决办法。所有搞LED电源的或是搞LED成品灯具的,都对这个问题避而不谈,装作不知道,然而实际量产,这个问题更是层出不穷,当然还有更多不怎么懂的人,完全搞不明白是怎么回事。 最常见的问题,就是做一个工程,几百台灯,经常会无缘无故的损坏,常见的就象一条街上装的LED路灯,时不时不亮,经常坏,修了又坏,坏了再修。还有LED日光灯,很多用非隔离电源,量产时经常发现有炸坏的,根本原因都在这里。都是浪涌电压造成,浪涌电压产生的原因很多,常见的就是室外雷击,或者是大的负载开启,关断,电压杂波之类。照书面上的讲法,就是一个很高的电压,经常达到上千伏,瞬间加在输入电源端,然后从
[电源管理]
认识C51外部中断(INT0)
以下将以红外遥控解码为例讲一下C51外部中断(INT0)的编程亲身体会. 要对红外遥控信号解码那么就要使用C51外部中断,并且要设置成为负跳变沿触发方式.一般都会在主程序的开始外初始化中断(或将初始化中断程序写成函数,将这个函数放入主程序)如下: void main(void) {  IT0=1;//负跳变触发  EX0=1;//开外部中断0  EA=1;//开总中断  .........//其它程序  .......... } void INT0() interrupt 0 {  .......//红外信号解码程序 } 根据需要打开外部中断(EX0=1):  以上程序在开始处便打开了外部中断.从理论上是完
[单片机]
利用单片机:比较2个有符号数的大小
题目:设内部RAM从30H,31H单元中存放有两个有符号数,试比较它们的大小,将较小的数存放在30H单元,较大的数存放在31H单元中。 理解:对于两个有符号数X,Y,不外乎有四种情况,即(正,负),(负,正),(正,正),(负,负)。所有程序里就这四种情况进行讨论就行了。 /******************************************************************* *MCU:51 series *Compiler:Keil UV2 *Code by:晴天 *****************************************************************
[单片机]
单片机变频pwm实验程序设计与原理
利用stc的一款 单片机 提供的 PWM 实现变频输出。程序将变频pwm输出到 LED 上作测试。 #include reg52.h sfr CC ON = 0xD8; sfr CMOD = 0xD9; sfr CL = 0xE9; sfr CH = 0xF9; sfr CCAP0L = 0xEA; sfr CCAP0H = 0xFA; sfr CCAPM0 = 0xDA; sfr CCAPM1 = 0xDB; sbit CR = 0xDE; sbit led = P2^0; unsigned char duty = 0x80; unsigned int fre = 0xffff; void ti
[单片机]
在LPC2131微控制器外部实现CAN总线通信设计
Philips公司的LPC213l是基于ARM7TDMI-S的高性能32位RISC微控制器。它具有ARM处理器的所有优点——低功耗、高性能和较为丰富的片上资源,但LPC2131内部没有集成CAN控制器,而无法利用CAN总线来进行通信。为了使得LPC2131能够利用CAN总线进行通信,可以通过外部扩展来实现其功能。目前,比较普通的方法是在LPC2131的外部采用CAN控制器设计CAN总线接口。LPC2131与CAN控制器的接口电路如图1所示。 这种方法中,LPC2131是通过GPIO口与CAN控制器SJA1000相连实现数据交互的。LPC2131通过寄存器IOSET/IOCLR来设定I/O口的高/低状态,虽然可以同时置位/拉低
[单片机]
在LPC2131<font color='red'>微控制器</font>外部实现CAN总线通信设计
C51---10 DS1302实时时钟
DS1302介绍✨ DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能 RTC(Real Time Clock): 实时时钟,是一种集成电路,通常称为时钟芯片 引脚定义和应用电路 内部结构框图 寄存器定义 时序定义 BCD码 DS1302时钟
[单片机]
C51---10 DS1302实时时钟
基于单片机的采集模块研究
1. 引言 脉冲电表是目前电力系统用户侧较为常见的一种电子电量表计。对于远程电子抄表系统,要实现对脉冲表输出脉冲的可靠、精确计量。本文研究探讨了对于脉冲表可靠脉冲捕捉、脉冲计量,特别研究了脉冲电表信号输出线路的断线报警、掉电数据存储等关键问题,并对区域脉冲表群抄表需要的现场总线进行了研究,提出用CAN总线为数据通信的脉冲电表群的模块化解决方案。 2. 脉冲采集模块设计 CH1脉冲采集的主要任务是对CH2 CH3脉冲电表输出脉冲的实时、准确计数,CH4是所有电量统计的基础。脉冲采集模块CH5的好坏直接影响整个系统的可靠性和CH6准确性,因此在整个抄表系统中占据着CH7重要的地位。 2.1 脉冲采集板的结构 采集板的具体结构如图
[单片机]
基于<font color='red'>单片机</font>的采集模块研究
超声波PIC单片机C程序
单片机源程序如下: //////////////////////////////////////////////////////////////////////////////// // // PIC16F877 + HC-SR04 + LCD03 example // Written October 2008 , using HITECH PIC16 compiler // // Note - assumes a 20MHz crystal, which is 5MHz timer clock // A 1:4 prescaler is used to give a 1.25MHz t
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved