BASIC4MCU | 질문게시판 | 시리얼통신, FND
페이지 정보
작성자 바바바사옹 작성일2019-06-04 04:32 조회7,538회 댓글0건본문
시리얼 통신으로 pc통신프로그램을 이용해서 숫자를 입력했을때 입력한 숫자가 보드 fnd에 차례대로 적어지도록 프로그래밍 하고싶습니다. 인터넷을 참고해 가며 코딩 해봤는데 더이상 스스로 문제를 해결을 못하고 있습니다.
a.통신 포멧 9600pbs, data bit 8, No Parity, stop 1
b.PC용 통신프로그램을 이용 타깃보드에 숫자를 보냈을 때 해당 숫자가 FND에 표시되도록 할 것
(단, 초기number는 0이고, 이전 숫자는 왼쪽으로 이동시키고 새로운 숫자는 반드시 우측 )
필요한 헤더파일 등.. 전부있습니다.
도와주시면 감사하겠습니다.
fnd 왼쪽에서 세번째 까지 불 들어오고 가장 오른쪽 하나는 들어오지 않습니다..
----------------------------------------------------------------------------------------------
#include <avr/io.h>
#include <avr/interrupt.h>
uint8_t fnd_data[4] = {0};
uint8_t dec_font[11] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x27, 0x7f, 0x6f, 0x00};
void fnd_init(void){
DDRC = 0xff;
DDRG = 0x0f;
PORTC = 0x00;
PORTG = 0x00;
}
void fnd_update(void){
uint8_t static index = 0;
PORTG &= 0xf0;
PORTC = fnd_data[index];
PORTG |= (1<<index);
index = (index + 1) % 4;
}
void fnd_disp_num(uint16_t num){
fnd_data[0] = dec_font[num % 10] ;
fnd_data[1] = dec_font[num % 100 / 10] ;
fnd_data[2] = dec_font[num % 1000 / 100] ;
fnd_data[3] = dec_font[num / 1000] ;
}
void fnd_disp_num2(uint16_t num1, uint16_t num2){
fnd_data[0] = dec_font[num2 % 10] ;
fnd_data[1] = dec_font[num2 % 100 / 10] ;
fnd_data[2] = dec_font[num1 % 1000 / 100] ;
fnd_data[3] = dec_font[num1 / 1000] ;
}
-----------------------------------------------------------------------------------------
#include <stdio.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "uart.h"
#include "fnd.h"
ISR(TIMER0_COMP_vect){
fnd_update();
}
int main(void){
uint8_t ch;
uint32_t num = 0;
DDRA = 0xff;
PORTA = 0;
fnd_init();
uart0_init();
uart0_puts(" hello world \r\n");
TCCR0 = (1<<WGM01) | (1<<CS02) | (1<<CS00);
OCR0 = 124;
TIMSK = (1<<OCIE0);
sei();
while(1){
ch = uart0_getch();
if( '0' <= ch && ch <= '9'){
num = 10;
num += (ch & 0x0f);
num = 10000;
fnd_disp_num(num);
}
}
return 0;
}
댓글 0
조회수 7,538등록된 댓글이 없습니다.