Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

AVR и экран MT10T7

Непрочитано 07.07.2010, 23:28  
Lockdog
Временная регистрация
 
Регистрация: 11.06.2006
Сообщений: 89
Сказал спасибо: 25
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
Lockdog на пути к лучшему
По умолчанию AVR и экран MT10T7

Прошу помощи.
Подключил экран MT10T7 к ATtiny2313. По даташиту всё посмотрел. Для начала хотел написать просто программку, чтобы выводил "2" на первом знакоместе, но выводится крякозябра на всех сегментах. Писал на IAR, код корявый, но целью сначала было просто разобраться в дисплее.
P.S. тактовая частота тиньки - 8Мгц
Код:
#include ‹ioavr.h›
#include ‹intrinsics.h›

#define DB0 PB1
#define DB1 PB0
#define DB2 PD6
#define DB3 PD5
#define WR1 PD4
#define A0  PD3


int main( void )
{
  DDRB = 0xFF;
  DDRD = 0xFF;

    //Установка адреса
    PORTB |= (1‹‹DB0)|(1‹‹DB1);
    PORTD |= (1‹‹DB2)|(1‹‹DB3);
    PORTD &= ~(1‹‹A0);
    PORTD |= (1‹‹WR1);
    
    __delay_cycles(1);
    
    PORTD &= ~(1‹‹WR1);
    
    __delay_cycles(2);
    
    //Разблокировка шины
    PORTD |= (1‹‹A0);
    PORTB |= (1‹‹DB0);
    PORTB &= ~(1‹‹DB1);
    PORTD &= ~(1‹‹DB2);
    PORTD &= ~(1‹‹DB3);
    PORTD |= (1‹‹WR1);
    __delay_cycles(1);
    PORTD &= ~(1‹‹WR1);
    __delay_cycles(1);
    PORTB |= (1‹‹DB0);
    PORTB |= (1‹‹DB1);
    PORTD |= (1‹‹DB2);
    PORTD |= (1‹‹DB3);
    __delay_cycles(1);
    PORTD |= (1‹‹WR1);
    __delay_cycles(1);
    PORTD &= ~(1‹‹WR1);
    __delay_cycles(2);
    
    //Установка адреса (первое знакоместо)
    PORTB &= ~(1‹‹DB0);
    PORTB &= ~(1‹‹DB1);
    PORTD &= ~(1‹‹DB2);
    PORTD &= ~(1‹‹DB3);
    PORTD &= ~(1‹‹A0);
    PORTD |= (1‹‹WR1);
    
    __delay_cycles(1);
    
    PORTD &= ~(1‹‹WR1);
    
    __delay_cycles(2);
    
    //пишем "2"
    PORTD |= (1‹‹A0);
    PORTB |= (1‹‹DB0);
    PORTB |= (1‹‹DB1);
    PORTD |= (1‹‹DB2);
    PORTD |= (1‹‹DB3);
    PORTD |= (1‹‹WR1);
    __delay_cycles(1);
    PORTD &= ~(1‹‹WR1);
    __delay_cycles(1);
    PORTB &= ~(1‹‹DB0);
    PORTB |= (1‹‹DB1);
    PORTD &= ~(1‹‹DB2);
    PORTD &= ~(1‹‹DB3);
    __delay_cycles(1);
    PORTD |= (1‹‹WR1);
    __delay_cycles(1);
    PORTD &= ~(1‹‹WR1);
    __delay_cycles(2);
}

Даташит: http://lib.chipdip.ru/076/DOC000076089.pdf
Реклама:
Lockdog вне форума  
Непрочитано 08.07.2010, 01:20  
vitecd
Временная регистрация
 
Аватар для vitecd
 
Регистрация: 04.01.2007
Сообщений: 90
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
vitecd на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

а почему ноги сикось/накось используешь? не проще подцепить девайс на весь байт и работать по человечески с цыфрами а не выпинывать побитно?

2я страница
Цитата:
входы WR должны использоваться оба, или один из них заземлить
__________________
http://www.

Последний раз редактировалось vitecd; 08.07.2010 в 01:28.
vitecd вне форума  
Непрочитано 08.07.2010, 01:49  
Lockdog
Временная регистрация
 
