본문 바로가기
코스웨어/16년 스마트컨트롤러

2016-05-19_조재찬_업무일지_ AVR-LCD출력 & C#-성적관리 프로그램

by 알 수 없는 사용자 2016. 5. 20.
728x90
반응형
#include <avr/io.h>
#include <util/delay.h>

#define  CLR   0x01      //Clear Display 명령
#define  HOME  0x02      //Return Home 명령 
#define  FNC   0x38      //Function Set 명령
                		 //Data Length = 8bit. 행수 2행


void LCD_PortSetting(void)
{
  DDRC = 0xFF;        //데이터 라인
  DDRD = 0xFF;        //0~2 제어핀 사용
  //D0: RS ,D1: R/W ,D2: EN
}

void IR_Write(unsigned char Data)  
{
  PORTD &= 0xFC;    //RS = 0, Write Enable
  _delay_us(1);    //Enable 까지 최소 대기 시간 40ns
  PORTD |= 0x04;    //Enable 활성화
  _delay_us(1);    //
  PORTC = Data;    //Data
  _delay_us(1);
  PORTD = 0b00000010;  //Disable, Read Mode  

}

void DR_Write(unsigned char Data)
{
  PORTD = 0x01;    //RS = 1, Write Enable
  _delay_us(1);    //Enable 까지 최소 대기 시간 40ns
  PORTD |= 0x04;    //Enable 활성화
  _delay_us(1);    //
  PORTC = Data;    //Data
  _delay_us(1);
  PORTD = 0b00000010;  //Disable, Read Mode  
}

void LCD_drive()
{
  _delay_ms(50);
  IR_Write(FNC);
  _delay_ms(5);
  IR_Write(FNC);
  _delay_us(100);
  IR_Write(FNC);
  _delay_ms(2);
  IR_Write(0x0E);	// Display On / Off, 	DDRAM, 커서 ON
  _delay_ms(2);  
  IR_Write(CLR);	// Display Clear
  _delay_ms(30);
  IR_Write(0x06);	// Entry Mode Set, 커서위치를 오른쪽으로 증가
  _delay_ms(2);
}

int main(void)
{
  LCD_PortSetting();
  LCD_drive();
  DR_Write(65);
  _delay_ms(2);
  DR_Write('D');

  while(1)
  {     
  }
  return 0;
}

Output :

LCD에 D 출력




#include <avr/io.h>
#include <util/delay.h>

#define CLR    0x01 // Return Home 명령
#define HOME  0x02 // Function Set 명령
#define FNC    0x38 // Data Length 8 bit 

void LCD_PortSetting(void)
{
  DDRC = 0xFF; // 데이터 라인
  DDRD = 0xFF; // 0 ~ 2 제어 핀 사용
  // 00: RS, 01: R/W, 02: En
}

void IR_Write(unsigned char Data)
{
  PORTD &= 0xFC; // RS = 0, Write Enable

  _delay_us(1); // Enable 까지 최소 대기 시간 40ns
  PORTD |= 0x04; // En

  _delay_us(1);
  PORTC = Data;

  _delay_us(1);
  PORTD = 0b00000010; // Disable. Read Mode
}

void DR_Write(unsigned char Data)
{
  PORTD = 0x01; // RS = 1, Write Enable

  _delay_us(1); // Enable 까지 최소 대기 시간 40ns
  PORTD |= 0x04; // En

  _delay_us(1);
  PORTC = Data;

  _delay_us(1);
  PORTD = 0b00000010; // Disable. Read Mode
}

void LCD_drive()
{
  _delay_ms(50); // 
  IR_Write(FNC);

  _delay_ms(5);
  IR_Write(FNC);
  
  _delay_us(100);
  IR_Write(FNC);
  _delay_ms(2);

  IR_Write(0x0E); // Display on/off DDRAM, 커서를 화면에 표시
  _delay_ms(2);


  IR_Write(CLR); // Display Clear
  _delay_ms(30);

  IR_Write(0x06); // Entry module set 명령. 오른쪽으로 커서 이동.
  _delay_ms(2);
}

void LCD_CHAR(unsigned char a)
{
  _delay_ms(1); // 명령어 쓰기 전 일정 시간 지연
  DR_Write(a); // 사유: Busy Flage 확인 대용
}

void cursor_HOME(void)
{
  IR_Write(0x02);
  _delay_ms(2);
}

void Display_Shift(unsigned char p)
{
  if(p == 1) // 표시화면 전체를 오른쪽으로 이동.
  {
    IR_Write(0x1C); // 화면 표시 내용을 오른쪽으로 이동.
    _delay_us(50);
  }

  else if(p == 0)
  {
    IR_Write(0x18); // 화면 표시 내용을 오른쪽으로 이동.
    _delay_us(50);    
  }
}

void LCD_STR(unsigned char *str)
{
  while(*str != 0)	// 0은 null, 값이 들어오면 
  {
    LCD_CHAR(*str);
    str++;
  }
}

void Position(unsigned char col, unsigned char row)	// 열과 행 
{
	IR_Write(0x80 | row+col*(0x40));
}

int main(void)
{
  LCD_PortSetting();
  LCD_drive();
  /*
  DR_Write(65);
  DR_Write('B');
  */
  Position(1,1);
  LCD_STR("JO JAE CHAN");
  //Display_Shift(1);

  while(1)
  {

  }

  return 0;
}

Output :





C# 성적관리 프로그램

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Student_Score
{
    class STUDENT
    {
        public string name;
        public int Kor;
        public int Eng;
        public int Tot;
        public double ag;
        public int grd;

        public string Total(string a, string b)
        {
            string temp = (int.Parse(a) + int.Parse(b)).ToString();
            return temp;
        }
        public string Avg(string a, string b)
        {
            string temp = ((int.Parse(a) + int.Parse(b)) / 2).ToString();
            return temp;
        }
        public string Grade(double ag)
        {
            string grade;
            if (90 <= ag)
                grade = "A";
            else if (80 <= ag)
                grade = "B";
            else if (70 <= ag)
                grade = "C";
            else
                grade = "F";
            return grade;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("학생정보 입력");

            STUDENT s1 = new STUDENT();

            Console.Write("이름 : ");
            s1.name = Console.ReadLine();

            Console.Write("국어성적 : ");
            s1.Kor = int.Parse(Console.ReadLine());

            Console.Write("영어성적 : ");
            s1.Eng = int.Parse(Console.ReadLine());

            s1.Tot = s1.Kor + s1.Eng;
            s1.ag = (s1.Kor + s1.Eng) / (double)2;

            Console.WriteLine("====================================================================================");
            Console.WriteLine("이름" + "\t" + "국어" + "\t" + "영어" + "\t" + "총점" + "\t" + "평균" + "\t" + "등급");
            Console.WriteLine(s1.name + "\t" + s1.Kor + "\t" + s1.Eng + "\t" + s1.Tot + "\t" + s1.ag + "\t" + s1.Grade(s1.ag));
        }


    }
}

Output :




728x90