Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ВстраиваСмыС систСмы. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°Ρ… сСмСйства 68HC12/HCS12 с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ языка Π‘Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 84

Автор Π‘Ρ‚ΠΈΠ²Π΅Π½ Π‘Π°Ρ€Ρ€Π΅Ρ‚Ρ‚

Рис. 5.5. Π‘Ρ…Π΅ΠΌΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΊ МК 68HC12


Кнопки ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ собраны Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΡƒΡŽ схСму. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ряд ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΊΠ½ΠΎΠΏΠΊΠΈ 0, 1, 2 ΠΈ 3. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ряд β€” ΠΊΠ½ΠΎΠΏΠΊΠΈ 4, 5, 6, ΠΈ 7. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ восСмь ΠΊΠ½ΠΎΠΏΠΎΠΊ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ряд 3 ΠΈ ряд 4. Π’Ρ‹Π²ΠΎΠ΄Ρ‹ Π»Π΅Π²Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ² ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ряда соСдинСны ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· Π²Ρ‹Π²ΠΎΠ΄ΠΎΠ² ΠΏΠΎΡ€Ρ‚Π° PORTx (x β€” имя ΠΏΠΎΡ€Ρ‚Π° МК, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PORTA, PORTB ΠΈ Ρ‚.Π΄.). Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для обслуТивания Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Π»ΠΈΠ½ΠΈΠΉ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π»ΠΈΠ½ΠΈΠΈ ΠΏΠΎΡ€Ρ‚Π° PORTx[0]…..PORTx[3]. ВсС эти Π»ΠΈΠ½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π°.

Π’Ρ‹Π²ΠΎΠ΄Ρ‹ ΠΏΡ€Π°Π²Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ² ΠΊΠ½ΠΎΠΏΠΎΠΊ Ρ‚Π°ΠΊΠΆΠ΅ соСдинСны ΠΌΠ΅ΠΆΠ΄Ρƒ собой. Но ΠΏΡ€ΠΈ этом ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ столбСц. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ соСдинСниС Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΌ. Из рис. 5.5. ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π±Π»ΠΎΠΊ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠ· 16 клавиш ΠΈΠΌΠ΅Π΅Ρ‚ всСго восСмь Π»ΠΈΠ½ΠΈΠΉ связи для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ МК. А Ссли Π±Ρ‹ ΠΌΡ‹ использовали Ρ€Π°Π½Π΅Π΅ рассмотрСнныС схСмы соСдинСния, Ρ‚ΠΎ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ 16 ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΏΠΎΡ€Ρ‚Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ Π±Ρ‹ 16 Π»ΠΈΠ½ΠΈΠΉ связи. Π§Π΅Ρ‚Ρ‹Ρ€Π΅ Π²Ρ‹Π²ΠΎΠ΄Π° столбцов ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΠΊΠΎ Π²Ρ…ΠΎΠ΄Π°ΠΌ ΠΏΠΎΡ€Ρ‚Π° PORTx[4]…PORTx[7]. Π­Ρ‚ΠΈ Π»ΠΈΠ½ΠΈΠΈ ΠΏΠΎΡ€Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π²Π²ΠΎΠ΄Π°. КаТдая Π»ΠΈΠ½ΠΈΠΈ PORTx[4]…PORTx[7] снабТСна ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ ΠΊ Π½Π°ΠΏΡ€ΡΠΆΠ΅Π½ΠΈΡŽ питания рСзистором R = 10 кОм.

