畢業回饋-89C51之GPIO使用(流水燈)

来源:https://www.cnblogs.com/Mr-Wangblogs/archive/2018/04/24/8932418.html
-Advertisement-
Play Games

今天分享一個89c51製作的8位流水燈案例。使用Proteus模擬。同上一遍文章不同。上一篇文章中對於GPIO操作主要是位操作,即sbit led1=P0^0;其中P0^0代表p0.0這個引腳,然後在這樣位定義以後就可以對led1這個變數進行賦值操作,控制led燈的亮滅閃爍。今天要分享的是一次性對P... ...


今天分享一個89c51製作的8位流水燈案例。使用Proteus模擬。

同上一遍文章不同。上一篇文章中對於GPIO操作主要是位操作,即sbit led1=P0^0;其中P0^0代表p0.0這個引腳,然後在這樣位定義以後就可以對led1這個變數進行賦值操作,控制led燈的亮滅閃爍。今天要分享的是一次性對P1.0-P1.7進行操作。

89c51單片機是以51為內核的8位處理器,可以很方便的實現8位數據的操作。

所使用的電路原理圖如下:

image

使用200Ohm的電阻進行限流,LED燈採用陰極接法,即LED燈的陰極接到單片機的IO口;

本次案例流水燈共有以下幾種模式:

1):D1-D2-D3-D4-D5-D6-D7-D6-D5-D4-D3-D2-D1;順向,逆向間隔流水;

2):從D1-D7按照二進位的形式流水

3):順向移位流水:D1-D1,D2-D1,D2,D3-D1,D2,D3,D4-D1,D2,D3,D4,D5-D1,D2,D3,D4,D5,D6-D1,D2,D3,D4,D5,D6,D7;

4):逆向移位流水:D7-D7,D6-D7,D6,D5-D7,D6,D5,D4-D7,D6,D5,D4,D3-D7,D6,D5,D4,D3,D2-D7,D6,D5,D4,D3,D2,D1;

源代碼如下:

其中

led_Mod:流水模式選擇參數可以設置為1-5;

uDelay_ms:每一次切換之間的間隔時間;

void LED_Display(uint16 led_Mod,uint32 uDelay_ms)
{
     int i=0;
     uint32 cnt=0;
     static int Mod;
     Mod=led_Mod;
     switch(Mod)
     {
        
         case 1://第一種模式:正向流水
         {
             for(;i<=7;i++)
             {
                 if(i>=8)
                 {
                     i=0;
                     break;
                 }
                 Led=~led_Moud[i];
                 delay(uDelay_ms);
             }
             break;
            
         }
         case 2://第二種模式:逆向流水
         {
             for(;i<=7;i++)
             {
                 if(i>=8)
                 {
                     i=0;
                     break;
                 }
                 Led=~led_Moud[7-i];
                 delay(uDelay_ms);
             }
             break;
         }
         case 3://第三種模式:二進位移位
         {
             for(i=0xff;i>=0x00;i--)
             {
                 if(i==0)
                 {
                     i=0;
                     break;
                 }
                 Led=i;
                 delay(uDelay_ms);
             }
             break;
         }
         case 4://第四種模式:移位模式(不尋數組)順向
         {
             for(;i<=7;i++)
             {
                 if(i>=8)
                 {
                     i=0;
                     break;
                 }
                 Led = (0xfe<< i);       //Led 等於 0xfe 左移 i 位,控制 8 個 LED   
                 delay(uDelay_ms);   
             }
             Led=0xff;
             break;
         }
         case 5://第五種模式:移位模式(不尋數組)逆向
         {
             for(;i<=7;i++)
                 {
                     if(i>=8)
                     {
                         i=0;
                         break;
                     }
                     Led = (0x7f>>i);       //Led 等於 0xfe 左移 i 位,控制 8 個 LED   
                     delay(uDelay_ms);   
                 }
                 Led=0xff;
                 break;
         }
         default:break;
     }

}

順向流水的數組定義如下:

const uchar code led_Moud[]=
{
     0X01, 0X02, 0X04, 0X08, 0X10, 0X20, 0X40, 0X80//Module1
};

delay函數的定義:

請查看第一遍博客;http://www.cnblogs.com/Mr-Wangblogs/p/8890788.html

