[Introduction]
Microcontroller thev naus laus zis yog ib qho tseem ceeb hauv kev siv thev naus laus zis hauv kev lag luam niaj hnub automation, hluav taws xob, hluav taws xob engineering, thiab Internet ntawm Yam (IoT). Raws li peb lub neej dhau los ua neeg ntse, microcontroller thev naus laus zis tau nkag mus rau txhua yam ntawm peb lub neej niaj hnub, xws li hauv cov tshuab ua mov ntse, cov neeg hais lus ntse, thiab ntau dua.
Nrog rau qhov no nyob rau hauv lub siab, "Rov qab 51 Microcontroller" series ntawm cov khoom aims los pab beginners pib nrog microcontroller technology. Peb yuav pib nrog txoj haujlwm yooj yim tshaj plaws -tig rau ib qho LED- thiab maj mam nce mus rau kev siv cov qauv xws li khawm tswj, LCD1602 zaub, DS18B20 thiab DS1302 kub sensors, thiab kev sib txuas lus ntawm ob lub microcontrollers. Peb tseem yuav npog cov txheej txheem kev sib txuas lus kho vajtse xws li UART, I²C, thiab SPI. Los ntawm kev sib txuas cov ntsiab lus no nrog C programming cov tswv yim, peb yuav siv tiag -cov haujlwm engineering hauv ntiaj teb los piav qhia txog cov txheej txheem kev ua haujlwm, ua rau koj yooj yim siv C pointers thiab cov qauv kom ua tiav qhov kev zov me nyuam.
Tam sim no, cia peb rov qab mus rau lub ntsiab lus tseem ceeb: siv 51 microcontroller los tswj lub LED thiab tsim lub teeb ua pa.
[Yuav ua li cas ua pa taws ua haujlwm]
Cia peb xub saib seb qhov ua pa ntawm lub teeb ua haujlwm li cas.
Lub teeb ua pa maj mam ci thiab tom qab ntawd maj mam dim, rov ua lub voj voog no zoo li ua pa. Txawm li cas los xij, txij li lub microcontroller tus pins tsuas tuaj yeem tso tawm ib qho 1 (on) lossis 0 (tawm), yuav ua li cas hloov pauv cov nyhuv yuav ua tiav?
Qhov no yog vim qhov tsis pom kev ntawm peb lub qhov muag. Thaum peb saib ib yam dab tsi, cov duab tsim los ntawm peb ob lub qhov muag txuas ntxiv rau 0.04 vib nas this (cov duab no tau pom hauv online).
Yog tias peb xam raws li 0.04 vib nas this, qhov ntawd sib npaug 40 ms. Yog li ntawd, thaum lub LED qhib thiab tawm rau 20 ms txhua, nws tshwm sim rau tib neeg lub qhov muag zoo li nws tau taws tas li.

Puas yog cov nyhuv ntawm LED flashing rau 20 ms thiab tawm rau 20 ms tib yam li nws nyob rau txhua lub sijhawm?
Haha, nws yeej txawv. Thaum lub teeb hloov pauv ntawm rau thiab tawm txhua 20 milliseconds, cov nyhuv peb pom yog dimmer dua li thaum nws nyob twj ywm tsis tu ncua. Yog tias peb xav tias qhov ci ntsa iab ntawm lub teeb tsis tu ncua yog 100%, ces qhov ci ntawm lub teeb uas hloov pauv ntawm rau thiab tawm txhua 20 milliseconds yog 50%. Raws li qhov no, peb tuaj yeem kho lub teeb ci LED.

Ntawm no, peb tuaj yeem kho qhov ci ntawm LED (los ntawm kev teeb tsa lub sijhawm ntawm qib siab hauv 40ms voj voog). Qhov no yog lub hauv paus ntsiab lus tom qab lub qhov dej zoo -paub PWM (Pulse Width Modulation) txoj kev tswj kev ci ntsa iab, thiab teeb tsa lub sijhawm ntawm qib siab yog sib npaug rau kev kho lub luag haujlwm lub voj voog (piv txwv li, lub sijhawm ntawm qib siab muab faib los ntawm tag nrho lub voj voog: 20/40=50%).
Ntawm no, qhov tseem ceeb tshaj plaws yog lub luag haujlwm lub voj voog. Piv txwv li, yog tias lub sijhawm yog 20 ms, nrog rau LED hloov ntawm 10 ms rau thiab 10 ms tawm, qhov pom qhov ci tseem yog 50% (piv txwv li, lub voj voog ua haujlwm yog 10 / 20=50%).
Tom ntej no, cia saib yuav ua li cas qhov no yog siv nyob rau hauv qhov kev pab cuam.
[Kev Ua Haujlwm]
Tig rau ntawm LED
Ua ntej, cia peb pib los ntawm kev qhib lub LED, thiab tom qab ntawd peb mam li maj mam siv lub teeb ua pa. Lub hardware peb yuav siv yog raws li nram no:
| Pawg Neeg Saib Xyuas Kev Txhim Kho | ZeroOne Microcontroller Training Development Board |
|---|---|
| Microcontroller Qauv | STC89C52 |
| LED interface | Pin P4^4 |

