본문 바로가기
Embedded/Kernel Porting

[Kernel Porting-5] H-Smart4412 FND(7-Segment) 점멸하기

by tunanut 2016. 12. 15.
반응형

작업 환경

-메인 OS : Windows 8.1K(Intel Core i5-4590)

-작업 OS : Ubuntu 14.04 64bit(VirtualBox)

-장 비 명 : H-Smart4412

 

1. fnd.c - FND에 '0000' 띄우기

 

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>

#define fnd "/dev/fnd"

 

int main()
{
    int fnd_d;
    unsigned char fnd_data[4];
 

    if((fnd_d = open(fnd,O_RDWR)) < 0)
    {
        perror("open");
        exit(1);
     }
 
    fnd_data[0] = 0xC0;
    fnd_data[1] = 0xC0;
    fnd_data[2] = 0xC0;
    fnd_data[3] = 0xC0;


    write(fnd_d,fnd_data,sizeof(fnd_data));


    sleep(5);

 

    return 0;
}

 

2. fnd_float.c - FND 소수점 표현하기

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>

#define fnd "/dev/fnd"
#define ONE 0b11111001
#define TWO 0b10100100
#define THREE 0b10110000
#define FOUR 0b10011001
#define FIVE 0b10010010
#define SIX 0b10000010
#define SEVEN 0b11111000
#define EIGHT 0b10000000
#define NINE 0b10010000
#define ZERO 0b11000000
#define DOT 0b01111111

 

void fnd_print(char,int);

 

unsigned char fnd_data[4];


int idex=0;

 

int main()
{
    int fnd_d, i;
    char buf[5];
 

    if((fnd_d = open(fnd,O_RDWR)) < 0)
    {
        perror("open");
        exit(1);
    }
 
    while(1)
    {
        fnd_data[0] = 0b11111111;
        fnd_data[1] = 0b11111111;
        fnd_data[2] = 0b11111111;
        fnd_data[3] = 0b11111111;
        write(fnd_d,&fnd_data,sizeof(fnd_data));

 

        scanf("%s",buf);

 

        fnd_print(buf[0],idex);
        idex++;
        fnd_print(buf[1],idex);
        idex++;
        fnd_print(buf[2],idex);
        idex++;
        fnd_print(buf[3],idex);


        write(fnd_d,&fnd_data,sizeof(fnd_data));
  
        sleep(10);
    }

    close(fnd_d);

    return 0;
}

 

void fnd_print(char buff,int idx)
{
    switch(buff)
    {
        case '1': fnd_data[idx] = ONE;
                 break;
        case '2': fnd_data[idx] = TWO;
                 break;
        case '3': fnd_data[idx] = THREE;
                 break;
        case '4': fnd_data[idx] = FOUR;
                 break;
        case '5': fnd_data[idx] = FIVE;
                 break;
        case '6': fnd_data[idx] = SIX;
                 break;
        case '7': fnd_data[idx] = SEVEN;
                 break;
        case '8': fnd_data[idx] = EIGHT;
                 break;
        case '9': fnd_data[idx] = NINE;
                 break;
        case '0': fnd_data[idx] = ZERO;
                 break;
        case '.': fnd_data[idx-1] &= DOT;
                 idex--;
                 break;
        default : return;
   }
}


3. fnd_number.c - 키보드 입력한 숫자 FND에 표현하기

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>

#define fnd "/dev/fnd"

int main()
{
    int fnd_d, sw=1;
    unsigned char fnd_data[4];
    if((fnd_d = open(fnd,O_RDWR)) < 0)
    {
        perror("open");
        exit(1);
    }
   
    while(sw!=0)
    {
        fnd_data[0] = 0b11111111;
        fnd_data[1] = 0b11111111;
        fnd_data[2] = 0b11111111;
        fnd_data[3] = 0b11111111;
        write(fnd_d,&fnd_data,sizeof(fnd_data));

        scanf("%d",&sw);
       
        switch(sw)
        {
            case 1: fnd_data[0] = 0b11111001;
                write(fnd_d,&fnd_data,sizeof(fnd_data));
                break;
            case 2: fnd_data[0] = 0b10100100;
                write(fnd_d,&fnd_data,sizeof(fnd_data));
                break;
            case 3: fnd_data[0] = 0b10110000;
                write(fnd_d,&fnd_data,sizeof(fnd_data));
                break;
            case 4: fnd_data[0] = 0b10011001;
                write(fnd_d,&fnd_data,sizeof(fnd_data));
                break;
            case 5: fnd_data[0] = 0b10010010;
                write(fnd_d,&fnd_data,sizeof(fnd_data));
                break;
            case 6: fnd_data[0] = 0b10000010;
                write(fnd_d,&fnd_data,sizeof(fnd_data));
                break;
            case 7: fnd_data[0] = 0b11111000;
                write(fnd_d,&fnd_data,sizeof(fnd_data));
                break;
            case 8: fnd_data[0] = 0b10000000;
                write(fnd_d,&fnd_data,sizeof(fnd_data));
                break;
            case 9: fnd_data[0] = 0b10010000;
                write(fnd_d,&fnd_data,sizeof(fnd_data));
                break;
        }
        sleep(1);
    }

    close(fnd_d);

    return 0;


반응형