회원가입 ID/PW 찾기
AA

제가 요번에 전자계산기 제어 산업기사를 보게 되서 실기를 연습 중입니다..
그래서 이렇게 연습을 하게 되었는데요.
일단 프로그램이 동작은 되기는 합니다..
근데 키를 여러번 눌러야지 반응 하거나 누르고 조금 기다려야지 반응을 보입니다..
조금 빠르게 반응 하게 하는 방법은 없을까요..?
그리고 232통신을 하게 되면 데이터가 송신은 하는데, 계속 송신되서 스크롤이 아래로 내려갑니다..
송신을 한번만 하게 하거나 계속 처음 자리에서 출력되게 하는 방법은 없을까요??

#include <io51.h>

#define RS P3.4
#define RW P3.5
#define E  P3.6

bit sw0 = P0.4;
bit sw1 = P0.5;
bit sw2 = P0.6;
bit sw3 = P0.7;

unsigned int keyvalue = 0x0f;

void delay_ms(unsigned int ms)
{
  unsigned int i,cnt;
  for(i=0; i<ms; i++)
    for(cnt=0; cnt<230; cnt++);
}

void delay(unsigned int del)
{
  while(del--);
}

void lcd_cmd(char ch)
{
  RS=0;
  RW=0;
  E=1;
  delay(10);
  P1=ch;
  E=0;
}

void lcd_putc(char ch)
{
  RS=1;
  RW=0;
  E=1;
  delay(10);
  P1=ch;
  E=0;
}

void lcd_puts(char *p)
{
  unsigned char ch;
  while(ch=*p++) lcd_putc(ch);
}

void lcd_clr(void)
{
  lcd_cmd(0x01);
}

void lcd_xy(int x, int y)
{
  if(y==0) lcd_cmd(x+0x80);
  if(y==1) lcd_cmd(x+0xc0);
}

void lcd_init(void)
{
     delay_ms(100);
     lcd_cmd(0x38);   // Function Set
     delay_ms(10);
     lcd_cmd(0x0C);   // Display On/Off
     delay_ms(3);
     lcd_cmd(0x01);   // Display Clear
     lcd_cmd(0x06);   // Entry Mode Set

}

void keycheck(void)
{
  unsigned int key;
  sw0=0; sw1=1; sw2=1; sw3=1;
  key=(P0 & 0x0f);
  if(key != 0x0f){
    switch(key){
      case 0x0d : keyvalue=0x01; break;
      case 0x0b : keyvalue=0x02; break;
      case 0x07 : keyvalue=0x03; break;
      }
  }
}

void txd(unsigned char ch)
{
 while(!TI);
 TI=0;
 SBUF = ch;
}

void usart_puts(char *p)
{
 unsigned char ch;
 while(ch=*p++) txd(ch);
}

void usart_init(void)

        TMOD = 0x20;
        TH1 = 0xfa;
        TCON = 0x40;
        IE = 0x90;
        PCON = 0x00;
        SCON = 0x53;
}

void main(void)
{
  lcd_init();
  lcd_clr();

  usart_init();
 
  delay_ms(100);
     
  lcd_xy(0,0);
  lcd_puts("DATA...SYSTEM");

  lcd_xy(0,1);
  lcd_puts("DATA INPUT");
 
  delay_ms(2000);
 
  lcd_xy(0,0);
  lcd_puts("12345678       ");
  lcd_xy(0,1);
  lcd_puts("HHHHHHHH       ");
   
  do{
 
    //keyvalue=0x0f;
    keycheck();
    if(keyvalue != 0x0f){
      switch(keyvalue){
        case 1:
          lcd_xy(0,0);
          lcd_puts("12345678       ");
          lcd_xy(0,1);
          lcd_puts("LHHHHHHH       ");
 
          keyvalue = 0x0f;
 
        break;
       
        case 2:
          lcd_xy(0,0);
          lcd_puts("12345678       ");
          lcd_xy(0,1);
          lcd_puts("LHLHLHLH       ");

          usart_puts("12345678");
          txd(0x0A); // 커서를 아래로 내려준다.
          txd(0x0D); // 커서를 맨 앞으로 보내준다.      

          usart_puts("LHLHLHLH");
          txd(0x0A); // 커서를 아래로 내려준다.
          txd(0x0D); // 커서를 맨 앞으로 보내준다.       */
         

          keyvalue = 0x0f;
           
        break;
       
        case 3:
          lcd_xy(0,0);
          lcd_puts("12345678       ");
          lcd_xy(0,1);
          lcd_puts("HLHLHLHL       ");

          usart_puts("12345678"); 
          txd(0x0A); // 커서를 아래로 내려준다.
          txd(0x0D); // 커서를 맨 앞으로 보내준다. 

          usart_puts("HLHLHLHL");
          txd(0x0A); // 커서를 아래로 내려준다.
          txd(0x0D); // 커서를 맨 앞으로 보내준다. 
                  
          keyvalue = 0x0f;

        break;
      }
    }     
  }while(1);
}

