책에있는 코드인데 안된다 . 책대로 연결했는데 왜 안되는지 모르겠음 ..
/*
* FNDexample.c
*
* Created: 2020-12-07 오전 9:31:46
* Author : User
*/
#include <avr/io.h>
unsigned char digit[] = {0x77, 0x41, 0x3B, 0x5B, 0x4D, 0x5E, 0x7C, 0x43, 0x7F, 0x4F};
void display_7segled(unsigned char led[], unsigned int number){
PORTB = led[number];
}
int main(void)
{
DDRB = 0xFF;
display_7segled(digit, 4);
return 0;
}
그래서 아래처럼 한칸씩 켜보고 직접 짜보기로함
#include <avr/io.h>
#include <util/delay.h>
unsigned char num[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
int main(void)
{
DDRE = 0xFF;
PORTE = 0x00;
int i = 0;
while (1)
{
PORTE = num[i];
_delay_ms(1000);
i++;
if(i==8){
i=0;
}
}
}
작동잘됨
#define F_CPU 16000000UL
#include <util/delay.h>
#include <avr/io.h>
void display_7segled(unsigned char led[], unsigned int number){
PORTB = led[number];
}
int main(void)
{
DDRB = 0xFF;
while (1){
PORTB = 0xDE; //0
_delay_ms(500);
PORTB = 0x06; //1
_delay_ms(500);
PORTB = 0xEC; //2
_delay_ms(500);
PORTB = 0xAE; //3
_delay_ms(500);
PORTB = 0x36; //4
_delay_ms(500);
PORTB = 0xBA; //5
_delay_ms(500);
PORTB = 0xFA; //6
_delay_ms(500);
PORTB = 0x0E; //7
_delay_ms(500);
PORTB = 0xFE; //8
_delay_ms(500);
PORTB = 0x3E; //9
_delay_ms(500);
PORTB = 0x01; //.
_delay_ms(500);
}
return 0;
}
계산하는법
7segment는 7개(8개) led 붙여놓은것과 같다.
연결 후 0x01 0x02 위의 코드 실행해보고 0x01이 어디칸인지.. 각각이 어느 led칸 인지 보고 내가 만들고 싶은 칸을 더하면 된다
'임베디드 > Atmega128' 카테고리의 다른 글
인터럽트(Interrupt) 개요 (0) | 2021.01.24 |
---|---|
ATmega128 인터럽트방식 p247 (pdf246) (0) | 2021.01.22 |
PORTB = 1 << PB7; 와 PORTB |= 1 << PB7; 차이 (0) | 2021.01.21 |
JMOD-128-1 AtmelStudio 7.0 에서 연결하기 (0) | 2021.01.21 |
atmega128 timer/counter0 위상정정 PWM 이용한 DC모터 속도제어 (0) | 2021.01.09 |