📄 main.c
字号:
#include <AT89X55.h>
#define Uchar unsigned char
#define Uint unsigned int
#define Ulong unsigned long
sbit E=P2^0;//E=P3^0;//
sbit RW=P2^1;//RW=P3^1;
sbit RS=P2^2;//RS=P3^2;
/** 定义字符串数组*/
code char STR1[]="中南大学铁道学院";
code char STR3[]="长沙瑞纬电气公司";
/*定义函数声明*/
void Delayus(Ulong t); /*延时函数*/
void BUSYLOOP(); /*判忙函数*/
void Write_command(Uchar CMD,Uchar bb); /*写控制字函数*/
void Write_data(Uchar CMD); /*写数据函数*/
void init(); /*初始化函数*/
void Display(Uchar *ptr,Uchar ddram); /*显字符串函数*/
/*void Delayus(Ulong t); /*延时函数*/
void Delayus(Ulong t)
{
Ulong w;
for(w=0;w<t;w++)
{;}
}
/* void BUSYLOOP() 判忙函数*/
void BUSYLOOP()
{
P0=0x0ff;//P1=0x0ff;
RS=0;
RW=1;
do {
E=1;
P1=P0;//P2=P1;
E=0;
}
//while(P2>0x7F);
while(P1>0x7F);
}
/* void Write_command(Uchar CMD,Uchar bb); /*写控制字函数*/
void Write_command(Uchar CMD,Uchar bb)
{
if(bb)
{BUSYLOOP();}
RS=0;
RW=0;
E=1;
//P1=CMD;
P0=CMD;
Delayus(1);
E=0;
}
/* void Write_data(Uchar CMD); /*写数据函数*/
void Write_data(Uchar CMD)
{
BUSYLOOP();
RS=1;
RW=0;
E=1;
//P1=CMD;
P0=CMD;
Delayus(1);
E=0;
}
/* void init(); /*初始化函数*/
void init()
{
Delayus(38);
Write_command(0x30,0); /*8位 基本指令*/
Delayus(1);
Write_command(0x30,0);/*8位 基本指令*/
Delayus(1);
Write_command(0x0C,1);/*开显示*/
Delayus(1);
Write_command(0x01,0);/*清屏*/
Delayus(20);
Write_command(0x06,1);/*光标右移*/
}
/*void Display(Uchar *ptr,Uchar ddram); /*显字符串函数*/
void Display(Uchar *ptr,Uchar ddram)
{
Uchar l,il,x;
int lie,hang;
l=0;
if(ddram<0x88)
{ hang=0; } /*定位行地址:第一行*/
else if(ddram<0x90)
{ hang=2; } /*定位行地址:第三行*/
else if(ddram<0x98)
{ hang=1;} /*定位行地址:第二行*/
else { hang=2; } /*定位行地址:第四行*/
lie=0xf&ddram; /*定义列地址*/
if(lie>0x07)
{lie=lie-0x08;}
x=lie*2;
Write_command(ddram,0);/*定位显示起始地址*/
while ( (ptr[l])!='\0' )
{ l++; }
for(il=0;il<l;il++)
{
Write_data(ptr[il]); /*输出单个字符*/
x++;
if(x==0x10)
{ x=0;
hang++;
switch(hang)
{
case 0:Write_command(0x80,0);break;
case 1:Write_command(0x90,0);break;
case 2:Write_command(0x88,0);break;
case 3:Write_command(0x98,0);break;
}
if(hang>3)
{Write_command(0x80,0);
hang=0;
}
}
}
}
/*主函数开始*/
main()
{
init();
Display(STR1,0x80); //上面一行显示一个预定的字符串
Display(STR3,0x88);
Delayus(200);
Write_command(0x9c,0);//将光标移动0x9c
Write_command(0x0f,0);//将光标处反白闪烁
// Write_command(0x80,0); //进入睡眠状态
// Delayus(200);
// Write_command(0x0C,0); //唤醒
while(1)
{;}
}
/* 主函数结束**/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -