BASIC4MCU | 질문게시판 | 답변 : atmega128 4bit LCD 스톱워치
페이지 정보
작성자 master 작성일2018-12-04 21:44 조회3,863회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=6307
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-12-04 오후 9:48:21// by Ok-Hyun Park//#include <avr/interrupt.h>#include <avr/io.h>#define F_CPU 16000000L#include <util/delay.h>//#define LCD_WDATA PORTA#define LCD_WINST PORTA#define LCD_CTRL PORTD#define LCD_EN 0#define LCD_RW 1#define LCD_RS 2//#define Byte unsigned char//volatile Byte flag=0,sec=0,min=0,hour=24;//void LCD_DATA(Byte ch){LCD_WDATA=ch; LCD_CTRL|=(1<<LCD_RS); LCD_CTRL&=~(1<<LCD_RW);LCD_CTRL|=(1<<LCD_EN); _delay_us(1); LCD_CTRL&=~(1<<LCD_EN); _delay_us(50);}//void LCD_Comm(Byte ch){LCD_WINST=ch; LCD_CTRL&=~(1<<LCD_RS); LCD_CTRL&=~(1<<LCD_RW);LCD_CTRL|=~(1<<LCD_EN); _delay_us(1); LCD_CTRL&=~(1<<LCD_EN); _delay_ms(5);}//void LCD_CHAR(Byte c){ LCD_DATA(c); }void LCD_STR(Byte *s){ while(*s)LCD_CHAR(*s++); }void LCD_pos(Byte c,Byte r){ LCD_Comm(0x80|(r+c*0x40)); }void LCD_Clear(void){ LCD_Comm(0x01); _delay_ms(2); }//void LCD_init(void){_delay_ms(50);LCD_Comm(0x38); LCD_Comm(0x38); LCD_Comm(0x38);LCD_Comm(0x0E); LCD_Comm(0x06); LCD_Clear();}//ISR(TIMER0_COMP_vect){if(++sec>59){ sec=0;if(++min>59){ min=0; if(++hour>23)hour=0; }}flag=1;}//int main(void){Byte str1[]="Current Time",str2[]="00: 00: 00";//DDRA=0xFF; DDRD=0x0F;LCD_init();LCD_pos(0,0); LCD_STR(str1);LCD_pos(1,0); LCD_STR(str2);TCCR1B=0x0D; OCR1A=15624; TIMSK=0x10; //1secSREG=0x80;while(1){if(flag){ flag=0;LCD_pos(0,1); LCD_CHAR((hour/10)+'0'); LCD_CHAR((hour%10)+'0');LCD_pos(4,1); LCD_CHAR((min /10)+'0'); LCD_CHAR((min %10)+'0');LCD_pos(8,1); LCD_CHAR((sec /10)+'0'); LCD_CHAR((sec %10)+'0');}}}시계
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-12-04 오후 9:44:19// by Ok-Hyun Park//#include <avr/interrupt.h>#include <avr/io.h>#define F_CPU 16000000L#include <util/delay.h>//#define LCD_WDATA PORTA#define LCD_WINST PORTA#define LCD_CTRL PORTD#define LCD_EN 0#define LCD_RW 1#define LCD_RS 2//#define Byte unsigned char//volatile Byte run=0,flag=0,ms=0,sec=0,min=0;//void LCD_DATA(Byte ch){LCD_WDATA=ch; LCD_CTRL|=(1<<LCD_RS); LCD_CTRL&=~(1<<LCD_RW);LCD_CTRL|=(1<<LCD_EN); _delay_us(1); LCD_CTRL&=~(1<<LCD_EN); _delay_us(50);}//void LCD_Comm(Byte ch){LCD_WINST=ch; LCD_CTRL&=~(1<<LCD_RS); LCD_CTRL&=~(1<<LCD_RW);LCD_CTRL|=~(1<<LCD_EN); _delay_us(1); LCD_CTRL&=~(1<<LCD_EN); _delay_ms(5);}//void LCD_CHAR(Byte c){ LCD_DATA(c); }void LCD_STR(Byte *s){ while(*s)LCD_CHAR(*s++); }void LCD_pos(Byte c,Byte r){ LCD_Comm(0x80|(r+c*0x40)); }void LCD_Clear(void){ LCD_Comm(0x01); _delay_ms(2); }//void LCD_init(void){_delay_ms(50);LCD_Comm(0x38); LCD_Comm(0x38); LCD_Comm(0x38);LCD_Comm(0x0E); LCD_Comm(0x06); LCD_Clear();}//ISR(TIMER1_COMPA_vect){ // 10msif(run){if(++ms>99){ ms=0;if(++sec>59){ sec=0; if(++min>59)min=0; }}flag=1;}}//ISR(INT4_vect){ run^=1; } // stop/start//ISR(INT5_vect){ run=flag=ms=sec=min=0; } // reset//int main(void){Byte str1[]="Current Time",str2[]="00: 00: 00";//PORTE=0xF0; DDRA=0xFF; DDRD=0x0F;LCD_init();LCD_pos(0,0); LCD_STR(str1);LCD_pos(1,0); LCD_STR(str2);TCCR1A=0x40; TCCR1B=0x0A; TCCR1C=0x80; OCR1A=9999; // 10msEICRB=0xAA; EIFR=0xFF; EIMSK=0x30; // falling edgeSREG=0x80;while(1){if(flag){ flag=0;LCD_pos(0,1); LCD_CHAR((min/10)+'0'); LCD_CHAR((min%10)+'0');LCD_pos(4,1); LCD_CHAR((sec/10)+'0'); LCD_CHAR((sec%10)+'0');LCD_pos(8,1); LCD_CHAR((ms /10)+'0'); LCD_CHAR((ms %10)+'0');}}}스톱워치
댓글 0
조회수 3,863등록된 댓글이 없습니다.