};
}
Использование ЖК-индикатора МТ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)