最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

嵌入式C實戰(zhàn)項目開發(fā)技巧:對一個有規(guī)律的數(shù)組表進行位移操作的方法

 更新時間:2018年12月20日 14:36:17   作者:Engineer-Bruce_Yang  
今天小編就為大家分享一篇關(guān)于嵌入式C實戰(zhàn)項目開發(fā)技巧:對一個有規(guī)律的數(shù)組表進行位移操作的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

在嵌入式項目開發(fā)中,LED燈的操作是一定要會的,也是基礎(chǔ)中的基礎(chǔ),比如用51單片機寫個跑馬燈,這不簡單嘛,定義一個數(shù)組把那8個跑馬燈存起來,然后搞個for循環(huán)不就可以了嘛,但是,實際工作開發(fā)中寫一個跑馬燈可不像學(xué)校和書本上那么簡單噢,往往最簡單的東西,有可能也是最復(fù)雜的?,F(xiàn)在我的需求是這樣的,我要求實現(xiàn)以下形式的流水燈:

跑馬燈在這個表格中是一位一位進行存儲的,如果要一行全亮,那么寫0xff,燈就全亮了,寫0x00,燈就全滅了。

要求從led1流水到led100這個燈,也就是實現(xiàn)100個燈的跑馬燈操作。那如何實現(xiàn)呢?有人肯定會說定義十個數(shù)組就行啦,用填表的方法。然后搞十個for循環(huán)來實現(xiàn),那么可取不?可取,但是太麻煩啦,因為這是用空間來換時間,雖然能達到效果,但是就太浪費內(nèi)存空間了,效率也是很低的。

那么如何快速處理這個問題呢?

答案就是位運算與循環(huán)的結(jié)合,首先思考一下,led是從第1個開始一直流到第100個,一共有十行,每行有十個,那么我們就可以定義一個for循環(huán)來循環(huán)相應(yīng)的行數(shù),設(shè)定led燈的初始位置,然后用移位算法,移動8位就換下一行,一個led相當(dāng)于1bit,這樣的話,兩個for循環(huán)就可以搞定了,接下來我們用C語言來模擬這個過程。

#include <stdio.h>
void delay()
{
 int i , j ; 
 for(i = 0 ; i < 1000 ; i++)
 for(j = 0 ; j < 8000 ;j++);
}
//跑馬燈從高位到低位流
void test_low_to_high_bit()
{
 int i , j ; 
 int tick ;
 static int ledbuf[10] ;
 for(i = 0 ; i < 10 ; i++)
 {
 ledbuf[i] = 0x01 ; //設(shè)定每次開始的位置,從0x01開始
 for(j = 0 ; j < 8 ; j++)
 {
  printf("%p ",ledbuf[i]);
  ledbuf[i] <<= 1 ; //每次左移一位,左移八次
  delay() ;
 }
 putchar('\n');
 ledbuf[i] = 0 ; //將數(shù)組清0,等待進入下一行
 }
}
//跑馬燈從低位到高位流
void test_high_to_low_bit()
{
 int i , j ; 
 int tick ;
 static int ledbuf[10] ;
 for(i = 0 ; i < 10 ; i++)
 {
 ledbuf[i] = 0x80 ; //設(shè)定從高位的第一個LED燈的位置
 for(j = 0 ; j < 8 ; j++)
 {
  printf("%p ",ledbuf[i]);
  ledbuf[i] >>= 1 ; //將數(shù)組的第一個元素右移一位,一共右移八位
  delay() ;
 }
 putchar('\n');
 ledbuf[i] = 0 ;//將數(shù)組清0,等待進入下一行</span>
 }
}
int main(void)
{
 test_low_to_high_bit() ;
 putchar('\n');
 test_high_to_low_bit() ;
 return 0 ;
}

運行結(jié)果:

運行結(jié)果很明顯,第一個是從第一位移位到第八位,移動了8次,移動了十行。

第二個是反著來的。

如果,現(xiàn)在有個需求改了,那個表中,我要指定的LED亮,其它的不亮,然后實現(xiàn)流水燈的效果,那要如何去寫這個程序?

