реклама на сайте
подробности

 
 
> Управление 7 сигментным индикатором.
TamTam
сообщение Jun 19 2006, 08:28
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 293
Регистрация: 14-03-06
Пользователь №: 15 254



Тут решил прекрутить 7 сегментник, зашол в магазин купил 2-а 2ух значных с 10 выходами, как соединять понятно, но вот только они 2,5 В как с этим быть ??? да еще и 4 светика на одну ногу МК.

В протеусе накидал проджект, и код написал, но неравиться то что если все время не дергать ногами то ничего не видно, посоветуйте может это както поправить моно ?? ну там может драйвер какой для этого есть ???

Код
void show_number(unsigned char segment,unsigned char number);
void show(int num);
void show_number(unsigned char segment,unsigned char number)
{    
   switch(segment)
      {
      case 1:seg_1;break;
      case 2:seg_2;break;
      case 3:seg_3;break;
      case 4:seg_4;break;
      default: seg_1;break;
      }                      
   switch(number)        
      {
      case 0:port_data=~63;break;
      case 1:port_data=~6;break;
      case 2:port_data=~91;break;
      case 3:port_data=~79;break;
      case 4:port_data=~102;break;
      case 5:port_data=~109;break;
      case 6:port_data=~125;break;
      case 7:port_data=~7;break;
      case 8:port_data=~127;break;
      case 9:port_data=~111;break;
      default:port_data=~63;break;      
      }  
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
beer_warrior
сообщение Jun 19 2006, 09:29
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



И еще кусочек кода, чтобы не плодить ошибки с case и константами:
Код
//seven_seg.h
//LED segments
#define    LA    0x01    // 1
#define    LB    0x02    // 2
#define    LC    0x04    // 4
#define    LD    0x08    // 8
#define    LE    0x10    // 16
#define    LF    0x20    // 32
#define    LG    0x40    // 64
#define    LH    0x80    //128
//Seven Segment Signs
#define    SS_0    LA | LB | LC | LD | LE | LF
#define    SS_1         LB | LC
#define    SS_2    LA | LB      | LD | LE         | LG
#define    SS_3    LA | LB | LC | LD             | LG
#define    SS_4         LB | LC            | LF    | LG
....
//seven_seg.c
typedef struct _decode_table
    {
    BYTE ss;
    BYTE ch;
    } decode_table;
    
const decode_table ss_table[] =     
{
    {SS_0,'0'},
    {SS_1,'1'},
    {SS_2,'2'},
    {SS_3,'3'},
....
void OutLED(char* str)
{
for(BYTE i=0; i<DISPLAY_X; i++ )
    {
    led_buf[i] = char2SS(str[i]);
    }
}
...
BYTE char2SS(BYTE b)
{
for(BYTE i = 0; i < sizeof(ss_table)/sizeof(decode_table); i++)
    {
    if(b == ss_table[i].ch)
        {
        return ss_table[i].ss;
        }
    }
return SS_USC;
}
...
//это запускается по таймеру
void UpdateDisplay(void)
{
kbd_timer++;
OffSegment();
OffCommon();
OutSegment(led_buf[pos]);
OutPoint();
OutCommon(pos);
if(kbd_timer > 70)
    {
    CheckKBD();
    kbd_timer = 0;
    }
pos++;
if(pos == DISPLAY_X)
    {
    pos = 0;
    }
}
...
//а это ARMовский код, но идея должна быть понятна
void OffSegment(void)
{
AT91F_PIO_SetOutput(AT91C_BASE_PIOA,(0xff << SEG_A));  
}
//--------------------------------------------------------------------------
void OffCommon(void)
{
AT91F_PIO_SetOutput(AT91C_BASE_PIOA,(0x0f << COM0));
}
//--------------------------------------------------------------------------
void OutSegment(BYTE s)
{
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,(s << SEG_A));
}
//--------------------------------------------------------------------------
void OutCommon(BYTE p)
{
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,(1 << (COM0 + p)));
}
//--------------------------------------------------------------------------
void OutPoint(void)
{
if(dec_point > DISPLAY_X)
    {
    AT91F_PIO_SetOutput(AT91C_BASE_PIOA,(1 << SEG_H));
    }
if(dec_point == pos)
    {
    AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,(1 << SEG_H));
    }
}

SEG_A младший из восьми сегментных битов( для восьмибитки 0)
COM0 младший из 4-х общих.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- TamTam   Управление 7 сигментным индикатором.   Jun 19 2006, 08:28
- - Serj78   Для начала не ясно жки это или нет. учитывая, что...   Jun 19 2006, 08:52
- - unichorn   Для простого ЖКИ без встроенного контроллера хвата...   Jun 19 2006, 08:57
- - haker_fox   Используйте таймер для динамической индикации. Тог...   Jun 19 2006, 08:59
- - TamTam   Цитата(Serj78 @ Jun 19 2006, 12:52) Для н...   Jun 19 2006, 09:00
- - Pyku_He_oTTyda   ЦитатаТут решил прекрутить 7 сегментник, зашол в м...   Jun 19 2006, 09:08
- - Serj78   ну тогда все просто. все ножки вешаем через резист...   Jun 19 2006, 09:10
- - beer_warrior   ЦитатаТут решил прекрутить 7 сегментник, зашол в м...   Jun 19 2006, 09:14
- - unichorn   Можно ещё использовать микросхемы типа 74HC595, в...   Jun 19 2006, 09:18
- - Pyku_He_oTTyda   Цитатаэто правильно и здорово! но почему же не...   Jun 19 2006, 09:35
- - Alex_Pol   Через любой сдвиговый регистр с последовательным в...   Jun 19 2006, 09:44
- - prottoss   Цитата(TamTam @ Jun 19 2006, 16:28) Тут р...   Jun 19 2006, 10:54
|- - TamTam   Цитата(prottoss @ Jun 19 2006, 14:54) Цит...   Jun 20 2006, 00:50
|- - otrog   Цитата(TamTam @ Jun 20 2006, 04:50) Меня ...   Jun 20 2006, 05:10
- - otrog   Чем не устраивает атмеловская апликуха? AVR242: 8-...   Jun 19 2006, 11:01
- - haker_fox   ЦитатаМеня всем а вас ??? вы всегда делаете так ка...   Jun 20 2006, 01:12
- - prottoss   Цитата(haker_fox @ Jun 20 2006, 09:12) 4....   Jun 20 2006, 02:14


Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 05:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01402 секунд с 7
ELECTRONIX ©2004-2016