Читаем Микроконтроллеры AVR: от простого к сложному полностью

void delay(void)

{

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

asm("dl: 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

void main()

{

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

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

          Init_LCD();

          display(0,1,7);

          while(1);

}

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

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

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

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

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

Перейти на страницу:

Все книги серии Библиотека инженера

Похожие книги

Электроника для начинающих (2-е издание)
Электроника для начинающих (2-е издание)

В ходе практических экспериментов рассмотрены основы электроники и показано, как проектировать, отлаживать и изготавливать электронные устройства в домашних условиях. Материал излагается последовательно от простого к сложному, начиная с простых опытов с электрическим током и заканчивая созданием сложных устройств с использованием транзисторов и микроконтроллеров. Описаны основные законы электроники, а также принципы функционирования различных электронных компонентов. Показано, как изготовить охранную сигнализацию, елочные огни, электронные украшения, устройство преобразования звука, кодовый замок и др. Приведены пошаговые инструкции и более 500 наглядных рисунков и фотографий. Во втором издании существенно переработан текст книги, в экспериментах используются более доступные электронные компоненты, добавлены новые проекты, в том числе с контроллером Arduino.

Чарльз Платт

Радиоэлектроника / Технические науки
Электроника для начинающих
Электроника для начинающих

В ходе практических экспериментов рассмотрены основы электроники и показано, как проектировать, отлаживать и изготавливать электронные устройства в домашних условиях. Материал излагается последовательно от простого к сложному, начиная с простых опытов с электрическим током и заканчивая созданием сложных устройств с использованием транзисторов и микроконтроллеров. Описаны основные законы электроники, а также принципы функционирования различных электронных компонентов. Показано, как изготовить охранную сигнализацию для защиты от проникновения в дом, елочные огни, электронные украшения для одежды, устройство преобразования звука, кодовый замок, автономную роботизированную тележку и др. Приведены пошаговые инструкции и более 500 наглядных рисунков и фотографий.Для начинающих радиолюбителей

Паоло Аливерти , Чарльз Платт

Радиоэлектроника / Технические науки
Искусство схемотехники. Том 3 (Изд.4-е)
Искусство схемотехники. Том 3 (Изд.4-е)

Широко известная читателю по предыдущим изданиям монография известных американских специалистов посвящена быстро развивающимся областям электроники. В ней приведены наиболее интересные технические решения, а также анализируются ошибки разработчиков аппаратуры: внимание читателя сосредотачивается на тонких аспектах проектирования и применения электронных схем. На русском языке издается в трех томах. Том 3 содержит сведения о микропроцессорах, радиотехнических схемах, методах измерения и обработки сигналов, принципах конструирования аппаратуры и проектирования маломощных устройств, а также обширные приложения. Для специалистов в области электроники, автоматики, вычислительной техники, а также студентов соответствующих специальностей вузов и техникумов.

Пауль Хоровиц , Уинфилд Хилл

Техника / Радиоэлектроника