|
//本程序為最簡單的顯示漢字程序
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P1^0;
sbit rw=P1^1;
sbit e=P1^2;
//sbit rst=P1^5;
uchar code table1[]="好好學習單片機!" ;
uchar code table2[]=123456" ;
/*****************延時***************/
void delayms(uint z) //延時子程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delay50us(uint z) //延時子程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=19;y>0;y--);
}
/***********寫命令**********************/
void write_12864com(uchar com)
{
e=0;//為后面做準備
rw=0;//為低時寫有效
rs=0;//為為是寫命令,為1是寫數據
delay50us(1);
P0=com;
e=1;//一個高脈沖,命令寫入
delay50us(10);
e=0;//拉低為下一個準備
delay50us(10);
}
/***********寫數據**********************/
void write_12864dat(uchar dat)
{
e=0;//為后面做準備
rw=0;//為低時寫有效
rs=1;//為為是寫命令,為1是寫數據
delay50us(1);
P0=dat;
e=1;//一個高脈沖,命令寫入
delay50us(10);
e=0;//拉低為下一個準備
delay50us(10);
}
void init_12864()
{
delayms(100);
// rst=1;//rst為1是使用8位并行數據傳送
write_12864com(0x30);
delay50us(5);
write_12864com(0x30);
delay50us(5);
write_12864com(0x0e);//打開所有顯示
delay50us(5);
write_12864com(0x0c);//不顯示光標
delay50us(5);
write_12864com(0x01);//清除顯示
delayms(20);
write_12864com(0x06); //模示設置
delay50us(5);
}
void hanzi(uchar *ch)
{
while(*ch!=0)
write_12864dat(*ch++);
delayms(200);
}
void display3()
{
uchar i;
write_12864com(0x90);
for(i=0;i<16;i++)
{
write_12864dat(table1[ i]);
delay50us(5);
}
}
void display4()
{
uchar i;
write_12864com(0x98);
for(i=0;i<16;i++)
{
write_12864dat(table2[ i]);
delay50us(5);
}
}
void display5()
{
write_12864com(0x80);
//hanzi("白日依山盡, 唐");
hanzi("歡迎來到——");
delay50us(5);
write_12864com(0x90);
hanzi(單片機");
//hanzi("黃河入海流。王");
delay50us(5);
write_12864com(0x88);
//hanzi("欲窮千里目,之");
hanzi("單片機人人能學好");
delay50us(5);
write_12864com(0x98);
//hanzi("更上一層樓。渙");
hanzi("我棒,我很行!!");
delay50us(5);
}
void main()
{
init_12864();
//display3();
//display4();
display5();
P2=0x00;
while(1);
}
|
|