Регистрация: 11.06.2006
Сообщений: 89
Сказал спасибо: 25
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
Lockdog на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Сообщение от vitecd Посмотреть сообщение
а почему ноги сикось/накось используешь? не проще подцепить девайс на весь байт и работать по человечески с цыфрами а не выпинывать побитно?
Да вот уже поздняк метаться =( остальные ноги заняты. Сначала не думал, что потребуется дисплей...

Про WR, у меня как раз пин WR2 и заземлён.
Lockdog вне форума  
Непрочитано 12.07.2010, 20:34  
Lockdog
Временная регистрация
 
Регистрация: 11.06.2006
Сообщений: 89
Сказал спасибо: 25
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
Lockdog на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Перепаял ножки и повесил DB0..DB3 на один регистр DDRD, переписал код, теперь всё читается попроще и работать с битами удобнее, но всё равно не работает. Помогите, пожалуйста.
Код:
#include ‹ioavr.h›
#include ‹intrinsics.h›

#define DB0 PD3
#define DB1 PD4
#define DB2 PD5
#define DB3 PD6
#define WR1 PB0
#define A0  PB1

#define ClrBit(reg, bit) reg |= (1‹‹bit)
#define SetBit(reg, bit) reg &= (~(1‹‹bit))

void SetAddr(int adr)
{
  PORTD |= adr‹‹3;
  PORTB &= ~(1‹‹A0);
  PORTB |= (1‹‹WR1);
  __delay_cycles(1);
  PORTB &= ~(1‹‹WR1);
  __delay_cycles(2);
}

void WriteByte(int adr)
{
  PORTB |= (1‹‹A0);
  PORTD |= (adr‹‹3);
  PORTB |= (1‹‹WR1);
  __delay_cycles(1);
  PORTB &= ~(1‹‹WR1);
  __delay_cycles(1);
  PORTD |= (adr‹‹1);
  __delay_cycles(2);
  PORTB |= (1‹‹WR1);
  __delay_cycles(1);
  PORTB &= ~(1‹‹WR1);
  __delay_cycles(2);
}

int main( void )
{
  DDRB = 0xFF;
  DDRD = 0xFF;

  //установка адреса
  SetAddr(0x0F);
  //разблокировка шины (пишем байт)
  WriteByte(0x01);

  while(1)
  {
    SetAddr(0x00);
    WriteByte(0x11);
  }
}
Lockdog вне форума  
Непрочитано 12.07.2010, 22:09  
harchenko_pavel
Прописка
 
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
harchenko_pavel на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

http://forum.cxem.net/index.php?showtopic=36661
Держи ссылку тут библиотека для данного дисплея под WinAvr, думаю поможет
Кстати задержка в библиотеке составляет 200мкс, а не 200нс как в даташите

Последний раз редактировалось harchenko_pavel; 12.07.2010 в 22:53.
harchenko_pavel вне форума  
Сказали "Спасибо" harchenko_pavel
Lockdog (13.07.2010)
Непрочитано 12.07.2010, 23:35  
Lockdog
Временная регистрация
 
Регистрация: 11.06.2006
Сообщений: 89
Сказал спасибо: 25
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
Lockdog на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Сообщение от harchenko_pavel Посмотреть сообщение
http://forum.cxem.net/index.php?showtopic=36661
Держи ссылку тут библиотека для данного дисплея под WinAvr, думаю поможет
Кстати задержка в библиотеке составляет 200мкс, а не 200нс как в даташите
Почему настолько различается со значением в даташите?
Запутанный код, попробую разобраться. Спасибо =)
Lockdog вне форума  
Непрочитано 12.07.2010, 23:42  
harchenko_pavel
Прописка
 
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
harchenko_pavel на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Сообщение от Lockdog Посмотреть сообщение
Запутанный код, попробую разобраться. Спасибо =)
А в чем собствено запутанный?
harchenko_pavel вне форума  
Непрочитано 13.07.2010, 00:28  
harchenko_pavel
Прописка
 
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
harchenko_pavel на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Разбираться с библиотекой и соответствием даташиту не стал, поправил как смог под ваши пины и IAR, может че то и упустил.
Задержку можно попробовать поставить меньше (как у вас __delay_cycles(2)), а может и больше,
200мкс ставить бы не стал ИМХО это уж слишком.
Дергал каждый вывод отдельно так как не знаю что та у вас висит на портах.

