Выбрать главу

     };

}

Использование ЖК-индикатора МТ10Т7-7

Микроконтроллер: AT90S8535-8PI.

Кварцевый резонатор: 4 МГц.

Подсоединение индикатора к порту Port С:

Текст программы:

void delay(void)

{

asm("del1: ldi r24,0x01");

asm("dclass="underline" dec r24");

asm('brne dl");

asm("dec r25");

asm("brne del1");

}

void STR0B_WR1(void)

{

asm("sbi 0x18,5");

delay();

asm("cbi 0x18,5");

}

void STR0B_ADR(void)

{

   asm("cbi 0x18,4"):

   delay();

   asm("sbi 0x18,5");

   delay();

   asm("cbi 0x18,5");

   delay();

   asm("sbi 0x18,4");

}

void Set_Bus(unsigned char A)

{

   If ((A&0x01)==0x01) asm("sbi 0x18,0");

                             else asm("cbi 0x18,0");

   If ((A&0x02)==0x02) asmC'sbi 0x18,1");

                             else asm("cbi 0x18,1");

   if ((А&0х04)==0х04) asm("sbi 0x18,2");

                             else asm("cbi 0x18,2");

   if ((А&0х08)==0х0в) asm("sbi 0x18,3");

                             else asmC'cbi 0x18,3");

}

void Init_LCD(void)

{

unsigned char temp;

   Set_Bus(0x0f);

   STR0B_ADR();

   Set_Bus(0x01);

   STR0B_WR1();

   Set_Bus(0);

   STR0B_ADR();

   for (temp=0;temp<20;temp++) STR0B_WR1();

}

unsigned char code7(unsigned char code)

{

   switch(code)

       {

            case 0: return 0xee;

            case 1: return 0x60;

            case 2: return 0x2f;

            case 3: return 0x6d;

            case 4: return 0xe1;

            case 5: return 0xcd;

            case 6: return 0xcf;

            case 7: return 0x68;

            case 8: return 0xef;

            case 9: return 0xed;

            case 10: return 0;

       }

return 0;

}

void out(unsigned char num)

{

   num=code7(num);

   Set_Bus(num);

   STR0B_WR1();

   delay0;

   asm("swap %num"); Set_Bus(num);

   STR0B_WR1();

   delay();

}

void display(unsigned int N, unsigned int N1, unsigned int N2)

{// NN N1N1N1N1 N2N2N2N2

   Set_Bus(0);

   STR0B_ADR();

   out((unsigned int)(N/10)-10*(unsigned int)(N/100));

   out(N-10*(unsigned int)(N/10));

   out((unsigned int)(N1/1000)-10*(unsigned int)(N1/10000));

   out((unsigned int)(N1/100)-10*(unsigned int)(N1/1000));

   out((unsigned int)(N1/10)-10-(unsigned int)(N1/100));

   out(N1-10*(unsigned int)(N1/10));

   out((unsigned int)(N2/1000)-10*(unsigned int)(N2/10000));

   out((unsigned int)(N2/100)-10*(unsigned int)(N2/1000));

   out((unsigned int)(N2/10)-10*(unsigned int)(N2/100));

   out(N2-10*(unsigned int)(N2/10));

}

«include <io8535.h>

void main()

{

          DDRB = 0xFF; /* Port С настроен на вывод */

          P0RTB = 0xff; /* Все линии порта С = 1 */

          Init_LCD();

          display(0,1,7);

          while(1);

}

Динамическая индикация

Динамическая индикация с применением прерывания по переполнению таймера Timer 0. Вывод на индикатор происходит каждые 65 мс. Прерывания по таймеру 1 происходят с периодом примерно 1 с. При этом на единицу увеличивается значение на индикаторе. При достижении значения 20 происходит обнуление значения для вывода.

Микроконтроллер: AT90S2313.

Кварцевый резонатор: 4 МГц.

Текст программы:

#include <90s2313.h>

#include "HG.h"

// Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void)

{

// Reinitialize Timer's 0 value

TCNT0=0xFF;

// Place your code here

HG12();

}

// Timer 1 overflow interrupt service routine

interrupt [TIM1_0VF] void timer1_ovf_isr(void)

{

// Reinitialize Timer's 1 value

TCNT1H=0xf0;

TCNT1L=0xbe;

// Place your code here

N++;

if (N==20) N=0;

// Declare your global variables here

void main(void)