Main Menu
Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Topics - Nattida

#1

[code#include <REG51.H>                /* special function register declarations   */
#include <ABSACC.H>
#include <stdio.h>
#include <intrins.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>


sbit P33 = P3^3;
sbit P34 = P3^4;
sbit P17 = P1^7;
sbit P30 = P3^0;
sbit P15 = P1^5;
sbit P35 = P3^5;
sbit P31 = P3^1;
sbit P14 = P1^4;
sbit P26 = P2^6;
sbit P27 = P2^7;
sbit P12 = P1^2;
sbit P16 = P1^6;


unsigned char name[20],asci,key,inum[5];// MEMORY REQUEST 21 BYTE
unsigned int loop,blockinterrupt,page,digit,end_digit,counter;

void delay(int time)
{
    int i;
    for(i=0;i<time;i++)       
    {
    }
}
void lcd_ena (void)                                   
{

    P33=1;
    delay(1000);
    P33=0;
    delay(1000);
    P33=1;

}


void wrt_command(unsigned char com)
{
     P34 = 0;
     P0 = com;
     lcd_ena();
}

void set_add(char addr)
{
     P34 = 0;
     P0 = 0x80|addr;
     lcd_ena();

}

void wrt_data(unsigned char dat)
{
    P34 = 1;
    P0 = dat;
    lcd_ena();

}

void enter(char *str)
{
 
// wrt_command(0x0E);
// IE=0x01;

}

void clear_buffer(unsigned char *str,int num )
{   
   
    int i;
    for(i=0;i<num;i++)
    {   
         str[i]=0;
    }
}
void clear_screen(void)
{
    wrt_command(0x01);  //clear
set_add(0x00);
delay(1000);

}
void show (char *strings)
{
    int i,sl;
    sl=strlen(strings);

    for (i=0;i<sl;i++)
    {
        wrt_data(strings[i]);
        delay(1000);
    }
}



void page0(void)
{   
    clear_screen();
set_add(0x02);
clear_buffer(&name,20);
sprintf(name,"Mass Measuring");
show(name);

set_add(0x43);
clear_buffer(&name,20);
sprintf(name,"KPS Physics");   
show(name);

}

void page1(void)
{   
   
clear_screen();

}


void ascii_in(char index)
{
    if(page==1)
{
    asci=48+key+index;
    wrt_data(asci);          
inum[digit]=asci;
digit++;
end_digit++;
}

}

void check_key(unsigned char key)
{
     if(blockinterrupt==0)
{
switch(key)
{
case 0:  ascii_in(1);        
break;
case 1:  ascii_in(1);
break;
case 2:  ascii_in(1);
break;
case 3: //delete();
       
break;
case 4: ascii_in(0);
break;
case 5: ascii_in(0);
break;
case 6: ascii_in(0);
break;
case 7: //uppage();
         if(page>0)
     page--;  

loop=0;
break;
case 8: ascii_in(-1);
break;
case 9: ascii_in(-1);
break;
case 10: ascii_in(-1);
break;
case 11: //downpage();
         if(page<3)
    page++;

loop=0;   

break;
case 12: ascii_in(-12);
break;
case 13: //left();
       

break;
case 14: //right();
       

break;
case 15: //Enter
        loop=0;
break;
}
      blockinterrupt=1;
}
}
void Inkey(void)
{   
// wrt_command(0x0F);
// delay(1);
   
    blockinterrupt=0;

    while(loop)
    {
       delay(10000);    
    }

}


void count_show(void)
{
   counter=TH1;
   counter<<=8;
   counter|=TL1;

    clear_buffer(name,20);   
    sprintf(name,"%d",counter);
   /*  itoa(counter,name);
    set_add(0x02);   
    show(name);

clear_buffer(name,20);
    sprintf(name,"press Ent key ");
    set_add(0x42);   
show(name); */
   
show("hello");
}
void keyb()interrupt 0
{
key=P1;
key&=0x0F;
    show("test");
check_key(key);

}
void timer0() interrupt 1
{       
    TR0=0;
loop=0;
   // TR1=0;       
/* show("hello"); */
count_show(); 
   
}

int main (void)
{
   
        int i;
        digit=0;

     // P33 = 1;
    // end_digit=0;

        wrt_command(0x3C); // init LCD
        delay(1000);

        wrt_command(0x0E);   // on LCD and cursor
        delay(1000);
       
           
       
        TH0=0x0AA;//68us  50..100..150..200...250
        TL0=0x0AA;
    loop=1;
TMOD=0x0D9;
IE=0x83;
page0();

       for (i=0; i<4; i++)
   { 
      counter=0;     
          if ((i/2)==1)
             P17=1;
          else
     P17=0;

          if((i-(2*(i/2)))==1)
             P16=1;
          else
     P16=0; 
         
             
          TH1=0;
          TL1=0;
          P35=1;
  page1();
          loop=1;
  TH0=0x00;//68us  50..100..150..200...250
          TL0=0x00;
          TR0=1;
           //TR1=1;
         // delay(1);
 
 
          while(loop);
 
      }     
       
while(1);   

}]






หนูคอมไพล์ใน proteus ผ่านค่ะ แต่เวลาที่หนูไปทำในแบบจำลอง ค่ามันไม่ไม่ปรากฎที่ แอลซีดีอ่ะค่ะ ไม่ทราบว่า จะต้องแก้ปัญหาอย่างไรบ้าง
รบกวนช่วยดูให้หน่อยะนะคะ พอดีทำโปรเจคจบอยู่ค่ะ ขอบคุณค่ะ