댓글 6

하드웨어 설계 및 개발에 대하여 개발자들이 자유롭게 토론하는 공간입니다.
- Q&A, 자유주재 토론, 관련 정보 공유
- 분야 : 마이크로프로세서 응용, 전기/전자(아날로그/디지털) 회로 설계, C/C++ 프로그래밍, 펌웨어,
         PCB Artwork, 트러블슈팅 등 하드웨어 설계에 관한 전반인 내용
※ 게시글에 맞는 분류를 선택하여 글을 작성해 주시면 쾌적한 사이트 운영에 많은 도움이 됩니다.
※ 하드웨어 인사이트는 회원들간의 거래정보를 게재할 뿐이지, 그 어떤 책임과 의무도 가지지 않습니다.

search
번호 분류 제목 글쓴이 조회 수 날짜
2884 Allegro & OrCAD HOT코퍼깔고 비아를 넣었는대 작업이 안된선이 있는것으로 나오면? 어떻게 해야 하나요 ?4 우가우가 1701 2010.06.14
2883 ECAD 아무거나 HOT혼자서 집에서 에칭 하고 있습니다1 TreeOfDream 3814 2010.06.13
2882 자유주제 HOT졸업작품이 원래 이런건가요16 까뮤 5172 2010.06.13
2881 마이크로프로세서 HOTpwm을 이용한 dc모터제어6 d2comet 2348 2010.06.12
2880 마이크로프로세서 HOTavr을 이용해서 조도 제어와 색온도 제어 초보자가 가능할까요?2 AVR 초보자 1610 2010.06.11
2879 마이크로프로세서 HOT8051 소스에 관해서요..3 Do 1275 2010.06.11
2878 펌웨어 & 코딩언어 HOTMFC 를 공부중입니다 API를 시작해야 하는데..3 TreeOfDream 1122 2010.06.11
2877 자유주제 HOT영상처리 관심 있는 분 보세요...무료강좌가 있네요.7 와니파파 5084 2010.06.11
마이크로프로세서 HOT가입하자마자 질문 먼저 올려서 죄송해요 하지만 꼭 보고 수정 부탁드려요.!6 막멀티 1259 2010.06.10
2875 중고장터 HOT각종 부품 팝니다. 캐리안 3652 2010.06.10
2874 마이크로프로세서 HOTCAN통신 관련 질문이요 jeon_goon 1124 2010.06.09
2873 마이크로프로세서 HOT8051을 배우기 시작한 대학생입니다.2 진진진 1032 2010.06.09
2872 마이크로프로세서 HOT8051 과 RFID 단말기 연동 질문 입니다~1 뒹굴뒹굴 1123 2010.06.09
2871 자유주제 HOT패즈 숙달을 위해 정회원이 될야죠4 인피니티 9488 2010.06.09
2870 전기전자 아무거나 HOT랩뷰로 AVR 제어하기 질문4 설리설리 2308 2010.06.09
2869 자유주제 HOTMathworks 컨퍼런스에 다녀왔습니다.1 lovedoremi 6759 2010.06.08
2868 자유주제 HOT이렇게 좋은곳을 모르고있었다니.. ㅠ7 슈퍼초밥 4736 2010.06.08
2867 자유주제 HOT오랜만에 들어와봤습니다.3 암흑혜성 3484 2010.06.08
2866 마이크로프로세서 HOTATmega128로 기판을 짜봤는데요.2 d2comet 1245 2010.06.08
2865 전기전자 아무거나 HOT청계천에서 구한 회로도인데 왜 안되는지 모르겠네요.8 딘재 2902 2010.06.08
  • 많은 사람이 충고를 받지만, 오직 현명한 자만이 충고의 덕을 본다.
    - 푸블릴리우스
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.