#include <mega128.h>
#include "delay.h"
#include "lcd.h"
void LCD_Decimal(unsigned char num, short AD_dat){
unsigned char Decimal[5];
Decimal[4] = '0' + AD_dat / 10000; //10000자리 아스키 값으로 저장
AD_dat = AD_dat % 10000; //나머지값
Decimal[3] = '0' + AD_dat / 1000; //1000자리 아스키 값으로 저장
AD_dat = AD_dat % 1000; //나머지값
Decimal[2] = '0' + AD_dat / 100; //100자리 아스키 값으로 저장
AD_dat = AD_dat % 100; //나머지값
Decimal[1] = '0' + AD_dat / 10; //10자리 아스키 값으로 저장
AD_dat = AD_dat % 10; //나머지값
Decimal[0] = '0' + AD_dat / 1; //1자리 아스키 값으로 저장
if(num == 0){
LCD_pos(0,10); LCD_Data(Decimal[3]);
//LCD 10번째 칸 0번째 열에 1000자리 표시
LCD_pos(0,11); LCD_Data(Decimal[2]);
//LCD 11번째 칸
LCD_pos(0,12); LCD_Data(Decimal[1]);
LCD_pos(0,13); LCD_Data(Decimal[0]);
}
else if(num == 1){
LCD_pos(1,10); LCD_Data(Decimal[4]);
LCD_pos(1,11); LCD_Data('.');
LCD_pos(1,12); LCD_Data(Decimal[3]);
LCD_pos(1,13); LCD_Data(Decimal[2]);
LCD_pos(1,14); LCD_Data(Decimal[1]);
LCD_pos(1,15); LCD_Data(Decimal[0]);
LCD_pos(1,16); LCD_Data('V');
}
}
void AD_init(){
ADMUX |= (1<<REFS1)|(1<<REFS0); //MUX0~4 = 00000
ADCSRA |= (1<<ADEN)|(1<<ADSC)|(1<<ADFR); //free running 모드로 동작위해
}
void main(){
short Voltage = 0;
AD_init();
PortInit(); //lcd.h에 있음
LCD_Init(); //lcd.h에 있음
//A/D 데이터 전압으로 변환
LCD_pos(0,0);
LCD_STR("Voltage : ");
LCD_pos(1,0);
LCD_STR("R.Value : ");
while(1){
Voltage = (short)((0.0025 * ADCW) * 10000);
LCD_Decimal(0,ADCW); //AD 데이터
LCD_Decimal(1,Voltage); //전압값
delay_ms(100);
}
}
'학교 > M.P.' 카테고리의 다른 글
문자출력(출력 - 그래픽LCD) (0) | 2015.12.16 |
---|---|
방향출력(입력 - 스위치, 출력 - LCD2줄) (0) | 2015.12.16 |
시간출력(출력 - LCD2줄) (0) | 2015.12.16 |
LCD출력(출력 - LCD2줄) (0) | 2015.12.16 |