PHP код:

#include ‹ioavr.h›
#include ‹intrinsics.h›

#define XTAL_MHz 8.0
#define _delay_us(us) __delay_cycles((unsigned long int)us*XTAL_MHz)
#define _delay_ms(ms) _delay_us(ms*1000)

#define DB0 PD3
#define DB1 PD4
#define DB2 PD5
#define DB3 PD6
#define WR1 PB0
#define A0  PB1
#define delay _delay_us(4)

#define ClrBit(reg, bit) reg |= (1‹‹bit)
#define SetBit(reg, bit) reg &= (~(1‹‹bit))

//инициализация индикатора
//индикатор распиновка *******************
//индикатор*****порты
//        A0 -  PB1
//        WR1 - PB0
//        WR2 - GND
//        DB3 - PD6
//        DB2 - PD5
//        DB1 - PD4
//        DB0 - PD3
//*****************************************
//младшая тетрада-старшая тетрада
// DB0(L)-g         DB0(H)- h
// DB1(L)-e         DB1(H)- b
// DB2(L)-d         DB2(H)- c
// DB3(l)-a         DB3(H)- f
//*****************************************
//         a
//      * *** *
//    f *  g  * b
//      * *** *
//    e *     * c
//      * *** *
//        d      *н
//*****************************************
//  цифры младшая тетрада***старшая тетрада
//  0-1110                  0-1110
//  1-0000                  1-0110
//  2-1111                  2-0010
//  3-1101                  9-0110
//  4-0001                  4-1110
//  5-1101                  5-1100
//  6-1111                  6-1100
//  7-1000                  7-0110
//  8-1111                  8-1111 
//  9-1101                  9-1110

//********************************************
//адреса регистров молуля *******************
//знакоместо   0----1----2----3---4----5----6----7----8----9
//адрес      0x00*0x01*0x02*0x03*0x04*0x05*0x06*0x07*0x08*0x09
//********************************************


void mt_setp(char p);
void mt_init();
void mt_clear();               
void mt_putc(char c);        
void mt_puts(unsigned int c);

int main( void )
{
  DDRB = 0xFF;
  DDRD = 0xFF;

  char i;

  mt_init();
  mt_clear();
  mt_setp(0x00);
 
  for (i=0; i‹=9; i++) mt_putc(i);
  
  while(1);
}

/* 
        в данном дисплеи регистр по адресу 0xf включает блокировку
        так как при включение значения данного регистра не определенно,
        возможно дисплей будет блокирован. Для снятия блокировки надо
        послать по адресу 0xf значение 1 или x&1;
*/

void mt_init()
{
 // разблокировка шины     
 PORTD |= (1‹‹DB0) | (1‹‹DB1) | (1‹‹DB2) | (1‹‹DB3);
 PORTB &=~(1‹‹A0);
 PORTB |= (1‹‹WR1);
 delay;
 PORTD &=~(1‹‹DB1) | (1‹‹DB2) | (1‹‹DB3);
 PORTB &=~(1‹‹WR1);
 PORTB |= (1‹‹A0);
 PORTB |= (1‹‹WR1);
 delay;
 PORTD &=~(1‹‹DB0) | (1‹‹DB1) | (1‹‹DB2) | (1‹‹DB3);
 PORTB &=~(1‹‹A0);
 PORTB &=~(1‹‹WR1);
 PORTB |= (1‹‹WR1);
}         

/*
        очистка дисплея представляет из себя отключение всех сегментов индикатора
        Отсчет длится до 20 потому что имееться 2 регистра(тетрады) установки сегментов
*/
        
void mt_clear()
{        
    char i;
    // очистка дисплея
    PORTD &=~ (1‹‹DB0) | (1‹‹DB1) | (1‹‹DB2) | (1‹‹DB3);
    PORTB &=~(1‹‹WR1); 
    PORTB |= (1‹‹A0);
    
    for(i=0; i‹20; i++)
    {  
       PORTB |= (1‹‹WR1);
       delay;
       PORTB &=~(1‹‹WR1);
    }
}

