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

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

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

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


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

/* Ѐункция initialize_lcd ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ установку Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² дисплСя */

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

void initialize_lcd(void) {

 delay_5ms();

 delay_5ms();

 delay_5ms(); //Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° 15 мс

 putcommands(0x38); //ΠΊΠΎΠΌΠ°Π½Π΄Π° установки Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° интСрфСйса ΠΎΠ±ΠΌΠ΅Π½Π°

 delay_5ms();

 putcommands(0x38);

 delay_l00us();

 putcommands(0x38);

 putcommands(0x38) ;

 putcommands(0x0C);

 putcommands(0x01); //ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ дисплСй

 putcommands(0x06); //ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ Π²Π²ΠΎΠ΄Π° с автоматичСским

                    //ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ адрСса

                    //символа Π½Π° 1

 putcommands(0x0E); //Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ дисплСй, Ρ€Π΅ΠΆΠΈΠΌ курсора ΠΌΠΈΠ³Π°ΡŽΡ‰ΠΈΠΉ

 putcommands(0x02); //ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ курсор Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠ΅ знакомСсто

}


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

/* Ѐункция putchars ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ запись ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° символа Π² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ */

/*дисплСя                                                              */

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

void putchars(unsigned char с) {

 DDRP = 0xFF; //ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΡ€Ρ‚ PORT P Π½Π° Π²Ρ‹Π²ΠΎΠ΄

 DDRDLC = DDRDLC | 0x0C; //ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ разряды 2 ΠΈ 3 ΠΏΠΎΡ€Ρ‚Π° PORT DLC Π½Π°

                         //Π²Ρ‹Π²ΠΎΠ΄

 PORTP = с; //Π’Ρ‹Π΄Π°Ρ‚ΡŒ Π² ΠΏΠΎΡ€Ρ‚ PORT P ΠΊΠΎΠ΄ символа с

 PORTDLC = PORTDLC | 0x08; //ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ линию RS Π² 1

 PORTDLC = PORTDLC | 0x04; //ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ линию E Π² 1

 PORTDLC = 0; //ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ E ΠΈ RS Π² 0

 delay_5ms(); //Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° 5 мс

}


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

/*Ѐункция putcommands ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ запись ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ */

/*дисплСя                                                                */

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

void putcommands(unsigned char d) {

 DDRP = 0xFF; //ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΡ€Ρ‚ PORT P Π½Π° Π²Ρ‹Π²ΠΎΠ΄

 DDRDLC = DDRDLC|0x0C; //ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ разряды 2 ΠΈ 3 ΠΏΠΎΡ€Ρ‚Π° PORT DLC Π½Π°

                       //Π²Ρ‹Π²ΠΎΠ΄

 PORTDLC = PORTDLC & 0xF7; //ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ линию RS Π² 0

 PORTP = d; //Π’Ρ‹Π΄Π°Ρ‚ΡŒ Π² ΠΏΠΎΡ€Ρ‚ PORT P ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ d

 PORTDLC = PORTDLC | 0x04; //ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ линию E Π² 1

 PORTDLC = 0; //ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ E ΠΈ RS Π² 0

 delay_5ms(); //Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° 5 мс

}


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

/*Ѐункция lcdprint ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ запись строки символов Π² ΠžΠ—Π£ дисплСя */

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

void lcdprint(char *string) {

 putcommands(0x02); //ΠΊΠΎΠΌΠ°Π½Π΄Π° установки адрСса Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ строки

 while(*(string) != '\0') //вывСсти ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠ΄Π° символов

 { //ΠΈΠ· памяти МК

  putchars(*string);

  string++;

 }

}


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

/* Ѐункция delay_5ms Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ 5 мс */

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

void delay_5ms(void) {

 int i;

 for(i=0; i<50; i++) {

  delay_l00us();

 }

}


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

/* Ѐункция void delay_100us Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ 100 мкс */

/*Частота систСмной ΡˆΠΈΠ½Ρ‹ Ρ€Π°Π²Π½Π° 8 ΠœΠ“Ρ†                   */

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

void delay_100us(void) {

 int i;

 for(i=0; i<50; i++) {

  asm("nop"); //ΠΊΠΎΠΌΠ°Π½Π΄Π° nop Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 2 Ρ†ΠΈΠΊΠ»Π°

 }

}

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

