那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于C51單片機實現LED燈1s閃爍

CHANBAEK ? 來源:Zi Jin Code ? 作者: 錕醬不是醬 ? 2023-11-02 10:55 ? 次閱讀

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

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

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

順帶一提,本節課要用到單片機定時器》》看我上一篇文章,詳細介紹定時器

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

圖片

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

圖片

當P0.0低電平的時候LED燈導通,正常點亮,P0.0給高電平的時候LED不導通,熄滅

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

圖片

現在對程序分析一下

程序框圖

圖片

首先我們要明白,我們使用的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位定時器的設置流程

以下是程序框圖

圖片

下面是代碼

#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;//設置好初始值后再復位定時器
      }
  }
}

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6043

    文章

    44619

    瀏覽量

    638474
  • led燈
    +關注

    關注

    22

    文章

    1592

    瀏覽量

    108405
  • 定時器
    +關注

    關注

    23

    文章

    3255

    瀏覽量

    115362
  • C51單片機
    +關注

    關注

    12

    文章

    164

    瀏覽量

    34838
收藏 人收藏

    評論

    相關推薦

    C51單片機實現獨立按鍵點亮LED

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

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

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

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

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

    使用單片機實現不同頻率閃爍1LEDC語言程序實例免費下載

    本文檔的主要內容詳細介紹的是使用單片機實現不同頻率閃爍1LED
    發表于 11-06 17:11 ?9次下載
    使用<b class='flag-5'>單片機</b><b class='flag-5'>實現</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>語言程序實例免費下載

    C語言||利用C51單片機編程實現轉向實驗

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

    【Practical】51單片機軟件延時1S

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

    51單片機如何延時1s,讓LED閃爍

    精確地延時1s需要準確地計算,粗略地延遲1s可以自定義一個delay函數,下面我們讓第一個LED延遲1s
    發表于 11-18 15:06 ?11次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</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單片機實現程序設計與仿真測試(LED閃爍

    STM32和C51單片機實現程序設計與仿真測試(LED閃爍
    發表于 11-20 11:36 ?26次下載
    STM32和<b class='flag-5'>C51</b><b class='flag-5'>單片機</b><b class='flag-5'>實現</b>程序設計與仿真測試(<b class='flag-5'>LED</b><b class='flag-5'>閃爍</b>)

    c51單片機——led的初步學習

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

    51單片機如何跳出wile循環_51單片機閃爍LED

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

    單片機led閃爍實驗總結_Linux下單片機開發2(C51):LED閃爍

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

    51單片機使用C語言點亮閃爍LED

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

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

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

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

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

    使用51單片機實現延時控制LED閃爍

    這篇文章我們講解使用51單片機控制LED閃爍。那么為了方便理解,我們要從最基礎的講起。閃爍
    發表于 07-11 11:39 ?6179次閱讀
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>實現</b>延時控制<b class='flag-5'>LED</b><b class='flag-5'>燈</b><b class='flag-5'>閃爍</b>
    百家乐社区| 百家乐官网如何投注技巧| 澳门百家乐注册| 威尼斯人娱乐平台官网| 中国百家乐游戏| 做生意摆放的招财物件| 百家乐官网网上玩法| 百家乐官网菲律宾| 博彩网百家乐官网中和局| 赌百家乐官网大小点桌| 网络百家乐官网现金游戏哪里的信誉好啊 | 尊龙体育| 青鹏棋牌游戏下载| 赌博博彩论坛| 平博国际| 百家乐官网压分技巧| 最好的百家乐官网游戏平台1| 百家乐官网游戏平台排名| 环江| 新兴县| 带有百家乐官网的棋牌游戏有哪些| 高档百家乐官网桌| 百家乐官网7人桌布| 风水(24山定凶吉)最新整理| 百家乐翻天youtube| 大连百家乐商场| 反赌百家乐的玩法技巧和规则 | 至尊百家乐官网吕文婉| 至尊百家乐官网| 索雷尔百家乐的玩法技巧和规则| 德州扑克网站| 大发888注册步骤| 沙洋县| 网上玩百家乐官网会出签吗| 太阳城百家乐手机投注| 威尼斯人娱乐网站| 大发888开户日博备用| 大发888是什么软件| 百家乐官网四式正反路| 百家乐官网路单网下载| 奔驰百家乐官网游戏电玩|