/*
        Установка позиции производится при установки а0 в 0 
*/
                
void mt_setp(char p)
{

  PORTB &=~(1‹‹WR1);
  PORTB &=~(1‹‹A0);
       
  if (p&1) PORTD |=(1‹‹DB0);
  else PORTD &=~ (1‹‹DB0);
  
  if (p&2) PORTD |=(1‹‹DB1);
  else PORTD &=~ (1‹‹DB1);
  
  if (p&4) PORTD |=(1‹‹DB2);
  else PORTD &=~ (1‹‹DB2);
  
  if (p&8) PORTD |=(1‹‹DB3);
  else PORTD &=~ (1‹‹DB3);  

  PORTB |= (1‹‹WR1);
  delay;
} 

/*
        Вывод одиночной цифры 
*/

void mt_putc(char c)
{ 
  char digits[]={0xe,0x00,0xf,0xd,0x1,0xd,0xf,0x8,0xf,0xd};//младшая тетрада
  char digits1[]={0xe,0x6,0x2,0x6,0xe,0x0C,0x0C,0x6,0xe,0xe};//старшая тетрада

  PORTB &=~(1‹‹A0);
  PORTB &=~(1‹‹WR1);
       
  if (digits[c]&1) PORTD |=(1‹‹DB0);
  else PORTD &=~ (1‹‹DB0);
  
  if (digits[c]&2) PORTD |=(1‹‹DB1);
  else PORTD &=~ (1‹‹DB1);
  
  if (digits[c]&4) PORTD |=(1‹‹DB2);
  else PORTD &=~ (1‹‹DB2);
  
  if (digits[c]&8) PORTD |=(1‹‹DB3);
  else PORTD &=~ (1‹‹DB3);
  
  PORTB |= (1‹‹A0);
  PORTB |= (1‹‹WR1);
  delay;   

  PORTB &=~(1‹‹A0);
  PORTB &=~(1‹‹WR1);
  
  if (digits1[c]&1) PORTD |=(1‹‹DB0);
  else PORTD &=~ (1‹‹DB0);
  
  if (digits1[c]&2) PORTD |=(1‹‹DB1);
  else PORTD &=~ (1‹‹DB1);
  
  if (digits1[c]&4) PORTD |=(1‹‹DB2);
  else PORTD &=~ (1‹‹DB2);
  
  if (digits1[c]&8) PORTD |=(1‹‹DB3);
  else PORTD &=~ (1‹‹DB3);
  PORTA=digits1[c];
  
  PORTB |= (1‹‹A0);
  PORTB |= (1‹‹WR1);
}

/*
        Разделение числа на 1,10...10000; что представляет собой unsigned int
        Работает медлено(из-за деления), но в тех целях где оно у меня было 
        использованно быстродействие было не к чему
*/

void mt_puts(unsigned int c)
{
char t[5];
t[4]=c/10000;
t[3]=c/1000-t[4]*10;
t[2]=c/100-((t[4]*100)+t[3]*10);
t[1]=c/10-(t[4]*1000)-(t[3]*100)-t[2]*10;
t[0]=c-(t[4]*10000)-(t[3]*1000)-(t[2]*100)-t[1]*10;
mt_putc(t[4]);
mt_putc(t[3]);
mt_putc(t[2]);
mt_putc(t[1]);
mt_putc(t[0]);
} 
З.Ы. Спасибо надо кнопкой нажимать

Последний раз редактировалось harchenko_pavel; 16.07.2010 в 00:20.
harchenko_pavel вне форума  
Сказали "Спасибо" harchenko_pavel
Lockdog (13.07.2010)
Непрочитано 13.07.2010, 10:39  
Lockdog
Временная регистрация
 
