em chào các bác.
Em đang làm AVR quen giờ thầy bắt làm 89c51 thấy nó rắc rối quá.
Các bác cho em hỏi là CODE của em thế này thì sai ở chỗ nào?
//-------------------------nhom 2-----------------------------------
//-----------chuong trinh hien thi lcd-------------
#include <AT89x51.h>
#include <math.h>// thu vien lenh toan hoc
#include <stdio.h>// cai nay khong biet cai gi
#include <string.h>
////////////////khai bao chan lcd gan voi cac cong////////////
sfr lcddata=0xA0;// p2=0xA0
sbit rs=P1^0;
sbit rw=P1^1;
sbit e=P1^2;
sbit bf=0xA7;
//------------------------cac chuong trinh con phuc vu------------
void baoban(void)
{
long n;
n=0;
e=1;// dua chan cho phep nen muc cao
rs=0;// chon thanh ghi lenh
rw=1; // doc LCD
lcddata=0xFF;
while(bf){n++;if(n<100)break;}// kien tra neu ban tang n den 100 rui thoat
e=0;//chot voi suon xuong
rw=0; //doc lcd
}
//-----------------------------------------------
void dklcd(unsigned char n)
{
e=1;//chan cho pheps muc cao
rs=1; //chon thanh ghi lenh . neu rs=1 chon chon thanh ghi du lieu
rw=0;// ghi nen lcd
lcddata=n; // chon gia tri x
e=0; // xuong thap de chot
baoban();
}
//--------------------------------------------
void khoitaolcd(void)
{
dklcd(0x30);
dklcd(0x30);
dklcd(0x30);//che do 8 bit
dklcd(0x38); // 2 dong ma tra 5x7
dklcd(0x0A);
dklcd(0x06); //tang con tro sang phai
dklcd(0x01); //xoa toan man hinh
}
//-----------------hienthi 1 ky tu-----------------
void lcdwrite(unsigned char c)
{ e=1;//muc cao
rs=1; //ghi du lieu
rw=1;// ghi len lcd
lcddata=c; //ghi nen ky tu c
e=0;// xuong muc thap
baoban();
}
//-------------------ghi chuoi ky tu-----------
void lcdputs(unsigned char *s,unsigned char row)
{
unsigned char len;
if(row==1){dklcd(0x80);}// dua con tro ve dau dong dau tien
else dklcd(0xC0);// ep con tro ve dau dong thu hai
len=strlen(s);// lay do dai hien thi
while(len!=0)// do dai van con
{
lcdwrite(*s);// ghi ra gia tri lcd duoc doc boi con tro
s++; //tawng con tro
len--; //tru dan do dai
}
}
//////////////////
void delay(long time)
{
long k;
for(k=0;k<time;k++)
{}
}
//////////////////////chuong trinh chinh--------------------
void main(void)
{
char x;
khoitaolcd();
lcdputs("dien tu viet nam",1);
delay(30000);
while(1)
{
for(x=0;x<20;x++)//dich 20 lan
{
lcdputs("dien tu viet nam",1);
dklcd(0x18);// dich hien thi sang trai
delay(5000);
}
}
}
Em xin cảm ơn các bác
Em đang làm AVR quen giờ thầy bắt làm 89c51 thấy nó rắc rối quá.
Các bác cho em hỏi là CODE của em thế này thì sai ở chỗ nào?
//-------------------------nhom 2-----------------------------------
//-----------chuong trinh hien thi lcd-------------
#include <AT89x51.h>
#include <math.h>// thu vien lenh toan hoc
#include <stdio.h>// cai nay khong biet cai gi
#include <string.h>
////////////////khai bao chan lcd gan voi cac cong////////////
sfr lcddata=0xA0;// p2=0xA0
sbit rs=P1^0;
sbit rw=P1^1;
sbit e=P1^2;
sbit bf=0xA7;
//------------------------cac chuong trinh con phuc vu------------
void baoban(void)
{
long n;
n=0;
e=1;// dua chan cho phep nen muc cao
rs=0;// chon thanh ghi lenh
rw=1; // doc LCD
lcddata=0xFF;
while(bf){n++;if(n<100)break;}// kien tra neu ban tang n den 100 rui thoat
e=0;//chot voi suon xuong
rw=0; //doc lcd
}
//-----------------------------------------------
void dklcd(unsigned char n)
{
e=1;//chan cho pheps muc cao
rs=1; //chon thanh ghi lenh . neu rs=1 chon chon thanh ghi du lieu
rw=0;// ghi nen lcd
lcddata=n; // chon gia tri x
e=0; // xuong thap de chot
baoban();
}
//--------------------------------------------
void khoitaolcd(void)
{
dklcd(0x30);
dklcd(0x30);
dklcd(0x30);//che do 8 bit
dklcd(0x38); // 2 dong ma tra 5x7
dklcd(0x0A);
dklcd(0x06); //tang con tro sang phai
dklcd(0x01); //xoa toan man hinh
}
//-----------------hienthi 1 ky tu-----------------
void lcdwrite(unsigned char c)
{ e=1;//muc cao
rs=1; //ghi du lieu
rw=1;// ghi len lcd
lcddata=c; //ghi nen ky tu c
e=0;// xuong muc thap
baoban();
}
//-------------------ghi chuoi ky tu-----------
void lcdputs(unsigned char *s,unsigned char row)
{
unsigned char len;
if(row==1){dklcd(0x80);}// dua con tro ve dau dong dau tien
else dklcd(0xC0);// ep con tro ve dau dong thu hai
len=strlen(s);// lay do dai hien thi
while(len!=0)// do dai van con
{
lcdwrite(*s);// ghi ra gia tri lcd duoc doc boi con tro
s++; //tawng con tro
len--; //tru dan do dai
}
}
//////////////////
void delay(long time)
{
long k;
for(k=0;k<time;k++)
{}
}
//////////////////////chuong trinh chinh--------------------
void main(void)
{
char x;
khoitaolcd();
lcdputs("dien tu viet nam",1);
delay(30000);
while(1)
{
for(x=0;x<20;x++)//dich 20 lan
{
lcdputs("dien tu viet nam",1);
dklcd(0x18);// dich hien thi sang trai
delay(5000);
}
}
}
Em xin cảm ơn các bác
Comment