You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
1.9 KiB
C
117 lines
1.9 KiB
C
1 year ago
|
#include<reg51.h>
|
||
|
#include<intrins.h>
|
||
|
sbit RS=P3^0;
|
||
|
sbit RW=P3^1;
|
||
|
sbit E= P3^2;
|
||
|
void lcd_w_cmd(unsigned char com);
|
||
|
void lcd_w_dat(unsigned char dat);
|
||
|
unsigned char lcd_r_start();
|
||
|
void lcd_init();
|
||
|
void delay100us(unsigned char t);
|
||
|
void delay5us(unsigned char n);
|
||
|
void main()
|
||
|
{
|
||
|
unsigned char Disp[]="Hello Everyone";
|
||
|
unsigned char i;
|
||
|
P1=0xff;
|
||
|
lcd_init();
|
||
|
delay100us(255);
|
||
|
lcd_w_cmd(0x82);
|
||
|
delay100us(255);
|
||
|
for(i=0;i<14;i++)
|
||
|
{
|
||
|
lcd_w_dat(Disp[i]);
|
||
|
delay100us(200);
|
||
|
}
|
||
|
while(1);
|
||
|
}
|
||
|
|
||
|
void delay100us(unsigned char t)
|
||
|
{
|
||
|
unsigned char j,i;
|
||
|
for(i=0;i<t;i++)
|
||
|
for(j=0;j<10;j++);
|
||
|
}
|
||
|
|
||
|
void delay5us(unsigned char n)
|
||
|
{ do
|
||
|
{
|
||
|
_nop_();
|
||
|
_nop_();
|
||
|
_nop_();
|
||
|
n--;
|
||
|
}
|
||
|
while(n);
|
||
|
}
|
||
|
|
||
|
void lcd_init()
|
||
|
{
|
||
|
lcd_w_cmd(0x3c);
|
||
|
lcd_w_cmd(0x0c);
|
||
|
lcd_w_cmd(0x01);
|
||
|
lcd_w_cmd(0x06);
|
||
|
lcd_w_cmd(0x80);
|
||
|
}
|
||
|
|
||
|
unsigned char lcd_r_start()
|
||
|
{
|
||
|
unsigned char s;
|
||
|
RW=1;
|
||
|
delay5us(1);
|
||
|
RS=0;
|
||
|
delay5us(1);
|
||
|
E=1;
|
||
|
delay5us(1);
|
||
|
s=P1;
|
||
|
delay5us(1);
|
||
|
E=0;
|
||
|
delay5us(1);
|
||
|
RW=0;
|
||
|
delay5us(1);
|
||
|
return(s);
|
||
|
}
|
||
|
|
||
|
void lcd_w_cmd(unsigned char com)
|
||
|
{
|
||
|
unsigned char i;
|
||
|
do{
|
||
|
i=lcd_r_start();
|
||
|
i=i&0x80;
|
||
|
delay100us(2);
|
||
|
}while(i!=0);
|
||
|
RW=0;
|
||
|
delay5us(1);
|
||
|
RS=0;
|
||
|
delay5us(1);
|
||
|
E=1;
|
||
|
delay5us(1);
|
||
|
P1=com;
|
||
|
delay5us(1);
|
||
|
E=0;
|
||
|
delay5us(1);
|
||
|
RW=1;
|
||
|
delay100us(255);
|
||
|
}
|
||
|
|
||
|
void lcd_w_dat(unsigned char dat)
|
||
|
{
|
||
|
unsigned char i;
|
||
|
do{
|
||
|
i=lcd_r_start();
|
||
|
i=i&0x80;
|
||
|
delay100us(2);
|
||
|
}while(i!=0);
|
||
|
RW=0;
|
||
|
delay5us(1);
|
||
|
RS=1;
|
||
|
delay5us(1);
|
||
|
E=1;
|
||
|
delay5us(1);
|
||
|
P1=dat;
|
||
|
delay5us(1);
|
||
|
E=0;
|
||
|
delay5us(1);
|
||
|
RW=1;
|
||
|
delay100us(255);
|
||
|
}
|