亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

蟲蟲首頁| 資源下載| 資源專輯| 精品軟件
登錄| 注冊

5<b>9</b>7

  • 微電腦型數學演算式隔離傳送器

    特點: 精確度0.1%滿刻度 可作各式數學演算式功能如:A+B/A-B/AxB/A/B/A&B(Hi or Lo)/|A|/ 16 BIT類比輸出功能 輸入與輸出絕緣耐壓2仟伏特/1分鐘(input/output/power) 寬范圍交直流兩用電源設計 尺寸小,穩定性高

    標簽: 微電腦 數學演算 隔離傳送器

    上傳時間: 2014-12-23

    上傳用戶:ydd3625

  • 微電腦型數學演算式雙輸出隔離傳送器

    特點(FEATURES) 精確度0.1%滿刻度 (Accuracy 0.1%F.S.) 可作各式數學演算式功能如:A+B/A-B/AxB/A/B/A&B(Hi or Lo)/|A| (Math functioA+B/A-B/AxB/A/B/A&B(Hi&Lo)/|A|/etc.....) 16 BIT 類比輸出功能(16 bit DAC isolating analog output function) 輸入/輸出1/輸出2絕緣耐壓2仟伏特/1分鐘(Dielectric strength 2KVac/1min. (input/output1/output2/power)) 寬范圍交直流兩用電源設計(Wide input range for auxiliary power) 尺寸小,穩定性高(Dimension small and High stability)

    標簽: 微電腦 數學演算 輸出 隔離傳送器

    上傳時間: 2013-11-24

    上傳用戶:541657925

  • AVR單片機數碼管秒表顯示

    #include<iom16v.h> #include<macros.h> #define uint unsigned int #define uchar unsigned char uint a,b,c,d=0; void delay(c) { for for(a=0;a<c;a++) for(b=0;b<12;b++); }; uchar tab[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,

    標簽: AVR 單片機 數碼管

    上傳時間: 2013-10-21

    上傳用戶:13788529953

  • 單片機指令系統

    單片機指令系統 3.1 MCS-51指令簡介 3.2 指令系統 3.1  MCS-51指令簡介 二、MCS-51系列單片機指令系統分類 按尋址方式分為以下七種:按功能分為以下四種: 1、立即立即尋址         1、數據傳送指令位操 2、直接尋址             2、算術運算指令 3、寄存器尋址           3、邏輯運算指令 4、寄存器間接尋址指令   4、控制轉移類指令 5、相對尋址             5、位操作指令 6、變址尋址 7、位尋址 三、尋址方式 3、寄存器間接尋址    MOV A, @R1        操作數是通過寄存器間接得到的。 4、立即尋址               MOV  A, #40H        操作數在指令中直接給出。 5、基址寄存器加變址寄存器尋址        以DPTR或PC為基址寄存器,以A為變址寄存器,        以兩者相加形成的16位地址為操作數的地址。                   MOVC A, @A+DPTR                   MOVC A, @A+PC 四、指令中常用符號說明 Rn——當前寄存器區的8個工作寄存器R0~R7(n=0~7); Ri——當前寄存器區可作地址寄存器的2個工作寄存器R0和R1(i=0,1); direct——8位內部數據存儲器單元的地址及特殊功能寄存器的地址; #data——表示8位常數(立即數); #datal6——表示16位常數; add 16——表示16位地址; addrll——表示11位地址; rel——8位帶符號的地址偏移量; bit——表示位地址; @——間接尋址寄存器或基址寄存器的前綴; ( )——表示括號中單元的內容 (( ))——表示間接尋址的內容; 五、MCS-51指令簡介 1. 以累加器A為目的操作數的指令 2.  以Rn為目的操作數的指令 3.  以直接地址為目的操作數的指令 4.  以寄存器間接地址為目的操作數指令 應用舉例1 8段數碼管顯示 應用舉例2 3.2  指令系統 2、堆棧操作指令  3.  累加器A與外部數據傳輸指令 4.  查表指令    MOVC  A,   @A+PC  例子: 5.  字節交換指令 6.  半字節交換指令 二、算術操作類指令 PSW寄存器 2.  帶進位加法指令 3.  加1指令 4.  十進制調整指令 5.  帶借位減法指令(Subtraction) 6.  減1指令(Decrease) 7.   乘法指令(Multiplication) 8.  除法指令(Division)        三、邏輯運算指令 1.  簡單邏輯操作指令 2.  循環指令 帶進位左循環指令(Rotate  Accumulator Left   through  Carry  flag)      右循環指令(Rotate  Accumulator  Right) 帶進位右循環指令(Rotate  A  Right  with  C) 3.   邏輯與指令 4.  邏輯或指令 5.  邏輯異或指令 四、控制轉移類指令 1.  跳轉指令 相對轉移指令   SJMP   rel           PC←(PC)+2                                                                                                                            PC←(PC)+rel 程序中標號與地址之間的關系 2.  條件轉移指令 3.  比較不相等轉移指令 4.  減 1 不為 0 轉移指令 5.  調用子程序指令 7.  中斷返回指令 五、位操作指令 1.  數據位傳送指令 2.  位變量邏輯指令 3.  條件轉移類指令

    標簽: 單片機 指令系統

    上傳時間: 2013-10-27

    上傳用戶:xuanjie

  • 基于AT89C2051的紅外遙控學習器源程序

    基于AT89C2051的紅外遙控學習器源程序6 源程序          ORG 0000H          AJMP MAIN          ORG 0003H          AJMP KEYPRESS          ORG 000BH           AJMP TIMEOUT          ORG 001BH          AJMP TIMEOUT           SENDDUAN   BIT P3.0          JIEDUAN    BIT P3.1          INTRPO     BIT P3.2          JIEXUAN    BIT P3.3          SENDLIGHT  BIT P3.4          JIELIGHT   BIT P3.5          CS         BIT P3.7          DATADUAN   BIT P1.6          CLK        BIT P1.7           JIANWEI    EQU R5          JIANMA     EQU R6          SHANGJIAN  EQU 07H;R7          OPENKEY    EQU 81H          CLOSEKEY   EQU 00H          CHUT0      EQU 11H          CHUT1      EQU 11H          BUFBEGIN   EQU 18H          OPENT1     EQU 88H          CLOSET1    EQU 00H          OPENT0     EQU 82H          CLOSET0    EQU 00H          DATABEG1   EQU 0AAH          DATABEG2   EQU 33H           ORG 0030HMAIN:     MOV  IE,#80H          MOV  IP,#00H          MOV  P3,#0FFH          CLR  CS          SETB P1.0          SETB P1.1          SETB P1.2          CLR  P1.3          CLR  P1.4          CLR  P1.5          CLR  P1.6          CLR  P1.7                    MOV  R3,#80H          MOV  R0,00HCYCLE1:   MOV  @R0,#00H          INC  R0          DJNZ R3,CYCLE1                    MOV  PSW,#00H          MOV  SP,#07H           MOV  TMOD,#11H          MOV  TCON,#00H START:    MOV  SP,#07H          SETB SENDDUAN          CLR  F0          SETB EXOWAITKEY:  MOV  C,F0          JNC  WAITKEY          CJNC JIANMA,#1BH,SEND          LCALL LEARNP          LJMP STARTSEND:     LCALL SENDP          LJMP START SENDP:    SETB SENDDUAN          CLR  F0          MOV  TMOD,#CHUT1

    標簽: C2051 2051 89C AT

    上傳時間: 2013-10-15

    上傳用戶:lyy1234

  • 51匯編程序實例

    51匯編程序實例:舉一例說明:流水燈加數碼管 LOOP:     ; 標號CLR P2.6   ;選中p2.6 數碼管左邊的8字使能SETB P2.7   ;p2.7不使能。 右邊的數碼管消隱MOV P0,#28H  ;把28h送p0口;數碼管顯示 0LCALL DELAY ;延時MOV P0,#0FFH   ;0ffh 送p0口,數碼管清除CLR P1.0    ;點亮p1.0發光管MOV P0,#7EH ;把7eh送p0口;數碼管顯示 1LCALL DELAYMOV P0,#0FFHCLR P1.1      ;點亮p1.0發光管CLR P1.0      ;點亮p1.0發光管MOV P0,#0A2H   ;數碼管顯示 2LCALL DELAYMOV P0,#0FFHCLR P1.2CLR P1.1CLR P1.0MOV P0,#62H    ;數碼管顯示 3LCALL DELAYMOV P0,#0FFHCLR P1.3CLR P1.2CLR P1.1CLR P1.0MOV P0,#74H    ;數碼管顯示 4LCALL DELAYMOV P0,#0FFHCLR P1.4CLR P1.3CLR P1.2CLR P1.1CLR P1.0MOV P0,#61H   ;數碼管顯示 5;LCALL DELAYMOV P0,#0FFHCLR P1.5CLR P1.4CLR P1.3CLR P1.2CLR P1.1CLR P1.0MOV P0,#21H     ; 數碼管顯示 6LCALL DELAYMOV P0,#0FFHCLR P1.6CLR P1.5CLR P1.4CLR P1.3CLR P1.2CLR P1.1CLR P1.0MOV P0,#7AH   ; 數碼管顯示 7LCALL DELAYMOV P0,#0FFHCLR P1.7CLR P1.6CLR P1.5CLR P1.4CLR P1.3CLR P1.2CLR P1.1CLR P1.0MOV P0,#20H   ; 數碼管顯示 8LCALL DELAYMOV P0,#0FFHLCALL DELAYMOV P0,#0FFHMOV P1,#0FFH;程序到此結果為左邊的數碼管顯示0,1,2,3,4,5,6,7,8;p1.0------------p1.7指示燈依次點亮SETB P2.6   ; 左邊的8消隱CLR P2.7   ;選中p2.7 數碼管右邊的8字使能 ,;MOV P0,#28HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.0MOV P0,#7EHLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.1MOV P0,#0A2HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.2MOV P0,#62HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.3MOV P0,#74HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.4MOV P0,#61HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.5MOV P0,#21HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.6MOV P0,#7AHLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.7MOV P0,#20HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHMOV P0,#0FFHMOV P1,#0FFH;這一段和上一段基本相同, 不同的是右邊的數碼管依次顯示012345678,左邊的不亮;;同時p1口的燈流動顯示:AJMP LOOP; 注意: 程序運行到此跳轉到開始標號,重復執行:DELAY:  ;延時子程序;參考前面的教程:CLR P3.3  ;注意小喇叭在3.3口, 這里可以使小喇叭發出嗒,嗒聲MOV  R7,#255NOPNOPD1:MOV R6,#255setb p3.3D2: DJNZ R6,D2clr p3.3DJNZ R7,D1SETB P3.3RETENDLOOP:                ; 標號CLR P2.6             ;選中p2.6 數碼管左邊的8字使能SETB P2.7            ;p2.7不使能。 右邊的數碼管消隱MOV P0,#28H          ;把28h送p0口;數碼管顯示 0    ;28為1010000LCALL DELAY          ;  延時程序MOV P0,#0FFH         ;0ffh 送p0口,數碼管清除;P0口為11111111CLR P1.0             ;點亮p1.0發光管; P1。0為電平,P0口為11111110MOV P0,#7EH          ;把7eh送p0口;數碼管顯示 1; P1。0為低電平,P0口為11111110LCALL DELAY          ;  延時程序MOV P0,#0FFHMOV P0,#0FFH         ;0ffh 送p0口,數碼管清除;P0口為11111111 清一次顯示這條是清顯示的

    標簽: 匯編 程序實例

    上傳時間: 2013-10-31

    上傳用戶:gundamwzc

  • RT-Thread實時操作系統編程指南(版本 0.3.0)

    實時操作系統,Kernel部分完成于2006年上半年,其IPC部分甚至是年中時才具備相 應的雛形。最開始時是因為要為朋友做一個小型的手持設備,而本人起初又是另一國內老牌 實時操作系統:DOOLOO RTOS開發人員,但這個團隊在2005年底已經解散。但朋友的系統要 上,用其他小型系統嗎,一不熟悉,二看不上。答應朋友的事,總得有解決方法吧,即使是原來 的DOOLOO RTOS,因為其仿VxWorks結構,導致它的核心太大,包括太多不必要的東西(一套 完整的libc庫),這些方案都否決了。怎么辦?當時朋友那邊也不算太急,先自己寫一套內核吧。 這個就是源頭!(后來雖然朋友的項目夭折了,但這套OS則保留下來了,并開源了,萬幸) 1 序 3 1.1 RT-Thread誕生 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 艱難的發展期 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3 一年增加0.0.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.4 Cortex-M3的變革 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.5 面向對象設計方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.6 文檔結構 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2 實時系統 7 2.1 嵌入式系統 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2 實時系統 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3 軟實時與硬實時 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3 快速入門 11 3.1 準備環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2 初識RT-Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.3 系統啟動代碼 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.4 用戶入口代碼 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.5 跑馬燈的例子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.6 生產者消費者問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4 RT-Thread簡介 25 4.1 實時內核 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.2 虛擬文件系統 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.3 輕型IP協議棧 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.4 shell系統 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.5 圖形用戶界面 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.6 支持的平臺 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 5 內核對象模型 29 5.1 C語言的對象化模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 5.2 內核對象模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 6 線程調度與管理 39 6.1 實時系統的需求 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

    標簽: RT-Thread 實時操作系統 編程指南 版本

    上傳時間: 2013-10-14

    上傳用戶:1234321@q

  • Arduino學習筆記4_Arduino軟件模擬PWM

    注:1.這篇文章斷斷續續寫了很久,畫圖技術也不精,難免錯漏,大家湊合看.有問題可以留言.      2.論壇排版把我的代碼縮進全弄沒了,大家將代碼粘貼到arduino編譯器,然后按ctrl+T重新格式化代碼格式即可看的舒服. 一、什么是PWM PWM 即Pulse Wavelength Modulation 脈寬調制波,通過調整輸出信號占空比,從而達到改 變輸出平均電壓的目的。相信Arduino 的PWM 大家都不陌生,在Arduino Duemilanove 2009 中,有6 個8 位精度PWM 引腳,分別是3, 5, 6, 9, 10, 11 腳。我們可以使用analogWrite()控 制PWM 腳輸出頻率大概在500Hz 的左右的PWM 調制波。分辨率8 位即2 的8 次方等于 256 級精度。但是有時候我們會覺得6 個PWM 引腳不夠用。比如我們做一個10 路燈調光, 就需要有10 個PWM 腳。Arduino Duemilanove 2009 有13 個數字輸出腳,如果它們都可以 PWM 的話,就能滿足條件了。于是本文介紹用軟件模擬PWM。 二、Arduino 軟件模擬PWM Arduino PWM 調壓原理:PWM 有好幾種方法。而Arduino 因為電源和實現難度限制,一般 使用周期恒定,占空比變化的單極性PWM。 通過調整一個周期里面輸出腳高/低電平的時間比(即是占空比)去獲得給一個用電器不同 的平均功率。 如圖所示,假設PWM 波形周期1ms(即1kHz),分辨率1000 級。那么需要一個信號時間 精度1ms/1000=1us 的信號源,即1MHz。所以說,PWM 的實現難點在于需要使用很高頻的 信號源,才能獲得快速與高精度。下面先由一個簡單的PWM 程序開始: const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { if((bright++) == 255) bright = 0; for(int i = 0; i < 255; i++) { if(i < bright) { digitalWrite(PWMPin, HIGH); delayMicroseconds(30); } else { digitalWrite(PWMPin, LOW); delayMicroseconds(30); } } } 這是一個軟件PWM 控制Arduino D13 引腳的例子。只需要一塊Arduino 即可測試此代碼。 程序解析:由for 循環可以看出,完成一個PWM 周期,共循環255 次。 假設bright=100 時候,在第0~100 次循環中,i 等于1 到99 均小于bright,于是輸出PWMPin 高電平; 然后第100 到255 次循環里面,i 等于100~255 大于bright,于是輸出PWMPin 低電平。無 論輸出高低電平都保持30us。 那么說,如果bright=100 的話,就有100 次循環是高電平,155 次循環是低電平。 如果忽略指令執行時間的話,這次的PWM 波形占空比為100/255,如果調整bright 的值, 就能改變接在D13 的LED 的亮度。 這里設置了每次for 循環之后,將bright 加一,并且當bright 加到255 時歸0。所以,我們 看到的最終效果就是LED 慢慢變亮,到頂之后然后突然暗回去重新變亮。 這是最基本的PWM 方法,也應該是大家想的比較多的想法。 然后介紹一個簡單一點的。思維風格完全不同。不過對于驅動一個LED 來說,效果與上面 的程序一樣。 const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { digitalWrite(PWMPin, HIGH); delayMicroseconds(bright*30); digitalWrite(PWMPin, LOW); delayMicroseconds((255 - bright)*30); if((bright++) == 255) bright = 0; } 可以看出,這段代碼少了一個For 循環。它先輸出一個高電平,然后維持(bright*30)us。然 后輸出一個低電平,維持時間((255-bright)*30)us。這樣兩次高低就能完成一個PWM 周期。 分辨率也是255。 三、多引腳PWM Arduino 本身已有PWM 引腳并且運行起來不占CPU 時間,所以軟件模擬一個引腳的PWM 完全沒有實用意義。我們軟件模擬的價值在于:他能將任意的數字IO 口變成PWM 引腳。 當一片Arduino 要同時控制多個PWM,并且沒有其他重任務的時候,就要用軟件PWM 了。 多引腳PWM 有一種下面的方式: int brights[14] = {0}; //定義14個引腳的初始亮度,可以隨意設置 int StartPWMPin = 0, EndPWMPin = 13; //設置D0~D13為PWM 引腳 int PWMResolution = 255; //設置PWM 占空比分辨率 void setup() { //定義所有IO 端輸出 for(int i = StartPWMPin; i <= EndPWMPin; i++) { pinMode(i, OUTPUT); //隨便定義個初始亮度,便于觀察 brights[ i ] = random(0, 255); } } void loop() { //這for 循環是為14盞燈做漸亮的。每次Arduino loop()循環, //brights 自增一次。直到brights=255時候,將brights 置零重新計數。 for(int i = StartPWMPin; i <= EndPWMPin; i++) { if((brights[i]++) == PWMResolution) brights[i] = 0; } for(int i = 0; i <= PWMResolution; i++) //i 是計數一個PWM 周期 { for(int j = StartPWMPin; j <= EndPWMPin; j++) //每個PWM 周期均遍歷所有引腳 { if(i < brights[j])\   所以我們要更改PWM 周期的話,我們將精度(代碼里面的變量:PWMResolution)降低就行,比如一般調整LED 亮度的話,我們用64 級精度就行。這樣速度就是2x32x64=4ms。就不會閃了。

    標簽: Arduino PWM 軟件模擬

    上傳時間: 2013-10-08

    上傳用戶:dingdingcandy

  • Arduino學習筆記4_Arduino軟件模擬PWM

    注:1.這篇文章斷斷續續寫了很久,畫圖技術也不精,難免錯漏,大家湊合看.有問題可以留言.      2.論壇排版把我的代碼縮進全弄沒了,大家將代碼粘貼到arduino編譯器,然后按ctrl+T重新格式化代碼格式即可看的舒服. 一、什么是PWM PWM 即Pulse Wavelength Modulation 脈寬調制波,通過調整輸出信號占空比,從而達到改 變輸出平均電壓的目的。相信Arduino 的PWM 大家都不陌生,在Arduino Duemilanove 2009 中,有6 個8 位精度PWM 引腳,分別是3, 5, 6, 9, 10, 11 腳。我們可以使用analogWrite()控 制PWM 腳輸出頻率大概在500Hz 的左右的PWM 調制波。分辨率8 位即2 的8 次方等于 256 級精度。但是有時候我們會覺得6 個PWM 引腳不夠用。比如我們做一個10 路燈調光, 就需要有10 個PWM 腳。Arduino Duemilanove 2009 有13 個數字輸出腳,如果它們都可以 PWM 的話,就能滿足條件了。于是本文介紹用軟件模擬PWM。 二、Arduino 軟件模擬PWM Arduino PWM 調壓原理:PWM 有好幾種方法。而Arduino 因為電源和實現難度限制,一般 使用周期恒定,占空比變化的單極性PWM。 通過調整一個周期里面輸出腳高/低電平的時間比(即是占空比)去獲得給一個用電器不同 的平均功率。 如圖所示,假設PWM 波形周期1ms(即1kHz),分辨率1000 級。那么需要一個信號時間 精度1ms/1000=1us 的信號源,即1MHz。所以說,PWM 的實現難點在于需要使用很高頻的 信號源,才能獲得快速與高精度。下面先由一個簡單的PWM 程序開始: const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { if((bright++) == 255) bright = 0; for(int i = 0; i < 255; i++) { if(i < bright) { digitalWrite(PWMPin, HIGH); delayMicroseconds(30); } else { digitalWrite(PWMPin, LOW); delayMicroseconds(30); } } } 這是一個軟件PWM 控制Arduino D13 引腳的例子。只需要一塊Arduino 即可測試此代碼。 程序解析:由for 循環可以看出,完成一個PWM 周期,共循環255 次。 假設bright=100 時候,在第0~100 次循環中,i 等于1 到99 均小于bright,于是輸出PWMPin 高電平; 然后第100 到255 次循環里面,i 等于100~255 大于bright,于是輸出PWMPin 低電平。無 論輸出高低電平都保持30us。 那么說,如果bright=100 的話,就有100 次循環是高電平,155 次循環是低電平。 如果忽略指令執行時間的話,這次的PWM 波形占空比為100/255,如果調整bright 的值, 就能改變接在D13 的LED 的亮度。 這里設置了每次for 循環之后,將bright 加一,并且當bright 加到255 時歸0。所以,我們 看到的最終效果就是LED 慢慢變亮,到頂之后然后突然暗回去重新變亮。 這是最基本的PWM 方法,也應該是大家想的比較多的想法。 然后介紹一個簡單一點的。思維風格完全不同。不過對于驅動一個LED 來說,效果與上面 的程序一樣。 const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { digitalWrite(PWMPin, HIGH); delayMicroseconds(bright*30); digitalWrite(PWMPin, LOW); delayMicroseconds((255 - bright)*30); if((bright++) == 255) bright = 0; } 可以看出,這段代碼少了一個For 循環。它先輸出一個高電平,然后維持(bright*30)us。然 后輸出一個低電平,維持時間((255-bright)*30)us。這樣兩次高低就能完成一個PWM 周期。 分辨率也是255。 三、多引腳PWM Arduino 本身已有PWM 引腳并且運行起來不占CPU 時間,所以軟件模擬一個引腳的PWM 完全沒有實用意義。我們軟件模擬的價值在于:他能將任意的數字IO 口變成PWM 引腳。 當一片Arduino 要同時控制多個PWM,并且沒有其他重任務的時候,就要用軟件PWM 了。 多引腳PWM 有一種下面的方式: int brights[14] = {0}; //定義14個引腳的初始亮度,可以隨意設置 int StartPWMPin = 0, EndPWMPin = 13; //設置D0~D13為PWM 引腳 int PWMResolution = 255; //設置PWM 占空比分辨率 void setup() { //定義所有IO 端輸出 for(int i = StartPWMPin; i <= EndPWMPin; i++) { pinMode(i, OUTPUT); //隨便定義個初始亮度,便于觀察 brights[ i ] = random(0, 255); } } void loop() { //這for 循環是為14盞燈做漸亮的。每次Arduino loop()循環, //brights 自增一次。直到brights=255時候,將brights 置零重新計數。 for(int i = StartPWMPin; i <= EndPWMPin; i++) { if((brights[i]++) == PWMResolution) brights[i] = 0; } for(int i = 0; i <= PWMResolution; i++) //i 是計數一個PWM 周期 { for(int j = StartPWMPin; j <= EndPWMPin; j++) //每個PWM 周期均遍歷所有引腳 { if(i < brights[j])\   所以我們要更改PWM 周期的話,我們將精度(代碼里面的變量:PWMResolution)降低就行,比如一般調整LED 亮度的話,我們用64 級精度就行。這樣速度就是2x32x64=4ms。就不會閃了。

    標簽: Arduino PWM 軟件模擬

    上傳時間: 2013-10-23

    上傳用戶:mqien

  • 題目:利用條件運算符的嵌套來完成此題:學習成績>=90分的同學用A表示

    題目:利用條件運算符的嵌套來完成此題:學習成績>=90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示。 1.程序分析:(a>b)?a:b這是條件運算符的基本例子。

    標簽: gt 90 運算符 嵌套

    上傳時間: 2015-01-08

    上傳用戶:lifangyuan12

主站蜘蛛池模板: 诸暨市| 民县| 呼玛县| 仲巴县| 青川县| 蓝山县| 凤山县| 阳高县| 汾西县| 石林| 神木县| 勃利县| 灵台县| 昌平区| 湟中县| 彭山县| 永昌县| 阆中市| 防城港市| 喀喇沁旗| 武宁县| 深泽县| 蛟河市| 建阳市| 平湖市| 墨脱县| 策勒县| 聂荣县| 平凉市| 孟州市| 界首市| 鄂托克前旗| 花莲市| 安乡县| 齐河县| 绥阳县| 宣汉县| 增城市| 潮安县| 儋州市| 洪湖市|