一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于C51單片機(jī)實現(xiàn)LED燈1s閃爍

CHANBAEK ? 來源:Zi Jin Code ? 作者: 錕醬不是醬 ? 2023-11-02 10:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

C51使用的晶振頻率是11.0592MHz一顆LED燈接在C51的P0.0,現(xiàn)在要求設(shè)計程序,讓這顆LED燈以1s為間隔閃爍。

我們不只是設(shè)計程序,更要對這個單片機(jī)項目分析一下

順便看看這道題的難度~~~~~~~~~~~

順帶一提,本節(jié)課要用到單片機(jī)定時器》》看我上一篇文章,詳細(xì)介紹定時器

設(shè)計一個電路圖,單片機(jī)用80C52RC,晶振11.0592MHz,一顆LED接在P0.0

圖片

這里說明一下,C51的IO只支持弱上拉,這就意味著單片機(jī)的IO上拉的時候只能提供很弱小的電流,這個電流可能不足以點亮一顆LED燈(或者這顆LED燈的亮度很低),為了讓LED正常發(fā)光,我們使用上拉的方法。這里簡單介紹一下使用方法哈

圖片

當(dāng)P0.0低電平的時候LED燈導(dǎo)通,正常點亮,P0.0給高電平的時候LED不導(dǎo)通,熄滅

考慮到手頭的資源問題,我使用現(xiàn)成的開發(fā)板來完成這個程序設(shè)計,這個開發(fā)板使用的是上拉LED,LED1接在P1.0,實際電路圖修改后如下:

圖片

現(xiàn)在對程序分析一下

程序框圖

圖片

首先我們要明白,我們使用的LED是上拉模式的,P1.0 = 1的時候關(guān)閉LED,P1.0 = 0的時候點亮LED

既然要控制LED,這里就講一下方法

三條特殊的指令

sfr P0 = 0x80;

這條指令存放在reg52.h里面,已經(jīng)對IO組的寄存器的地址進(jìn)行定義,像P0,P1,P2這些關(guān)鍵字我們可以直接用。方便我們對IO的寄存器進(jìn)行操作,值得一提的是,IO寄存器是可以位尋址

sbit LED = P1^0

sbit指令給IO上的一個端口定義名字,比如說給P1.0(寫作P1^0)定義一個叫LED的名字,下次對這個IO進(jìn)行操作的時候用以下方法

sbit LED = P1^0;//這是前面的定義


LED= 1;//給P1.0IO寫高電平
LED= 0;//給P1.0IO寫低電平電平

此外,還可以直接對整個IO組進(jìn)行操作,方法

那么,接下來就是程序了

【1】軟件延遲實現(xiàn)

所謂的軟件延遲,就是通過執(zhí)行空代碼,實現(xiàn)延遲的效果,這種延遲實現(xiàn)的延遲有一個特點,時間不準(zhǔn),因為單片機(jī)里面每次執(zhí)行C語言下的一條操作的時間是不固定的

程序如下

#include< reg52.h >


sbit LED = P1^0;


void delay(unsigned int xms)  //調(diào)用時需提供參數(shù)xms的實際值。
{
  unsigned int i,j;   //定義無符號整型變量i、j
  for(i=0; i< xms; i++)  //后面沒帶";",下一條語句是循環(huán)體。參數(shù)xms延時x毫秒。
      for(j=0; j< 110; j++);  //后面帶";",表示這個for語句的循環(huán)體是空語句。
}//這個值得學(xué)習(xí),這里的代碼是延遲代碼


void main ()
{
  LED = 1;//先關(guān)閉LED燈

  while(1)
  {
    LED = !LED;//LED狀態(tài)取反
    /*
    這里說明一下取反
    取反用“!”
    取反前,LED = 1,取反后,LED = 0
    */
    delay(1000);//軟件延遲1000ms = 1s
  }
}

圖片

這就是效果了,怎么樣,還可以吧,但是……

題目要求我們延遲1s,如此精確的提到1s,肯定是希望我們用定時器來完成這個項目

我想,用軟件延遲,老師應(yīng)該會給特別低的分?jǐn)?shù),而且也體現(xiàn)不出我們的能力

下面我們用定時器完成這一道題

關(guān)于定時器的用法