Если всС клавиши, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅, ΠΎΡ‚ΠΆΠ°Ρ‚Ρ‹, Ρ‚ΠΎ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Π²Ρ…ΠΎΠ΄Π΅ ΠΏΠΎΡ€Ρ‚Π° PORTx[4]…PORTx[7] формируСтся логичСская 1. МК ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ опроса ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ, какая клавиша Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π°ΠΆΠ°Ρ‚Π°. Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° сначала выставляСт Π½Π° линию PORTx[0] логичСский 0. Π’ΠΎΠ³Π΄Π° всС Π»Π΅Π²Ρ‹Π΅ Π²Ρ‹Π²ΠΎΠ΄Ρ‹ клавиш ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ряда ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ΄ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΠΎΠΌ логичСского 0. Если ΠΎΠ΄Π½Ρƒ ΠΈΠ· клавиш этого ряда Π½Π°ΠΆΠ°Ρ‚ΡŒ, Ρ‚ΠΎ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ сигнала Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π²Ρ…ΠΎΠ΄ΠΎΠ² PORTx[4]…PORTx[7] измСнится с 0 Π½Π° 1. НапримСр, Ссли Π½Π°ΠΆΠ°Π»ΠΈ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Β«0Β», Ρ‚ΠΎ Π½Π° Π²Ρ…ΠΎΠ΄Π΅ PORTx[4] установится Π½ΠΈΠ·ΠΊΠΈΠΉ логичСский ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, Π° всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Ρ‹ PORTx[5]…PORTx[7] останутся Π² 1. Или, Ссли Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Β«2Β», Ρ‚ΠΎ Π² 0 установится Π²Ρ‹Π²ΠΎΠ΄ PORTx[6], Π° Π»ΠΈΠ½ΠΈΠΈ PORTx[4], PORTx[5] ΠΈ PORTx[7] Π±ΡƒΠ΄ΡƒΡ‚ Π² 1. Π’Π°ΠΊΠΈ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² состояниС Π»ΠΈΠ½ΠΈΠΉ PORTx[4]…PORTx[7] ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ² 0 Π² ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ разрядС, смоТСт ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, какая клавиша Π½Π°ΠΆΠ°Ρ‚Π°.


ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° опроса ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ состояниС клавиш ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ряда, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ выставляя логичСский 0 Π½Π° Π²Ρ‹Π²ΠΎΠ΄Ρ‹ PORTx[0]…PORTx[3]. На рис. 5.5 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ ΠΊΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π° линиях ΠΏΠΎΡ€Ρ‚Π° ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· клавиш. Π­Ρ‚ΠΈ ΠΊΠΎΠ΄Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ опроса для привСдСния ΠΊΠΎΠ΄Π° Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавиши ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· стандартных прСдставлСний, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊ ΠΊΠΎΠ΄Ρƒ ACSII.

РассмотрСнная Π½Π°ΠΌΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈΠ½Ρ‹Π΅ символы Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ°Ρ…, Π² соотвСтствиС с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² устройствС. НапримСр, подобная ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для управлСния насосом Π±Π΅Π½Π·ΠΎΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ. Π’ΠΎΠ³Π΄Π° клавиши ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ отпускаСмого Π±Π΅Π½Π·ΠΈΠ½Π°, Ρ„ΠΎΡ€ΠΌΡƒ ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ° ΠΈ Ρ‚.Π΄. ΠœΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ, какая клавиша Π½Π°ΠΆΠ°Ρ‚Π°, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

Рис. 5.6. Π‘Π»ΠΎΠΊ-схСма Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° опроса ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹


На рис. 5.6 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π±Π»ΠΎΠΊ-схСма Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° опроса ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠ· 16 клавиш. Π­Ρ‚ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ состоит ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сначала устанавливаСтся Π² 0 ΠΎΠ΄Π½Π° ΠΈΠ· Π»ΠΈΠ½ΠΈΠΉ PORTx[0]…PORTx[3], Π° Π·Π°Ρ‚Π΅ΠΌ контролируСтся состояниС Π»ΠΈΠ½ΠΈΠΉ PORTx[4]…PORTx[7]. Если Π½Π° Π²Ρ…ΠΎΠ΄Π°Ρ… Π»ΠΈΠ½ΠΈΠΉ PORTx[4]…PORTx[7] логичСскиС 1, Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ° Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ряда Π½Π΅ Π½Π°ΠΆΠ°Ρ‚Π°, ΠΈ слСдуСт ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ опросу ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ряда. Если Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· Π»ΠΈΠ½ΠΈΠΉ PORTx[4]…PORTx[7] ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π» логичСского 0, Ρ‚ΠΎ ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ Π»ΠΈΠ½ΠΈΠΈ ΠΈ ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ряда ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавиши. Для этого ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ рис. 5.5. ΠœΡ‹ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΈ лишь ΠΎΠ±Ρ‰ΡƒΡŽ структуру Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. Π”Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Π΅Π΅ рассмотрСниС послСдуСт послС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΈ описания Π–Πš дисплСя.

