BASIC4MCU | 질문게시판 | atmega128 UART통신으로 FND출력
페이지 정보
작성자 Rion 작성일2024-06-09 15:29 조회253회 댓글0건본문
Terterm 으로 숫자 3개 입력받아서 FND출력하는 코드입니다..
배운내용을 기반으로 머리를 싸메어 봤지만 출력이 제대로 안나오네요,,,
3-segment FND 나오게하는 부분은 타이머로 구현해놨습니다. 어느부분이 문제일까요..
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdlib.h>
int cnt=0;
unsigned int temp,x,y,z;
char fnd_font[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6f};
char buffer[4];
int i=0;
void Uart0_Init(){
UBRR0H=0;
UBRR0L=103;
UCSR0C=(1<<UCSZ01)|(1<<UCSZ00);
UCSR0B=(1<<TXEN0)|(1<<RXEN0)|(1<<RXCIE0);
}
char Rx0_Data(void)
{
while(!(UCSR0A&(1<<RXC0)));
return UDR0;
}
void Timer2_Init(void)
{
TCCR2=0b00001011;
OCR2=250;
TCNT2=0;
TIMSK=0x80;
}
ISR(TIMER2_COMP_vect)
{
if(cnt%3==0){
PORTB=0b11011111;
PORTC=fnd_font[x];
}
else if(cnt%3==1){
PORTB=0b10111111;
PORTC=fnd_font[y];
}
else if(cnt%3==2){
PORTB=0b01111111;
PORTC=fnd_font[z];
}
cnt++;
}
void DisplayFND(int num)
{
x=num/100;
temp=num%100;
y=temp/10;
z=temp%10;
}
int main(void)
{
DDRB=0xff;
DDRC=0xff;
Uart0_Init();
Timer2_Init();
sei();
while(1){
char num=Rx0_Data();
if(num>='0'&&num<='9'){
buffer[i++]=num;
if(i==3){
buffer[i]='\0';
int NUMBER=atoi(buffer);
DisplayFND(NUMBER);
i=0;
}
}
_delay_ms(10000);
}
}
댓글 0
조회수 253등록된 댓글이 없습니다.