這種問題的分析就要復(fù)雜很多啦,所以,一個流水燈,簡單可以簡單到不用兩分鐘你可以寫出來,復(fù)雜可以復(fù)雜到可能你想一天都想不出來,所以,無論遇到什么問題,做一下總結(jié),下次遇到問題的時候就可以熟能生巧。沒有寫不出的能實現(xiàn)程序,沒有實現(xiàn)不了的軟件需求。只有頭腦簡單的程序員。加油吧,各位!

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • C++ 互斥鎖原理以及實際使用介紹

    C++ 互斥鎖原理以及實際使用介紹

    本文主要聊一聊如何使用互斥鎖以及都有哪幾種方式實現(xiàn)互斥鎖。實現(xiàn)互斥,可以有以下幾種方式:互斥量(Mutex)、遞歸互斥量(Recursive Mutex)、讀寫鎖(Read-Write Lock)、條件變量(Condition Variable)。感興趣的同學(xué)可以參考一下
    2023-04-04
  • C++實現(xiàn)的分布式游戲服務(wù)端引擎KBEngine詳解

    C++實現(xiàn)的分布式游戲服務(wù)端引擎KBEngine詳解

    這篇文章主要詳細介紹了C++實現(xiàn)的分布式游戲服務(wù)端引擎KBEngine的概念以及使用方法,非常的實用,有需要的小伙伴可以參考下
    2015-03-03
  • 解決Microsoft?Visual?C++?2010?Express?運行及調(diào)試問題

    解決Microsoft?Visual?C++?2010?Express?運行及調(diào)試問題

    這篇文章主要介紹了解決Microsoft?Visual?C++?2010?Express?運行及調(diào)試問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • C++實現(xiàn)圖書館案例

    C++實現(xiàn)圖書館案例

    這篇文章主要為大家詳細介紹了C++實現(xiàn)圖書館案例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 淺談C語言轉(zhuǎn)義字符和格式控制符

    淺談C語言轉(zhuǎn)義字符和格式控制符

    下面小編就為大家?guī)硪黄獪\談C語言轉(zhuǎn)義字符和格式控制符。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • C語言可變參數(shù)列表的用法與深度剖析

    C語言可變參數(shù)列表的用法與深度剖析

    這篇文章主要給大家介紹了關(guān)于C語言可變參數(shù)列表的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-02-02
  • C++基礎(chǔ)入門教程(九):函數(shù)指針之回調(diào)

    C++基礎(chǔ)入門教程(九):函數(shù)指針之回調(diào)

    這篇文章主要介紹了C++基礎(chǔ)入門教程(九):函數(shù)指針之回調(diào),本文講解了函數(shù)的地址、聲明函數(shù)指針、歷史原因、typedef挽救復(fù)雜的函數(shù)指針等內(nèi)容,需要的朋友可以參考下
    2014-11-11
  • 計時器的time_t和clock_t 的兩種實現(xiàn)方法(推薦)

    計時器的time_t和clock_t 的兩種實現(xiàn)方法(推薦)

    下面小編就為大家?guī)硪黄嫊r器的time_t和clock_t 的兩種實現(xiàn)方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • C語言實現(xiàn)選擇排序、直接插入排序、冒泡排序的示例

    C語言實現(xiàn)選擇排序、直接插入排序、冒泡排序的示例

    這篇文章主要介紹了C++實現(xiàn)選擇排序、直接插入排序、冒泡排序的代碼示例,相當(dāng)簡潔直觀,也是算法和數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)中的基礎(chǔ),需要的朋友可以參考下
    2016-02-02
  • C語言中的sizeof操作符用法及和strlen的區(qū)別

    C語言中的sizeof操作符用法及和strlen的區(qū)別

    這篇文章主要介紹了C語言中的sizeof操作符用法及和strlen的區(qū)別,本文講解了sizeof的定義、sizeof的語法以及使用實例,最后給出sizeof與strlen的區(qū)別,需要的朋友可以參考下
    2015-07-07

最新評論

天水市| 彭泽县| 连江县| 博爱县| 旺苍县| 高州市| 涟水县| 永康市| 汤原县| 淮南市| 教育| 织金县| 抚州市| 闵行区| 盐池县| 江口县| 邵东县| 萝北县| 常德市| 新竹县| 汝阳县| 泾阳县| 祥云县| 宁强县| 巴塘县| 德昌县| 酒泉市| 广水市| 永春县| 湖口县| 彝良县| 仲巴县| 会理县| 乐亭县| 仙游县| 兰西县| 瓮安县| 博湖县| 宁都县| 堆龙德庆县| 璧山县|