Los ntawm schematic, peb tuaj yeem pom tias LED txuas nrog tus pin P4^4 ntawm microcontroller. Thaum lub microcontroller tso tawm 1, lub LED tig rau; Thaum nws outputs 0, LED yuav tua. Yog li ntawd, qhov kev pab cuam qhib lub LED yog qhov yooj yim heev, raws li qhia hauv qab no:

Qhov kev pab cuam qhib lub LED yog qhov yooj yim heev; Kuv paub tseeb tias txhua tus paub yuav ua li cas.
Kho LED Brightness
Tom ntej no, peb yuav siv lub luag haujlwm uas tso cai rau peb kho qhov ci ntsa iab (piv txwv li, kho lub luag haujlwm lub voj voog), raws li hauv qab no:

Txhais qhov sib txawv zoo li qub 'duty_cycle' los khaws lub luag haujlwm lub voj voog. Thaum 'chij' yog 1, lub luag haujlwm voj voog maj mam nce mus rau 255, tom qab ntawd teeb tsa 'chij' rau 0, thiab 'duty_cycle' maj mam txo los ntawm 255 mus rau 0. Rov ua dua lub voj voog no.
Haha, ntawm no, tej zaum koj yuav xav tias lub teeb ua pa twb ua haujlwm, tab sis nws tsis yog. Yog tias koj tsis ntseeg kuv, sim cov cai saum toj no koj tus kheej.
Yog li qhov teeb meem yog qhov twg?
Qhov teeb meem nyob hauv peb txoj kev hu ncaj qha rau qhov ci ntsa iab - teeb tsa muaj nuj nqi 'set_led_luminance()`. Qhov kev ua haujlwm no siv sijhawm 40 ms los ua kom tiav ib lub voj voog, txhais tau tias lub voj voog ua haujlwm tsis tuaj yeem hloov pauv thaum lub sijhawm 40 ms; txwv tsis pub, qhov kev hloov ci ci yuav tsis ua haujlwm. Cia wb mus saib lwm qhov 'ua pa_led' muaj nuj nqi. Tom qab txhua qhov hu rau 'set_led_luminance()' los teeb tsa lub luag haujlwm voj voog, nws tam sim ntawd hloov qhov 'duty_cycle' tus nqi yam tsis tau tos 40 ms.
Lub sijhawm no, peb yuav tsum tau ntxiv lub sijhawm software los hloov kho 'duty_cycle' tus nqi tom qab 40 ms tau dhau mus. Qhov kev hloov kho yog raws li hauv qab no:

Nco tseg: Lub sijhawm timer tsuas yog xav tau ntau dua 40 ms (txhais tau tias tus nqi ntawm 's_breathCounter' yuav tsum siab dua 255), tab sis nws yog qhov zoo tshaj los muab nws tso rau ntau lub voj voog. Piv txwv li, yog tias peb lub voj voog yog 255 (piv txwv li, 256 qhov tseem ceeb ntawm 0 txog 255), peb tuaj yeem teem nws rau ob zaug tus nqi: 256 * 2 - 1=511 (ie, 512 qhov tseem ceeb ntawm 0 txog 511).
Thiab nyob ntawd koj muaj nws -peb lub teeb ua pa ua tiav! Tsis yog qhov yooj yim? (*  ̄︶ ̄)
Tom ntej no yog hnub no cov nyiaj tshwj xeeb.
Txawm hais tias peb tau ua tiav cov txiaj ntsig ua pa, cov cai tsis yog qhov tseeb lossis zoo nkauj txaus - nws siv ntau cov lus yog thiab lwm yam. Cia peb saib seb peb puas tuaj yeem ua kom yooj yim ntxiv.
Ua ntej, cia peb ua kom yooj yim rau ntu no ntawm set_led_luminance() muaj nuj nqi, raws li pom hauv daim duab hauv qab no.

