Dot Matrix, AVR, ATmega128 - 0223
Dot Matrix, AVR, ATmega128
[ 간략 설명 ]
◈ Dot Matrix, AVR, ATmega128
◈ Dot Matri의 포트 :
- PORTA = RED LED
- PORTC = GREEN LED
- PORTB = COMMON
RED LED를 ON하기 위해서는 PA = 0xff를 주면 된다.
◈ 회로소자 : UDN2981, ULN2803 사용
( 8X8 Dot Matrix는 128개의 LED를 사용하므로, 전류문제를 해결하기 위해 사용됨)
- UND2981 : RED/GREEN LED에 각각 하나씩 사용되였으며,
- ULN2803 : Common 이 사용 ( NOT GATE가 붙어있다.)
◈ LED 와 Common 에 'High' 값을 주면, 두 값이 만나는 지점의 LED가 켜진다.
(실제로는 Common에 Not Gate가 붙어 있어 'Low'값이 들어가서 LED가 켜지는 것이다.)
Dot Matrix, AVR, ATmega128
내용 넣기~~~~
◆◆ Dot Matrix, AVR, ATmega128 : 하나의 Dot ON/OFF ◆◆
/*
Dot Matrix(8*8)
dot 하나만 점등시키기...
0223B_DotMatrix_Onedot.c
*/
#include <mega128.h>
#include <delay.h>
void main(void)
{
DDRA = 0xff; // RED
DDRB = 0xff; // COM
DDRC = 0xff; // GREEN
while(1){
// 좌 상 모서리 하나
PORTA = 0b10000000; // RED
PORTB = 0b00000001;
delay_ms(500);
PORTA = 0b00000000;
PORTB = 0b00000000;
delay_ms(500);
// 우하 모서리 하나
PORTC = 0b00000001; // GREEN
PORTB = 0b10000000;
delay_ms(500);
PORTC = 0b00000000;
PORTB = 0b00000000;
// 가운데 두개 대각선 : GREEN
PORTC = 0b00010000;
PORTB = 0b00001000;
delay_ms(100);
PORTC = 0b00000000;
PORTB = 0b00000000;
//
PORTC = 0b00001000;
PORTB = 0b00010000;
delay_ms(100);
PORTC = 0b00000000;
PORTB = 0b00000000;
delay_ms(100);
// 가운데 두개 대각선 : RED
PORTA = 0b00001000;
PORTB = 0b00001000;
delay_ms(100);
PORTC = 0b00000000;
PORTB = 0b00000000;
//
PORTA = 0b00010000;
PORTB = 0b00010000;
delay_ms(100);
PORTC = 0b00000000;
PORTB = 0b00000000;
}//endwhile
}//end main
◆◆ Dot Matrix, AVR, ATmega128 : 'B' 표시하기 P.336 ◆◆
/*
Dot Matrix(8*8) P.336
'B' 표시
0223A_DotMatrix_p336.c
*/
#include <mega128.h>
#include <delay.h>
int Dot[8] = { 0x7c, 0x42, 0x42, 0x7c, 0x42, 0x42, 0x42, 0x7c };
int Comm[8] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };
void main(void)
{
int i;
DDRA = 0xff; // RED
DDRB = 0xff; // COM
DDRC = 0xff; // GREEN
while(1){
// RED
for( i = 0 ; i < 8 ; i++){
PORTA = Dot[i];
PORTB = Comm[i];
delay_ms(2);
}//endfor
delay_ms(2);
/*
// GREEN
for( i = 0 ; i < 8 ; i++){
PORTC = Dot[i];
PORTB = Comm[i];
delay_ms(2);
}//endfor
delay_ms(2);
*/
}//endwhile
}//end main
◆◆ Dot Matrix, AVR, ATmega128 : 대각선 표시하기 ◆◆
/*
Dot Matrix ( 8 X 8)
대각선 줄 표시
0223C_DotMatrix_line.c
*/
#include <mega128.h>
#include <delay.h>
unsigned int DotMetrics1[8] ={0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 };
unsigned int DotMetrics2[8] ={0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };
void main(void)
{
int i;
DDRA = 0xff; // RED
DDRB = 0xff; // Common
DDRC = 0xff; // GREEN
while(1){
for( i = 0 ; i < 8 ; i++){
PORTA = DotMetrics1[i];
PORTB = DotMetrics2[i];
delay_ms(100);
PORTC = DotMetrics2[i];
PORTB = DotMetrics1[i];
}//endfor
}//endwhile
}//end main
Dot Metrix Editor 에서 캡처
◆◆ Dot Matrix, AVR, ATmega128 : LED shift 표시 P.337 ◆◆
/*
Dot Matrix ( 8 x 8 ) P.337
적색 LED all ON ,
왼쪽 - 오른쪽 을 세로로 청색 LED 채워지게
0223F_DotMatrix_p337.c
*/
#include <mega128.h>
#include <delay.h>
void Delay(unsigned int);
void main(void)
{
unsigned char Leda = 0xaa; // LED 초기 출력값
unsigned char Ledb = 0xff;
unsigned char Ledc = 0xff;
DDRA = 0xff;
DDRB = 0xff;
DDRC = 0xff;
while(1){
PORTA = Leda;
PORTB = Ledb;
PORTC = Ledc;
Delay(70);
Leda <<= 1;
Leda |= 0x01;
if( Leda == 0xff ) Leda = 0x55;
}//endwhile
}//end main
void Delay(unsigned int cnt){
unsigned int i, j;
for( i = 0 ; i < cnt ; i++){
j = 50000;
while(--j);
}//endfor
}//endDelay
◆◆ Dot Matrix, AVR, ATmega128 : LED 하나씩 뺑뺑이 표시 P.338 ◆◆
/*
Dot Matrix ( 8 x 8 ) P.338
(0,0) -> (8,8) LED 이동 ( 뺑뺑이)
0223G_DotMatrix_p338.c
*/
#include <mega128.h>
#include <delay.h>
#define S 50
int Green[8] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };
int Comm[8] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };
int i = 0;
void main(void)
{
DDRA = 0xff; // RED
DDRC = 0xff; // GREEN
DDRB = 0xff; // Common
while(1){
for( i = 0; i < 8 ; i++){ // 세로
PORTC = Green[0];
PORTB = Comm[i];
delay_ms(S);
}//endfor
for( i = 1 ; i < 8 ; i++){ // 가로
PORTC = Green[i];
PORTB = Comm[7];
delay_ms(S);
}//endfor
for( i = 6 ; i > 0 ; i--){ // 세로
PORTC = Green[7];
PORTB = Comm[i];
delay_ms(S);
}//endfor
for( i = 7 ; i >0 ; i--){ // 가로
PORTC = Green[i];
PORTB = Comm[0];
delay_ms(S);
}//endfor
for( i = 1 ; i < 7 ; i++){ // 세로
PORTC = Green[1];
PORTB = Comm[i];
delay_ms(S);
}//endfor
for( i = 2; i <7 ; i++){ // 가로
PORTC = Green[i];
PORTB = Comm[6];
delay_ms(S);
}//endfor
for( i = 5; i> 0 ; i--){ // 세로
PORTC = Green[6];
PORTB = Comm[i];
delay_ms(S);
}//endfor
for( i = 6 ; i> 1 ; i--){ // 가로
PORTC = Green[i];
PORTB = Comm[1];
delay_ms(S);
}//endfor
for( i = 2 ; i <6 ; i++){ // 세로
PORTC = Green[2];
PORTB = Comm[i];
delay_ms(S);
}//endfor
for( i = 3 ; i < 6 ; i++){ // 가로
PORTC = Green[i];
PORTB = Comm[5];
delay_ms(S);
}//endfor
for( i = 4 ; i > 1 ; i--){
PORTC = Green[5];
PORTB = Comm[i];
delay_ms(S);
}//endfor
for( i = 4; i > 2 ; i--){
PORTC = Green[i];
PORTB = Comm[2];
delay_ms(S);
}//endfor
for( i = 3 ; i < 5 ; i++){
PORTC = Green[3];
PORTB = Comm[i];
delay_ms(S);
}//endfor
for( i = 4 ; i< 5 ; i++){
PORTC = Green[i];
PORTB = Comm[4];
delay_ms(S);
}//endfor
for( i = 4 ; i > 2; i--){
PORTC = Green[4];
PORTB = Comm[i];
delay_ms(S);
}//endfor
}//endwhile
}//end main
'Edu > 유비쿼터스설비제어과정' 카테고리의 다른 글
Timer Count, TC 1.3, AVR, ATmega128 - 0308 (0) | 2011.03.08 |
---|---|
Timer Count , ATmega128, AVR - 3034 (2) | 2011.03.04 |
Timer Count, AVR, ATmega128 - 0302 (0) | 2011.03.02 |
Dot Matrix, ATmega128, AVR - 0228 (0) | 2011.02.28 |
Dot Matrix, 8 x 8 , ATmega128 - 0224 (0) | 2011.02.24 |
전자사이크로회로, 미분회로, 4017 - 0222 (0) | 2011.02.22 |
미_ 채널전환회로, 디지털회로, RS래치 펄스 발생회로, 카운터회로, 디코더회로, 비안정 발진회로 및 스피커 구동회로 - 0221 (0) | 2011.02.21 |
ATmega128 : Stepping Motor, 정회전, 역회전 - 0218 (0) | 2011.02.18 |
ATmega128, AVR, Stepping Motor, 모터, 정회전, 역회전 - 0217 (0) | 2011.02.18 |
ATmega128, Interrupt, 제어, 응용 - 0216 (0) | 2011.02.16 |