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; } |