#include< reg52.h >
void main()
{//注意設(shè)置定時器初始值要在main函數(shù)里面設(shè)置


  TMOD = 0x01;

  /*設(shè)置定時器模式寄存器TMOD為 0000 0001
  GATE = 0
  C/T = 0
  M1 =0
  M0 = 1
  標(biāo)準(zhǔn)16位定時器
  */

  //先設(shè)置定時器初始值
  TL0 = 0x3A;//設(shè)置定時器初始值低位
  TH0 = 0x8E;//設(shè)置定時器初始值高位

  TR0 = 0//記得一定要設(shè)置定時器開啟

  while(1)
  {
    if (TF0 == 1)
      {//這里可以先放下你的定時器計時滿了以后要執(zhí)行的代碼

       //溢出后你需要先給你的定時器再次設(shè)置初始值
        TL0 = 0x3A;//設(shè)置定時器初始值低位
        TH0 = 0x8E;//設(shè)置定時器初始值高位

        TF0 = 0;//設(shè)置好初始值后再復(fù)位定時器
      }
  }
}

我們要設(shè)置一個標(biāo)準(zhǔn)的16位定時器,設(shè)置方法和流程參考我寫過的文章,上面是16位定時器的設(shè)置流程

以下是程序框圖

圖片

下面是代碼

#include< reg52.h >


sbit LED  = P1^0;
unsigned char counter = 0;