/*-----------------------------------------------------------*/

/* filename: keypad.c                                        */

/* МAIN PROGRAМ: Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π°Π½Π°Π»ΠΈΠ·             */

/*состояния ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠ· 16 клавиш                */

/*Для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ использован PORTB               */

/*Разряды PORTB[0]…PORTB[3] Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ Π»ΠΈΠ½ΠΈΠΈ рядов         */

/*разряды PORTB[4]…PORTB[7]ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для считывания ΠΊΠΎΠ΄ΠΎΠ² */

/*ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ                                                    */

/*-----------------------------------------------------------*/

/*ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹*/

#include <912b32.h>

#include <stdio.h>

#include <math.h>


/*ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ*/

char keypad(unsigned char keypress, unsigned char row);

char which_key(unsigned char keypress); /*Function to select key*/


void main{void) {

 unsigned char keypress;

 /*Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄ΠΎΠ² Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ рядов ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹*/

 unsigned char first = 0xFE; /*ΠΊΠΎΠ΄ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ряда*/

 unsigned char second = 0xFD; /*ΠΊΠΎΠ΄ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ряда*/

 unsigned char third = 0xFB; /*ΠΊΠΎΠ΄ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ ряда*/

 unsigned char fourth = 0xF7; /*ΠΊΠΎΠ΄ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠ³ΠΎ ряда*/

 DDRB = 0x0f; /*Π»ΠΈΠ½ΠΈΠΈ 0…3 Π½Π° Π²Ρ‹Π²ΠΎΠ΄, Π»ΠΈΠ½ΠΈΠΈ 4…7 Π½Π° Π²Π²ΠΎΠ΄*/

 while(1) {

  PORTB = 0xFE;

  keypress = PORTB;

  key = keypad(keypress, first);

  PORTB = 0xFD;

  keypress = PORTB;

  key = keypad(keypress, second);

  PORTB = 0xFB;

  keypress = PORTB;

  key = keypad(keypress, third);

  PORTB = 0xF7;

  keypress = PORTB;

  key = keypad(keypress, fourth);

 }

}


/*------------------------------------------------------------------------*/

/*Ѐункция keypad опрСдСляСт, Π±Ρ‹Π»Π° Π»ΠΈ Π½Π°ΠΆΠ°Ρ‚Π° какая-Π»ΠΈΠ±ΠΎ клавиша.           */

/*Ѐункция сравниваСт ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ€Ρ‚Π° PORTB с Ρ‚Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ,    */

/*ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π΄Π°Π½ΠΎ Π½Π° ΠΏΠΎΡ€Ρ‚ PORTB. Если ΠΎΠ½ΠΈ Ρ€Π°Π²Π½Ρ‹, Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄Π½Π° клавиша Π² */

/*ряду Π½Π΅ Π½Π°ΠΆΠ°Ρ‚Π°                                                          */

/*------------------------------------------------------------------------*/

char keypad(unsigned char keypress, unsigned char row) {

 char key1;

 if (keypress != row) { /*какая-Ρ‚ΠΎ клавиша Π½Π°ΠΆΠ°Ρ‚Π°*/

  key1 = which_key(keypress); /*ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ*/

  putchars(key1); /*ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ символ Π½Π° дисплСй*/

 } else if(keypress == row) { /*Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· клавиш Π½Π΅ Π½Π°ΠΆΠ°Ρ‚Π°*/

  key1 = 'Z';

 }

 return (key1);

}


/*------------------------------------------------------------------------*/

/* Ѐункция char which_key опрСдСляСт ΠΊΠΎΠ΄ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавиши ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° */

/*Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ                                                      */

/*------------------------------------------------------------------------*/