Регистрация: 11.06.2006
Сообщений: 89
Сказал спасибо: 25
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
Lockdog на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Спасибо за проделанную работу, но тоже не работает. ( Буду по задержкам смотреть.

Последний раз редактировалось Lockdog; 13.07.2010 в 11:29.
Lockdog вне форума  
Непрочитано 13.07.2010, 13:38  
harchenko_pavel
Прописка
 
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
harchenko_pavel на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Сообщение от Lockdog Посмотреть сообщение
Спасибо за проделанную работу, но тоже не работает. ( Буду по задержкам смотреть.
Ам сори дико тупанул, правильно так:
PHP код:

#include ‹ioavr.h›
#include ‹intrinsics.h›

#define XTAL_MHz 8.0
#define _delay_us(us) __delay_cycles((unsigned long int)us*XTAL_MHz)
#define _delay_ms(ms) _delay_us(ms*1000)

#define DB0 PD3
#define DB1 PD4
#define DB2 PD5
#define DB3 PD6
#define WR1 PB0
#define A0  PB1
#define delay _delay_us(4)

#define ClrBit(reg, bit) reg |= (1‹‹bit)
#define SetBit(reg, bit) reg &= (~(1‹‹bit))

//инициализация индикатора
//индикатор распиновка *******************
//индикатор*****порты
//        A0 -  PB1
//        WR1 - PB0
//        WR2 - GND
//        DB3 - PD6
//        DB2 - PD5
//        DB1 - PD4
//        DB0 - PD3
//*****************************************
//младшая тетрада-старшая тетрада
// DB0(L)-g         DB0(H)- h
// DB1(L)-e         DB1(H)- b
// DB2(L)-d         DB2(H)- c
// DB3(l)-a         DB3(H)- f
//*****************************************
//         a
//      * *** *
//    f *  g  * b
//      * *** *
//    e *     * c
//      * *** *
//        d      *н
//*****************************************
//  цифры младшая тетрада***старшая тетрада
//  0-1110                  0-1110
//  1-0000                  1-0110
//  2-1111                  2-0010
//  3-1101                  9-0110
//  4-0001                  4-1110
//  5-1101                  5-1100
//  6-1111                  6-1100
//  7-1000                  7-0110
//  8-1111                  8-1111 
//  9-1101                  9-1110
//********************************************
//адреса регистров молуля *******************
//знакоместо   0----1----2----3---4----5----6----7----8----9
//адрес      0x00*0x01*0x02*0x03*0x04*0x05*0x06*0x07*0x08*0x09
//********************************************


void mt_setp(char p);
void mt_init();
void mt_clear();               
void mt_putc(char c);        
void mt_puts(unsigned int c);

int main( void )
{
  DDRB = 0xFF;
  DDRD = 0xFF;

  char i;

  mt_init();
  mt_clear();
  mt_setp(0x00);
 
  for (i=0; i‹=9; i++) mt_putc(i);
  
  while(1);
}

/* 
        в данном дисплеи регистр по адресу 0xf включает блокировку
        так как при включение значения данного регистра не определенно,
        возможно дисплей будет блокирован. Для снятия блокировки надо
        послать по адресу 0xf значение 1 или x&1;
*/

void mt_init()
{
 // разблокировка шины     
 PORTD |= (1‹‹DB0) | (1‹‹DB1) | (1‹‹DB2) | (1‹‹DB3);
 PORTB &=~(1‹‹A0);
 PORTB |= (1‹‹WR1);
 delay;
 PORTD &=~(1‹‹DB1) & ~(1‹‹DB2) & ~(1‹‹DB3);
 PORTB &=~(1‹‹WR1);
 PORTB |= (1‹‹A0);
 PORTB |= (1‹‹WR1);
 delay;
 PORTD &=~(1‹‹DB0) & ~(1‹‹DB1) & ~(1‹‹DB2) & ~(1‹‹DB3);
 PORTB &=~(1‹‹A0);
 PORTB &=~(1‹‹WR1);
 PORTB |= (1‹‹WR1);
}         

/*
        очистка дисплея представляет из себя отключение всех сегментов индикатора
        Отсчет длится до 20 потому что имееться 2 регистра(тетрады) установки сегментов
*/
        
void mt_clear()
{        
    char i;
    // очистка дисплея
    PORTD &=~ (1‹‹DB0) & ~(1‹‹DB1) & ~(1‹‹DB2) & ~(1‹‹DB3);
    PORTB &=~(1‹‹WR1); 
    PORTB |= (1‹‹A0);
    
    for(i=0; i‹20; i++)
    {  
       PORTB |= (1‹‹WR1);
       delay;
       PORTB &=~(1‹‹WR1);
    }
}

/*
        Установка позиции производится при установки а0 в 0 
*/
                
void mt_setp(char p)
{

  PORTB &=~(1‹‹WR1);
  PORTB &=~(1‹‹A0);
       
  if (p&1) PORTD |=(1‹‹DB0);
  else PORTD &=~ (1‹‹DB0);
  
  if (p&2) PORTD |=(1‹‹DB1);
  else PORTD &=~ (1‹‹DB1);
  
  if (p&4) PORTD |=(1‹‹DB2);
  else PORTD &=~ (1‹‹DB2);
  
  if (p&8) PORTD |=(1‹‹DB3);
  else PORTD &=~ (1‹‹DB3);  

  PORTB |= (1‹‹WR1);
  delay;
} 

/*
        Вывод одиночной цифры 
*/

void mt_putc(char c)
{ 
  char digits[]={0xe,0x00,0xf,0xd,0x1,0xd,0xf,0x8,0xf,0xd};//младшая тетрада
  char digits1[]={0xe,0x6,0x2,0x6,0xe,0x0C,0x0C,0x6,0xe,0xe};//старшая тетрада

  PORTB &=~(1‹‹A0);
  PORTB &=~(1‹‹WR1);
       
  if (digits[c]&1) PORTD |=(1‹‹DB0);
  else PORTD &=~ (1‹‹DB0);
  
  if (digits[c]&2) PORTD |=(1‹‹DB1);
  else PORTD &=~ (1‹‹DB1);
  
  if (digits[c]&4) PORTD |=(1‹‹DB2);
  else PORTD &=~ (1‹‹DB2);
  
  if (digits[c]&8) PORTD |=(1‹‹DB3);
  else PORTD &=~ (1‹‹DB3);
  
  PORTB |= (1‹‹A0);
  PORTB |= (1‹‹WR1);
  delay;   

  PORTB &=~(1‹‹A0);
  PORTB &=~(1‹‹WR1);
  
  if (digits1[c]&1) PORTD |=(1‹‹DB0);
  else PORTD &=~ (1‹‹DB0);
  
  if (digits1[c]&2) PORTD |=(1‹‹DB1);
  else PORTD &=~ (1‹‹DB1);
  
  if (digits1[c]&4) PORTD |=(1‹‹DB2);
  else PORTD &=~ (1‹‹DB2);
  
  if (digits1[c]&8) PORTD |=(1‹‹DB3);
  else PORTD &=~ (1‹‹DB3);
  PORTA=digits1[c];
  
  PORTB |= (1‹‹A0);
  PORTB |= (1‹‹WR1);
}

/*
        Разделение числа на 1,10...10000; что представляет собой unsigned int
        Работает медлено(из-за деления), но в тех целях где оно у меня было 
        использованно быстродействие было не к чему
*/

void mt_puts(unsigned int c)
{
char t[5];
t[4]=c/10000;
t[3]=c/1000-t[4]*10;
t[2]=c/100-((t[4]*100)+t[3]*10);
t[1]=c/10-(t[4]*1000)-(t[3]*100)-t[2]*10;
t[0]=c-(t[4]*10000)-(t[3]*1000)-(t[2]*100)-t[1]*10;
mt_putc(t[4]);
mt_putc(t[3]);
mt_putc(t[2]);
mt_putc(t[1]);
mt_putc(t[0]);
} 

Последний раз редактировалось harchenko_pavel; 15.07.2010 в 19:41.
harchenko_pavel вне форума  
Сказали "Спасибо" harchenko_pavel
Lockdog (13.07.2010)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книги dosikus Электронная библиотека 11242 29.12.2015 23:45
AVR JTAGICE MKII - проблемы firmware... Luxurious AVR 25 20.10.2014 10:50
На WinAVR + AVR Studio c CVAVR Vetal-soft Embedd С 87 03.03.2013 20:31


Часовой пояс GMT +4, время: 11:25.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.