void main()
{//注意設(shè)置定時器初始值要在main函數(shù)里面設(shè)置
  TMOD = 0x01;
  /*設(shè)置定時器模式寄存器TMOD為 0000 0001
  GATE = 0
  C/T = 0
  M1 =0
  M0 = 1
  標(biāo)準(zhǔn)16位定時器
  */

  //先設(shè)置定時器初始值
  TL0 = 0x4B;//設(shè)置定時器初始值低位
  TH0 = 0xF5;//設(shè)置定時器初始值高位
  TR0 = 1;//記得一定要設(shè)置定時器開啟


  while(1)
  {
    if (TF0 == 1)
      {
        counter++;
          if(counter >200)
          {
            counter = 0;
            LED = !LED;
          }
        TL0 = 0x4B;//設(shè)置定時器初始值低位
        TH0 = 0xF5;//設(shè)置定時器初始值高位
        TF0 = 0;//設(shè)置好初始值后再復(fù)位定時器
      }
  }
}

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6067

    文章

    44988

    瀏覽量

    650331
  • led燈
    +關(guān)注

    關(guān)注

    22

    文章

    1596

    瀏覽量

    109727
  • 定時器
    +關(guān)注

    關(guān)注

    23

    文章

    3298

    瀏覽量

    118870
  • C51單片機(jī)
    +關(guān)注

    關(guān)注

    12

    文章

    164

    瀏覽量

    35432
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    C51單片機(jī)實現(xiàn)獨立按鍵點亮LED

    :stc-isp-15xx-v6.85H.exe驅(qū)動:ch341ser(適用于win10操作系統(tǒng))實驗部分1、C51單片機(jī)實現(xiàn)流水燈實驗2、美化你的流水燈(自加)3、
    發(fā)表于 12-13 06:37

    使用51單片機(jī)定時器中斷控制LED1S的程序免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)定時器中斷控制LED1S的程序免費下載。
    發(fā)表于 07-04 17:41 ?10次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>定時器中斷控制<b class='flag-5'>LED</b><b class='flag-5'>燈</b>亮<b class='flag-5'>1S</b>的程序免費下載

    使用51單片機(jī)閃爍LED的代碼免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)閃爍LED的代碼免費下載。
    發(fā)表于 07-03 17:41 ?2次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>閃爍</b><b class='flag-5'>LED</b><b class='flag-5'>燈</b>的代碼免費下載

    使用單片機(jī)實現(xiàn)不同頻率閃爍1LEDC語言程序?qū)嵗赓M下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實現(xiàn)不同頻率閃爍1LED
    發(fā)表于 11-06 17:11 ?9次下載
    使用<b class='flag-5'>單片機(jī)</b><b class='flag-5'>實現(xiàn)</b>不同頻率<b class='flag-5'>閃爍</b><b class='flag-5'>1</b>個<b class='flag-5'>LED</b><b class='flag-5'>燈</b>的<b class='flag-5'>C</b>語言程序?qū)嵗赓M下載

    C語言||利用C51單片機(jī)編程實現(xiàn)轉(zhuǎn)向實驗

    實驗內(nèi)容:單片機(jī)P1口控制轉(zhuǎn)向實驗:有51單片機(jī),三個開關(guān)(K0,K1,K2),兩組
    發(fā)表于 11-12 12:21 ?9次下載
    <b class='flag-5'>C</b>語言||利用<b class='flag-5'>C51</b><b class='flag-5'>單片機(jī)</b>編程<b class='flag-5'>實現(xiàn)</b>轉(zhuǎn)向<b class='flag-5'>燈</b>實驗

    【Practical】51單片機(jī)軟件延時1S

    51單片機(jī)軟件延時1S
    發(fā)表于 11-12 14:51 ?13次下載
    【Practical】<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>軟件延時<b class='flag-5'>1S</b>

    51單片機(jī)如何延時1s,讓LED閃爍

    精確地延時1s需要準(zhǔn)確地計算,粗略地延遲1s可以自定義一個delay函數(shù),下面我們讓第一個LED延遲1s
    發(fā)表于 11-18 15:06 ?11次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>如何延時<b class='flag-5'>1s</b>,讓<b class='flag-5'>LED</b><b class='flag-5'>燈</b><b class='flag-5'>閃爍</b>

    STM32和C51單片機(jī)實現(xiàn)程序設(shè)計與仿真測試(LED閃爍

    STM32和C51單片機(jī)實現(xiàn)程序設(shè)計與仿真測試(LED閃爍
    發(fā)表于 11-20 11:36 ?30次下載
    STM32和<b class='flag-5'>C51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>實現(xiàn)</b>程序設(shè)計與仿真測試(<b class='flag-5'>LED</b><b class='flag-5'>閃爍</b>)

    c51單片機(jī)——led的初步學(xué)習(xí)

    #讓亮起來下面的代碼可以讓51單片機(jī)上的亮起#include <reg52.h>sbit led P2^0;void mai
    發(fā)表于 11-21 10:06 ?10次下載
    <b class='flag-5'>c51</b><b class='flag-5'>單片機(jī)</b>——<b class='flag-5'>led</b><b class='flag-5'>燈</b>的初步學(xué)習(xí)

    51單片機(jī)如何跳出wile循環(huán)_51單片機(jī)閃爍LED

    閃爍LED 51單片機(jī)是較為簡單的8位單片機(jī),意思是一次能處理8位2進(jìn)制數(shù)據(jù)。這一
    發(fā)表于 11-23 10:06 ?21次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>如何跳出wile循環(huán)_<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>閃爍</b><b class='flag-5'>LED</b><b class='flag-5'>燈</b>

    單片機(jī)led閃爍實驗總結(jié)_Linux下單片機(jī)開發(fā)2(C51):LED閃爍

    :/**************************************************************************************然后make 代碼沒有什么問題就寫入單片機(jī)中效果如下LED
    發(fā)表于 01-17 10:51 ?2次下載
    <b class='flag-5'>單片機(jī)</b><b class='flag-5'>led</b><b class='flag-5'>燈</b><b class='flag-5'>閃爍</b>實驗總結(jié)_Linux下<b class='flag-5'>單片機(jī)</b>開發(fā)2(<b class='flag-5'>C51</b>):<b class='flag-5'>LED</b><b class='flag-5'>閃爍</b>

    51單片機(jī)使用C語言點亮閃爍LED

    下面是點亮51單片機(jī)使用C語言閃爍LED的的一段代碼,也是我們邁入
    的頭像 發(fā)表于 08-16 08:59 ?1.4w次閱讀

    基于89C51單片機(jī)的不同頻率閃爍1LED源程序

    基于89C51單片機(jī)的不同頻率閃爍1LED源程序
    發(fā)表于 05-16 09:44 ?9次下載

    基于89C51單片機(jī)的不同頻率閃爍多個LED源程序

    基于89C51單片機(jī)的不同頻率閃爍多個LED源程序
    發(fā)表于 05-16 09:43 ?4次下載

    使用51單片機(jī)實現(xiàn)延時控制LED閃爍

    這篇文章我們講解使用51單片機(jī)控制LED閃爍。那么為了方便理解,我們要從最基礎(chǔ)的講起。閃爍,
    發(fā)表于 07-11 11:39 ?7110次閱讀
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>實現(xiàn)</b>延時控制<b class='flag-5'>LED</b><b class='flag-5'>燈</b><b class='flag-5'>閃爍</b>