主函數的設計如下:

image

對於顯示函數的聲明如下:

image

51_Include.h內如下:

image

具體編碼方式圖解:(本編碼方式是基於陽極接法,陰極的讀者可以自行編寫,遇到問題可以咨詢)

image

接下來簡單介紹一下C51數組定義的時候裡面涉及到的幾個關鍵字

首先C51數組定義如下:

const uchar code led_Moud[]=
{
0X01, 0X02, 0X04, 0X08, 0X10, 0X20, 0X40, 0X80//Module1
};

const:

作用主要有以下幾點:
(1)可以定義const常量,具有不可變性。

(2)便於進行類型檢查,使編譯器對處理內容有更多瞭解,消除了一些隱患。

(3)可以避免意義模糊的數字出現,同樣可以很方便地進行參數的調整和修改。

(4)可以保護被修飾的東西,防止意外的修改,增強程式的健壯性。

(5) 可以節省空間,避免不必要的記憶體分配
(6)提高了效率

Technorati Tags:

以上內容來自網路

我們在C51中使用這個關鍵字一般都是在定義數組是使用。在製作字型檔,編碼時使用,主要目的時為了減少51資源的浪費以及不允許修改他所修飾的數組內容。

code:

C51的關鍵字,不是C語言的關鍵字。Code的意思是代碼區,也就是說我們這樣定義的時候就將這個數組放到了單片機的代碼區,可以減少檢索時間。

對於以上內容有疑問請及時聯繫我,我會儘快回覆,歡迎一起交流和學習。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • MVC也好,WebAPI也好,據我所知,有部分人是因為複雜的路由,而不想去學的。曾經見過一位程式猿,在他MVC程式中,一切皆路由,url中是完全拒絕"?"和“&”。對此,我也不好說什麼,搞不好是個人風格。路由雖然重要,但其實也只是實現MVC的一種手段,並非你用的路由越多,你的url完全不使用參數,你 ...
  • 一、課程介紹 曾經有一位不知名的講師說過這麼一句名言: 一門RPC技術不會,那麼千萬萬門RPC技術將都不會!在今天移動互聯網的時代,作為攻城師的我們,誰不想著只寫一套API就可以讓我們的Web, Android APP, IOS APP, iPad APP, Hybired APP, H5 Web共 ...
  • Linux和Unix系統一樣對文件有如下的解釋:一切皆為文件;若非文件,則為進程。 Linux將文件和目錄視如同物,因為目錄只是一個包含了其他文件名的文件而已。程式、服務、文本、圖片等等,都是文件。對於系統來說,輸入和輸出設備,基本上所有的設備,都被當做是文件。 如上圖所示,Linux系統的文件系統... ...
  • 由於公司業務,需要上Git版本控制。 * 目前市面上比較有名的Git服務提供商,國外有GitHub、BitBucket、GitLab,國內有碼雲,Coding。 * 現有的服務商,對於免費的套餐都有一定的限制。比如:GitHub只允許建立免費的開源repository,建立私有的倉庫需要收費。Bit ...
  • 1. 家目錄創建.vimrc文件 set nu # 設置行號 set tabstop=4 # tab製表符縮進 set autoindent # 自動縮進 set showmatch # 括弧匹配高亮 execute pathogen#infect() # # # # # # syntax on 這 ...
  • 學習鏈接: http://www.xuetangx.com/courses/course-v1:TsinghuaX+30240243X+sp/courseware/1d95cdf6f0e943448801e538b039300a/0179051a6465451da5a92013f71234ff/ h ...
  • 文本編輯器 vi/vim 一、啟動與退出 1、 vim 2、 vim 文件名(可以是存在的文件,也可以是不在的文件) 3、退出 :q 或者:x 在非“插入”模式二、vi/vim的工作模式 1、正常模式(啟動後自動進入正常模式) 2、輸入文本模式(插入模式) 3、:命令 模式 4、可視模式(選擇文本模 ...
  • Linux基礎命令 命令格式: 命令名稱 [參數] [對象] 命令參數的長格式與短格式: 長格式:man -- help 短格式:man - h 常用系統工作命令 echo 輸出語句 格式是: echo [字元串 | $變數] date 用於顯示系統時間設置時間或日期 格式是 : date [選項] ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...