BASIC4MCU | 질문게시판 | 답변 : ATMEGA128의 TPK-128보드를 사용해 도어락을 만들고 있습니다.
페이지 정보
작성자 master 작성일2022-12-01 08:19 조회619회 댓글0건본문
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <util/delay.h>
//
unsigned char SEG[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char g_Dig1=0,g_Dig2=0,g_Dig3=0,g_Dig4=0;
unsigned char keyvalue=0x0F,lastkeyvalue=0x0F;
//
void Setting(){
DDRC=0xff;
PORTA=0xf0; DDRA=0x0f;
PORTD=0x55; DDRD=0xff;
}
//
void DisplayFND(){
char c;
for(c=0;c<50;c++){ // 4ms*50=200ms
PORTC=SEG[g_Dig1]; PORTD=1; _delay_ms(1); PORTD=0;
PORTC=SEG[g_Dig2]; PORTD=2; _delay_ms(1); PORTD=0;
PORTC=SEG[g_Dig3]; PORTD=4; _delay_ms(1); PORTD=0;
PORTC=SEG[g_Dig4]; PORTD=8; _delay_ms(1); PORTD=0;
}
}
//
void Mainfile(){ // 스위치 누르면 값 증가,만약 9가 넘어가면 초기화
keyvalue=PINA>>4; // 스위치 값 변경 시
if(keyvalue!=lastkeyvalue){
if((lastkeyvalue&1)&&!(keyvalue&1)){ if(++g_Dig1>9)g_Dig1=0; }
if((lastkeyvalue&2)&&!(keyvalue&2)){ if(++g_Dig2>9)g_Dig2=0; }
if((lastkeyvalue&4)&&!(keyvalue&4)){ if(++g_Dig3>9)g_Dig3=0; }
if((lastkeyvalue&8)&&!(keyvalue&8)){ if(++g_Dig4>9)g_Dig4=0; }
lastkeyvalue=keyvalue;
}
}
//
int main(){
Setting();
while(1){
Mainfile();
DisplayFND();
}
}
채터링 방지 딜레이가 필요합니다.
세그먼트 표시를 200ms 동안 반복하였으며, 이 시간이 채터링 방지용 딜레이 역할을 하게 됩니다.
댓글 0
조회수 619등록된 댓글이 없습니다.