BASIC4MCU | 질문게시판 | 코드 질문이요!!
페이지 정보
작성자 초짜 작성일2018-11-07 03:26 조회1,083회 댓글0건본문
#include <mega128a.h>
#include <delay.h>
#include <stdio.h>
#define ENABLE PORTA.2
#define DISPONE 0x0C
#define ALLCLR 0x01
#define FUNCSET 0x28
#define HOME 0x02
#define ENTMODE 0x06
#define LINE1 0x80
#define LINE2 0xC0typedef unsigned char U8;
U8 seg[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f};
U8 word[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
U8 STUDENT_ID[16];
U8 word_wk[16];
U8 work_choose[] = "NULL";
U8 TEMP1, TEMP10, TEMP100;
U8 Temperature[16];int N1 =0, N10 = 0, N100 = 0, N1000=0;
int pos =0;
int LCD = 0;
int start = 0;
int choce_word1 = 0, choce_word2 = 0, choce_word3 = 0, choce_word4 = 0;
int word_pos = 0;
int press_sw7 = 0;
int ad_val;void Seg_Coordinates(void);
void initial_value(void);
void Password(void);
void Log_out(void);
void Command(U8);
void Data(U8);
void LCD_initial(void);
void LCD_String(char flash*);
void LCD_Stringf(char*);
void Work(void);
void AD_disp(int);
void Temperature_while(void);void main()
{
initial_value();
LCD_initial();
while (1)
{Seg_Coordinates();
if(start ==3){
Temperature_while();
}
}
}interrupt [EXT_INT4] void interrupt_INT4(void)
{
if(start == 0)
{
if(pos == 0){
N1 = (N1+1)%10;
}
else if(pos == 1){
N10 = (N10+1)%10;
}
else if(pos == 2){
N100 = (N100+1)%10;
}
else{
N1000 = (N1000+1)%10;
}
}
else if (start > 0 && start<3){
start =2;
if(word_pos ==0){
choce_word1 = (choce_word1 +1)%26;
}
else if(word_pos ==1){
choce_word2 = (choce_word2 +1)%26;
}
else if(word_pos ==2){
choce_word3 = (choce_word3 +1)%26;
}
else if(word_pos ==3){
choce_word4 = (choce_word4 +1)%26;
}
Work();
}
}
interrupt [EXT_INT5] void intterupt_INT5(void)
{
if(start ==0)
{
if(pos == 0){
if(N1 ==0){
N1 = 10;
}
N1 = (N1-1)%10;
}
else if(pos == 1){
if(N10 ==0){
N10 = 10;
}
N10 = (N10-1)%10;
}
else if(pos == 2){
if(N100 ==0){
N100 = 10;
}
N100 = (N100-1)%10;
}
else{
if(N1000 ==0){
N1000 = 10;
}
N1000 = (N1000-1)%10;
}
}
else if(start >0)
{
if(word_pos == 0){
if(choce_word1 ==0){
choce_word1 = 26;
}
choce_word1 = (choce_word1-1)%26;
}
else if(word_pos == 1){
if(choce_word2 ==0){
choce_word2 = 26;
}
choce_word2 = (choce_word2-1)%26;
}
else if(word_pos == 2){
if(choce_word3 ==0){
choce_word3 = 26;
}
choce_word3 = (choce_word3-1)%26;
}
else if(word_pos == 3){
if(choce_word4 ==0){
choce_word4 = 26;
}
choce_word4 = (choce_word4-1)%26;
}
Work();
}}
interrupt [EXT_INT6] void intterupt_INT6(void)
{
if(start ==0){pos = (pos+1)%4;}
if(start > 0){word_pos = (word_pos+1)%4;}
}interrupt [TIM0_COMP] void sw7(void)
{if(!PINE.7){
press_sw7++;
}
else{
if(press_sw7>10){
if(start == 0) Password();
else if(start == 1){
if(press_sw7 < 200) Work();
else Log_out();
}
else if(start ==2){
if(press_sw7 < 50){
if(word[choce_word1]== 'T' && word[choce_word2] =='E' && word[choce_word3] == 'M' && word[choce_word4] == 'P'){
start =3;
sprintf(work_choose, "Temp");
Command(LINE1);
LCD_String("YOUR CHOOSE TEMP");
}
}
else{
start =1;
Password();
}
}
else if(start ==3){
if(press_sw7 < 200){
sprintf(work_choose, "NULL");
start =2;
Command(LINE2);
LCD_String(" ");
Work();
}
}
press_sw7 = 0;
}
}
}void initial_value(void){
DDRC = 0xFF;
DDRB = 0xF0;
DDRD = 0xF0;
DDRG = 0x0F;
DDRA = 0xFF;
DDRE = 0x0;PORTG = 0x08;
PORTB = 0x0;
PORTD = 0x0;
PORTC = 0xFF;
PORTA = 0x00;TIMSK=0x02;
TCCR0 = 0x0F;
OCR0 = 155;
TCNT0 =0x0;EIMSK = 0x70;
EICRB = 0b10101010;
SREG = 0x80;
ADMUX = 0x07;
ADCSRA = 0xE7;}
void LCD_initial(void){
delay_ms(15);
Command(0x20);
delay_ms(5);
Command(0x20);
delay_us(100);
Command(0x20);
Command(DISPONE);
Command(ALLCLR);
Command(FUNCSET);
Command(ENTMODE);}
void Password(void){
start = 1;
if(N100 ==2 && N1000 == 2){
start = 1;
Command(LINE1);
LCD_String("HELLOW! WORLD! ");
Command(LINE2);
sprintf(STUDENT_ID,"HELLOW! ID: %u%u%u%u ",N1000, N100, N10, N1);
LCD_Stringf(STUDENT_ID);
}
else{
N1 = 0;
N10 = 0;
N100 = 0;
N1000 = 0;
for(LCD = 0; LCD<4; LCD++){
if(LCD%2 == 0) PORTC = 0x00;
else{PORTC = 0xFF;}
delay_ms(100);
}
}
}void Seg_Coordinates(void){
if(start == 0){
PORTG = 0x08;
PORTB = (seg[N1] & 0x70) | (PORTB & 0x0F);
PORTD = ((seg[N1] & 0x0F) <<4) | (PORTD &0x0F);
delay_ms(5);
PORTG = 0x04;
PORTB = (seg[N10] & 0x70) | (PORTB & 0x0F);
PORTD = ((seg[N10] & 0x0F) <<4) | (PORTD &0x0F);
delay_ms(5);
PORTG = 0x02;
PORTB = (seg[N100] & 0x70) | (PORTB & 0x0F);
PORTD = ((seg[N100] & 0x0F) <<4) | (PORTD &0x0F);
delay_ms(5);
PORTG = 0x01;
PORTB = (seg[N1000] & 0x70) | (PORTB & 0x0F);
PORTD = ((seg[N1000] & 0x0F) <<4) | (PORTD &0x0F);
delay_ms(5);
}
else if(start>0){
PORTG = 0x0F;
PORTB = (seg[7] & 0x70) | (PORTB & 0x0F);
PORTD = ((seg[7] & 0x0F) <<4) | (PORTD &0x0F);
}
}void Log_out(void){
start = 0;
N1 = 0;
N10 = 0;
N100 = 0;
N1000 = 0;
for(LCD = 0; LCD<4; LCD++){
if(LCD%2 == 0) PORTC = 0x00;
else{PORTC = 0xFF;}
delay_ms(100);
Command(LINE1);
LCD_String(" ");
Command(LINE2);
LCD_String(" ");
}
}void LCD_String(char flash *s){
while (*s)Data(*s++);
}
void LCD_Stringf(char *s){
while (*s)Data(*s++);
}
void Command(U8 byte){
delay_ms(2);PORTA = 0x00;
PORTA = (byte & 0xF0); ENABLE =1; delay_us(1); ENABLE =0;
PORTA = (byte << 4); ENABLE =1; delay_us(1); ENABLE =0;}
void Data(U8 byte){
delay_ms(2);PORTA = 0x01;
PORTA = (byte & 0xF0)|0x01; ENABLE =1; delay_us(1); ENABLE =0;
PORTA = (byte << 4)|0x01; ENABLE =1; delay_us(1); ENABLE =0;}
void Work(void){
start =2;Command(LINE1);
LCD_String("Do you wont work?");
Command(LINE2);
LCD_String(" ");
Command(LINE2);
sprintf(word_wk,"=> %c%c%c%c", word[choce_word1], word[choce_word2], word[choce_word3], word[choce_word4]);
LCD_Stringf(word_wk);
sprintf(STUDENT_ID," ID: %u%u%u%u ",N1000, N100, N10, N1);
LCD_Stringf(STUDENT_ID);
}void Temperature_while(void){
ADCSRA = 0xC7;
ad_val = (int)ADCL + ((int)ADCH<<8);
AD_disp(ad_val);
}
void AD_disp(int val){
float fval;
int ival, buf, i;fval = (float)val*5.0/1024.0;
ival = (int)(fval*1000 +0.5);for(i =0; i<29; i++){
TEMP100 = ival/100;
buf = ival%100;
TEMP10 = buf/10;
TEMP1 = buf%10;
delay_ms(10);
}
Command(LINE2);
if(start ==3){
sprintf(Temperature,"TEMP: %u%u.%u C ",TEMP100, TEMP10, TEMP1);
LCD_Stringf(Temperature);
}}
이게 실행을 시키면 온도센서를 제고 뒤로 돌아왔을때 N1000에 3이 추가되서 오류가 생기네요 ㅠㅠ
왜 온도센서파일만 갔다오면 N1000에만 오류가 생기는지..그것땜에 전체가 오류로 걸리네요 ㅜㅜ
댓글 0
조회수 1,083등록된 댓글이 없습니다.