lcd1602液晶

来源:互联网 发布:最强力的胶水知乎 编辑:程序博客网 时间:2024/05/01 11:08
include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<intrins.h>


sbit RS = P2^6;   //定义端口 
sbit RW = P2^5;
sbit EN = P2^7;
sbit SPK = P3^0;


unsigned char time[] = {'0','1','2','3','4','5','6','7','8','9'};
unsigned char *clock = "23:59:54";
unsigned char hour,minute,second = 58,num;
unsigned char keyscan1(void);
unsigned char updatetimerflag;


#define RS_CLR RS=0 
#define RS_SET RS=1


#define RW_CLR RW=0 
#define RW_SET RW=1 


#define EN_CLR EN=0
#define EN_SET EN=1


#define DataPort P0
#define KEYPORT P1


void init_timer0();
void gong_zi();
void clock_1();
void clock_2();


void delayus(unsigned char t)
{
while(--t);
}


void delayms(unsigned char t)
{
while(t--)
{
delayus(245);
delayus(245);
}
}


//判忙函数
bit LCD_Check_Busy()
{
DataPort = 0xff;
RS_CLR;
RW_SET;
EN_CLR;
_nop_();
EN_SET;
return (bit) (DataPort & 0x80);


}


//写入命令函数
void LCD_Write_Com(unsigned char com)
{
//while(LCD_Check_Busy()); //忙则等待
delayms(5);
RS_CLR;
RW_CLR;
EN_SET;
DataPort = com;
_nop_();
EN_CLR;


}


//写入数据函数
 void LCD_Write_Data(unsigned char Data) 
 { 
 //while(LCD_Check_Busy()); //忙则等待
 delayms(5);
 RS_SET; 
 RW_CLR; 
 EN_SET; 
 DataPort= Data; 
 _nop_();
 EN_CLR;
 }


//清屏函数
void LCD_Clear()
{
LCD_Write_Com(0x01);
delayms(5);
}


//写入字符串函数
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
if(y == 0)
{
LCD_Write_Com(0x80 +x);
}
else
{
LCD_Write_Com(0xc0+x);
}
while (*s)
{
LCD_Write_Data( *s);
s++;
}

}


//写入字符函数
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
{
if(y == 0)
{
LCD_Write_Com(0x80 +x);
}
else
{
LCD_Write_Com(0xc0+x);
}
LCD_Write_Data(Data);
}


//初始化函数


void LCD_Init()
{
LCD_Write_Com(0x38);
delayms(5);
LCD_Write_Com(0x38);
delayms(5);
LCD_Write_Com(0x38);
delayms(5);
LCD_Write_Com(0x38);
LCD_Write_Com(0x08);
LCD_Write_Com(0x01);
LCD_Write_Com(0x06);
delayms(5);
LCD_Write_Com(0x0c);
}


 /*void T0_time() interrupt 1
 {
TH0 = 0XD8;
TL0 = 0XF0;
min_sec++;
if(min_sec == 100)
{
min_sec = 0;
sec++;
if(sec == 60)
{
sec = 0;
}
}

 } */


//主函数
void main()
{
// unsigned char i;
// unsigned char *p;
LCD_Init();
LCD_Clear();
/* TMOD = 0X01;
TH0 = 0XD8;
TL0 = 0XF0;
EA = 1;  //开总中断
ET0 = 1;  //开定时器0
TR0 = 1;  //启动定时器0*/
/* while(1)
{
i = 1;
p = "Hello World !";
LCD_Clear();
LCD_Write_String(2,0,"yzh");
delayms(250);
while(*p)
{
LCD_Write_Char(i,1,*p);
i++;
p++;
delayms(250);
}
delayms(250);
}
// gong_zi();
// clock_1();
// LCD_Write_Com(0x87);
// LCD_Write_Data(0x00);
} */
clock_2();


}
/*void gong_zi()
{
LCD_Write_Com(0x40);
LCD_Write_Data(0x1f);
LCD_Write_Com(0x41);
LCD_Write_Data(0x1f);
LCD_Write_Com(0x42);
LCD_Write_Data(0x04);
LCD_Write_Com(0x43);
LCD_Write_Data(0x04);
LCD_Write_Com(0x44);
LCD_Write_Data(0x04);
LCD_Write_Com(0x45);
LCD_Write_Data(0x04);
LCD_Write_Com(0x46);
LCD_Write_Data(0x1f);
LCD_Write_Com(0x47);
LCD_Write_Data(0x1f);
}*/
0 0