Ua ntej peb ua kom yooj yim qhov no, cia peb npog cov lus qhia ceev txog C: kev ua haujlwm me ntsis THIAB.

Los ntawm qhov no, peb paub tias txawm nws yog 1 lossis 0, ua haujlwm me ntsis THIAB ua haujlwm nrog 0 ua rau 0.
Txawm hais tias nws yog 1 lossis 0, ua haujlwm me ntsis THIAB ua haujlwm nrog 1 qhov tshwm sim hauv tus nqi qub.
Kom yooj yim, peb siv hexadecimal cim (ua ntej nrog "0x"); Piv txwv li, 0xff sib raug rau 255 hauv decimal. Yog li ntawd,
Thaum tus lej tsawg dua lossis sib npaug rau 0xff yog ANDed nrog 0xff, qhov tshwm sim yog tus lej nws tus kheej, raws li qhia hauv qab no

Yuav ua li cas yog tias koj ua ib qho me ntsis THIAB ua haujlwm ntawm tus lej ntau dua 0xff thiab 0xff?

Qhov tshwm sim yog qhov seem thaum tus lej no muab faib los ntawm (0xff + 1) (ie, qhov tshwm sim tseem nyob nruab nrab ntawm 0 thiab 0xff).
Nrog rau qhov kev ua haujlwm bitwise THIAB, cov cai saum toj no tuaj yeem yooj yim rau

Txoj kev no, tus nqi ntawm s_Counter yuav ib txwm nyob hauv thaj tsam ntawm 0x00 txog 0xff.
Ib yam li ntawd, cov software timer hauv breath_led muaj nuj nqi saum toj no kuj tseem tuaj yeem ua kom yooj yim raws li hauv qab no:

Hauv kab 3, 0x1ff yog 511 hauv decimal. Qhov xwm txheej muaj tseeb thaum tus nqi ntawm s_breathCounter yog (0x1ff+1), lossis 512, vim tias 512 & 0x1ff=0. Lub cim exclamation ua ntej nws qhia me ntsis tsis ua haujlwm (kom meej, qhov xwm txheej tau ntsib thaum tus nqi ntawm `s_breathCounter` yog ntau qhov kev cia siab rau qhov no 5.12; cov lus piav qhia no meej meej-thov xav txog nws). Yog tias qhov xwm txheej tau ua tiav, lub voj voog lub luag haujlwm pib nce lossis txo.
Tab sis tsis yog lub luag haujlwm lub voj voog ntawm 0 txog 255? Vim li cas kab 5 kuj dhau los ua 0x1ff (511)? Tsis txhob txhawj- saib kab 8. Peb rho tawm 0xff dua, yog li lub luag haujlwm lub voj voog tseem nyob ntawm 0 txog 255.
Kab 7–10 txhais tau tias: Thaum 'duty_cycle> (0xff)`, piv txwv li, 256–511, rho tawm 0xff yog sib npaug los ntawm 1 txog 255, yog li qhov ci ntsa iab maj mam nce.
Thaum luag hauj lwm_cycle<= 0xff, the duty_cycle increases from 0 to 255, while the set brightness is 255 - duty_cycle. This effectively decreases the brightness from 255 to 0, causing the light to gradually dim. This achieves the breathing light effect.
Haha, koj puas xav tias peb qhov kev yooj yim dhau lawm?
Tsis yog, tsis muaj
Qhov tseeb, kab 7 txog 10 tuaj yeem yooj yim dua ntxiv. Qhov no yog qhov uas tus nqi tiag tiag muaj nuj nqi los ua ke.
Dab tsi? Vim li cas thiaj siv tus nqi tiag tiag?
Saib kab 10: 0xff - duty_cycle yog sib npaug rau duty_cycle - 0xff thiab tom qab ntawd muab tus nqi kiag li. Okay, ntawm no yog qhov yooj yim code:
Lub macro muaj nuj nqi rau kev noj tus nqi tiag yog raws li hauv qab no
Thaum kawg, kuv tau suav tag nrho cov lej yooj yim hauv qab no

Koj xav li cas? Tsis yog nws yooj yim? (*  ̄︶ ̄)




