|
发表于 2010-7-23 21:33:43
|
显示全部楼层
#include<p18f452.h>
#define uchar unsigned char
#define uint unsigned int
#define lcdrs PORTDbits.RD4
#define lcdwr PORTDbits.RD5
#define lcden PORTAbits.RA2
uchar table[]="I LIKE mcu!";
uchar table1[]="WWW.TXMCU.COM";
/*void delayx10us(int x) //当x<10时,Delay的真实值会比10us*x大10us左右
{ //当x>10时,Delay的真实值会比10us*x略大
int i=0;
for(i=0;i<x;i++)
{
Nop();Nop();Nop();Nop();
Nop();Nop();Nop();Nop();
Nop();Nop();Nop();Nop();
Nop();Nop();Nop();Nop();
}
}*/
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
void write_com(uchar com ,uchar rss)
{
TRISD=0;
PORTD=0;
lcden=1;
TRISD=0xf0;
PORTD=com>>4;
TRISD=0;
lcdrs=rss;
lcdwr=0;
lcden=0;
lcden=1;
TRISD=0xf0;
PORTD=com;
TRISD=0;
lcdrs=rss;
lcdwr=0;
lcden=0;
/*if(((com&0XFC) == 0) && (rss== 0)) //无论是写数据还是写指令都要一定的时间
delayx10us(2); //当0x01和0x02两个指令(清屏和归位)
else //所以时间要>1.6ms,所以延时长一点
delayx10us(20); //其他都是40us左右
}*/
delay(20);
}
void init()
{
TRISA=0;
PORTA=0;
lcden=0;
lcdwr=0;
lcdrs=0;
write_com(0x01,0);
write_com(0x28,0);//0x28四线程;0x38八线程
write_com(0x06,0);
write_com(0x0c,0);//0x0c不显示光标;0x0e显示光标
write_com(0x80+0x10,0);
delay(2);
}
void main()
{
uint i;
init();
for(i=0;i<11;i++){
write_com(table,1);
delay(20);
}
write_com(0x80+0x50,0);
for(i=0;i<13;i++){
write_com(table1,1);
delay(20);
}
for(i=0;i<16;i++)
{
write_com(0x18,0);//0x18整屏左移
delay(200);
}
while(1);
} |
|