일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- cs50/2.5
- M-Rokkor 40/2
- Minolta CLE
- SONY A7
- GRD2
- Hasselblad 500cm
- Kodak T-Max 100
- ZeissIkon ZI
- Nikon 28Ti
- Kodak 400TX
- cf80/2.8
- FujiFilm GFX50s
- Minolta TC-1
- kodak t-max 400
- Kentmere 400
- G28/2.8
- fujifilm velvia 50
- 4870
- FujiFilm C200
- 2018 미국출장
- Rollei35s
- Contax G2
- cf50/4 fle
- N80/4
- Germany
- Kodak 5222
- Kodak Ektar 100
- Mamiya 7
- 2019 유럽여행
- Leica M7
- Today
- Total
J 창고
[Atmega128] 74HC595, FND, Atmega128 본문
atmega 128에서 74HC595 8bit shift register 를 이용한 FND 컨트롤
회로도 및 데이터시트는 구글링 보면 될 것이고
코드비전을 사용하다가 AVR Studio를 사용하니까 포트 개별 컨트롤이 안되서 애먹었음...
검색해보니 비트 마스크라는 걸 사용한다고 함
일단 1자릿수를 했으니 다음엔 2자릿수 ㄱㄱㅆ!
아 그리고 FND가 Common Anode라 반대라는...;;
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
void HC595write(unsigned char udata){
unsigned char i;
PORTA &= 0b11111110; // DATA 0
PORTA &= 0b11111011; // SHIFT 0
PORTA &= 0b11111101; // LATCH 0
i = 7;
while(i<=7){
PORTA = (udata >> i) & 0x01;// DATA
PORTA |= 0b00000100; // SHIFT 1
PORTA &= 0b11111011; // SHIFT 0
i--;
}
PORTA |= 0b00000010; // LATCH 0
PORTA &= 0b11111101; // LATCH 1
}
int main(void){
DDRA = 0xFF;
while(1){
unsigned char num[10] = {0b11111100, //0
0b01100000, //1
0b11011010, //2
0b11110010, //3
0b01100110, //4
0b10110110, //5
0b00111110, //6
0b11100100, //7
0b11111110, //8
0b11100110 //9
};
for(int i=0;i<10;i++){
HC595write(~num[i]);
_delay_ms(1000);
}
}
}