Code Select
[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 ผ่านค่ะ แต่เวลาที่หนูไปทำในแบบจำลอง ค่ามันไม่ไม่ปรากฎที่ แอลซีดีอ่ะค่ะ ไม่ทราบว่า จะต้องแก้ปัญหาอย่างไรบ้าง
รบกวนช่วยดูให้หน่อยะนะคะ พอดีทำโปรเจคจบอยู่ค่ะ ขอบคุณค่ะ