char witch_key(unsigned char keypress) {

 char key;

 switch(keypress) /*распознаваниС ΠΊΠΎΠ΄Π° клавиши*/

 {

 case 0xEE:

  key = '0'; /*Π½Π°ΠΆΠ°Ρ‚Π° клавиша "0"*/

  break;

 case 0xDE:

  key = '1'; /*Π½Π°ΠΆΠ°Ρ‚Π° клавиша "1"*/

  break;

 case 0xBE:

  key = '2'; /*Π½Π°ΠΆΠ°Ρ‚Π° клавиша "2"*/

  break;

 case 0x7E:

  key = '3'; /*Π½Π°ΠΆΠ°Ρ‚Π° клавиша "3"*/

  break;

 case 0xED:

  key = '4'; /*Π½Π°ΠΆΠ°Ρ‚Π° клавиша "4"*/

  break;

 case 0xDD:

  key = '5'; /*Π½Π°ΠΆΠ°Ρ‚Π° клавиша "5"*/

  break;

 case 0xBD:

  key = '6'; /*Π½Π°ΠΆΠ°Ρ‚Π° клавиша "6"*/

  break;

 case 0x7D:

  key = '7'; /*Π½Π°ΠΆΠ°Ρ‚Π° клавиша "7"*/

  break;

 case 0xEB:

  key = '8'; /*Π½Π°ΠΆΠ°Ρ‚Π° клавиша "8"*/

  break;

 case 0xDB:

  key = '9'; /*Π½Π°ΠΆΠ°Ρ‚Π° клавиша "9"*/

  break;

 case 0xBB:

  key = 'A'; /*Π½Π°ΠΆΠ°Ρ‚Π° клавиша "A"*/

  break;

 case 0x7B:

  key = 'B'; /*Π½Π°ΠΆΠ°Ρ‚Π° клавиша "B"*/

  break;

 case 0xE7:

  key = 'C'; /*Π½Π°ΠΆΠ°Ρ‚Π° клавиша "C"*/

  break;

 case 0xD7:

  key = 'D'; /*Π½Π°ΠΆΠ°Ρ‚Π° клавиша "D"*/

  break;

 case 0xB7:

  key = 'E'; /*Π½Π°ΠΆΠ°Ρ‚Π° клавиша "E"*/

  break;

 case 0x77:

  key = 'F'; /*Π½Π°ΠΆΠ°Ρ‚Π° клавиша "F"*/

  break;

 default:

  key = 'Z';

 } /*ΠΊΠΎΠ½Π΅Ρ† распознаваниС ΠΊΠΎΠ΄Π° клавиши*/

 return(key);

}

/*----------------------------------------------------------*/

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π΅ являСтся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π½Π΅ΠΌ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ элСмСнты Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ Π΄Ρ€Π΅Π±Π΅Π·Π³Π° ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ², отсутствуСт тСкст Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° символов Π½Π° Π–Πš дисплСй. ΠœΡ‹ исправим эти нСдостатки нСсколько ΠΏΠΎΠ·ΠΆΠ΅, Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 5.6.

5.3. Устройства ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ†ΠΈΠΈ: свСтодиоды, сСмисСгмСнтныС ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ логичСского Π²Ρ‹Ρ…ΠΎΠ΄Π° с трСмя состояниями

Π’ этом ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π΅ ΠΌΡ‹ научимся ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ свСтодиодных ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΊ Π²Ρ‹Ρ…ΠΎΠ΄Π°ΠΌ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°. ΠžΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Ρ€Π°Π½Π΅Π΅ свСдСниях ΠΎΠ± элСктричСских характСристиках свСтодиода Π²ΠΈΠ΄ΠΈΠΌΠΎΠ³ΠΎ спСктра излучСния, ΠΌΡ‹ рассмотрим, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊ МК Π»ΠΈΠ½Π΅ΠΉΠΊΡƒ ΠΈΠ· восьми свСтодиодов ΠΈ сСмисСгмСнтный ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€. Π”Π°Π»Π΅Π΅ ΠΌΡ‹ обсудим, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ сопряТСния с сСмисСгмСнтным ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ². Π—Π°Π²Π΅Ρ€ΡˆΠΈΠΌ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„ рассмотрСниСм ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ схСмы ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ†ΠΈΠΈ состояния Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… для микропроцСссорной Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… логичСских Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² с трСмя состояниями.