5.6.3 БопряТСниС МК с графичСским Π–Πš дисплССм

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ рассмотрим Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠΉ графичСский Π–Πš дисплСй. БлСдуя Π»ΠΎΠ³ΠΈΠΊΠ΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π°, ΠΌΡ‹ сначала обсудим ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ модСль графичСского дисплСя, Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ·ΡƒΡ‡ΠΈΠΌ элСктричСскиС характСристики ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±ΠΌΠ΅Π½Π° встроСнного ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° управлСния этим дисплССм, Π² Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ β€” элСмСнты ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· МК Π² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ дисплСя. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π° ΠΌΡ‹ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠΌ Π’Π°ΠΌ Π½Π°Π±ΠΎΡ€ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… для обслуТивания графичСского дисплСя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠŸΡ€ΠΈ рассмотрСнии ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ модСль дисплСя AND1391ST. Однако ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ знания Π’Ρ‹ смоТСтС Π»Π΅Π³ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ распространСнным модСлям дисплССв. Π’ Π³Π»Π°Π²Π΅ 7 ΠΌΡ‹ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠΌ Π’Π°ΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с графичСским дисплССм (Ρ€Π°Π·Π΄. 7.).

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Π°Ρ модСль. AND1391ST β€” Π–Πš дисплСй с Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅ΠΉ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ экрана 128Γ—128 пиксСлов. ВстроСнный ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ управлСния обСспСчиваСт Ρ€Π°Π±ΠΎΡ‚Ρƒ дисплСя ΠΊΠ°ΠΊ Π² символьном, Ρ‚Π°ΠΊ ΠΈ Π² графичСском Ρ€Π΅ΠΆΠΈΠΌΠ΅ отобраТСния. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ сочСтаниС этих Π΄Π²ΡƒΡ… Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ. ΠŸΡ€ΠΈ использовании символьного Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΏΠΎΠ»Π΅ экрана дисплСя дСлится Π½Π° 16 строк ΠΏΠΎ 16 символов Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС (рис. 5.14). Для отобраТСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа прСдоставляСтся ΠΏΠΎΠ»Π΅ знакомСста Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 8Γ—8 Ρ‚ΠΎΡ‡Π΅ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 5.15. Π’ качСствС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован Ρ€Π΅ΠΆΠΈΠΌ символьного отобраТСния, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠ»Π΅ экрана дисплСя дСлится Π½Π° 16 строк ΠΏΠΎ 21 символу Π² строкС. Π’ этом случаС ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ знакомСсто Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· 6Γ—8 Ρ‚ΠΎΡ‡Π΅ΠΊ. Π Π°Π·ΠΌΠ΅Ρ€ знакомСста задаСтся ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ сигнала Π½Π° Π²Ρ…ΠΎΠ΄Π΅ FS ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° дисплСя. Набор ΠΊΠΎΠ΄ΠΎΠ² для формирования ΠΎΠ±Ρ€Π°Π·Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа (Π·Π½Π°ΠΊΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€) хранится Π² постоянной памяти ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° дисплСя.

Рис. 5.14. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Π°Ρ модСль графичСского Π–Πš дисплСя Π² символьном Ρ€Π΅ΠΆΠΈΠΌΠ΅


ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ дисплСя воспроизводит Π½Π° экранС ΠΎΠ±Ρ€Π°Π·Ρ‹ символов, ΠΊΠΎΠ΄Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… хранятся Π² ячСйках ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°. ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ знакомСсту Π½Π° экранС дисплСя поставлСна Π² соотвСтствиС ячСйка ΠžΠ—Π£ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ адрСсом. Π’ процСссС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° дисплСя МК записываСт адрСс Π½Π°Ρ‡Π°Π»Π° ΠžΠ—Π£ экрана. На рис. 5.14 этот адрСс Ρ€Π°Π²Π΅Π½ $1000. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ адрСса для ячССк символов Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ посрСдством ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π½Π° рис. 5.14 ΠΊΠΎΠ΄ΠΎΠ² смСщСния. Π’ процСссС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΆΠ΅ указываСтся число символов Π² строкС. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ€Π΅ΠΆΠΈΠΌ отобраТСния с 16 символами Π² строкС. ΠŸΡ€ΠΈ этом Ρ€Π°Π·ΠΌΠ΅Ρ€ знакомСста для символа (8Γ—8) ΡƒΠΆΠ΅ Π²Ρ‹Π±Ρ€Π°Π½ Π½Π° Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅: Π²Ρ…ΠΎΠ΄ FS ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° присоСдинСн ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ Π²Ρ‹Π²ΠΎΠ΄Ρƒ источника питания.

ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ ΠΏΠΎΠ»ΡƒΠ±Π°ΠΉΡ‚ младший ΠΏΠΎΠ»ΡƒΠ±Π°ΠΉΡ‚ 0 1 2 3 4 5 6 7 8 9 A B C D E F 0   ! " # $ % & ' ( ) * + , - . / 1 0 1 2 3 4 5 6 7 8 9 : ; < = > ? 2 @ A B C D E F G H I J K L M N O 3 P Q R S T U V W X Y Z [ \ ] ^ _ 4 ` a b c d e f g h i j k l m n o 5 p q r s t u v w x y z { | } ~  

Рис. 5.15. Π’Π°Π±Π»ΠΈΡ†Π° ΠΊΠΎΠ΄ΠΎΠ² символов для графичСского Π–Πš дисплСя