BASIC4MCU | 질문게시판 | 답변 : LCD 7segment switch 인터럽트함수 변수제어
페이지 정보
작성자 master 작성일2022-10-23 09:21 조회2,384회 댓글0건본문
#include <iom128v.h>
#include <avrdef.h>
//
unsigned char FND_DATA_TBL []={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7C,0x07,0x7F,0x67};
//
char X,Y;
//
void delay_ms(unsigned int m){ unsigned int i,j; for(i=0;i<m;i++)for(j=0;j<2000;j++); }
void delay_us(unsigned int u){ unsigned int i,j; for(i=0;i<u;i++)for(j=0;j< 2;j++); }
//
void write_inst(char i){ PORTC=i; PORTB=4; delay_us(1); PORTB=0; delay_ms( 2); }
void write_data(char d){ PORTC=d; PORTB=5; delay_us(1); PORTB=1; delay_us(40); }
void write_str(char *s){ while(*s)write_data(*s++); }
//
void init_lcd(){
delay_ms(15);
write_inst(0x30); write_inst(0x30); write_inst(0x30); write_inst(0x3c);
write_inst(0x08); write_inst(0x01); write_inst(0x06); write_inst(0x0C);
}
//
#pragma interrupt_handler int0_isr:iv_INT0
void int0_isr(){
if(++x>=10){ x=0; if(++y>=10)y=0; }
write_inst(0x83); write_data(Y+'0');
write_inst(0xc3); write_data(X+'0');
PORTE=FND_DATA_TBL[x];
PORTF=FND_DATA_TBL[y];
delay_ms(100); EIFR=0xFF;
}
//
#pragma interrupt_handler int1_isr:iv_INT1
void int1_isr(){
if(++y>=10)y=0;
write_inst(0x83); write_data(Y+'0');
PORTF=FND_DATA_TBL[y];
delay_ms(100); EIFR=0xFF;
}
//
int main(void){
char x=0,y=0;
DDRA=0x0f; DDRC=0xff; DDRB=0x07; DDRE=0xff; DDRF=0xff;
init_lcd();
write_inst(0x80); write_str("10:0 ");
write_inst(0xc0); write_str("01:0 ");
EICRA=0x0A; EIMSK=0x03; SEI();
while(1){}
return 0;
}
댓글 0
조회수 2,384등록된 댓글이 없습니다.