欢迎来到51自学网!

51自学网

当前位置: 主页 > 软件教程 > 单片机教程 >

LCD1602液晶显示带汉字的万年历程序(51单片机)

时间:2018-08-21 14:41来源:网络整理 作者:51自学网
#include reg51.h #define uint unsigned int #define uchar unsigned char #define port P0 uchar table[]=I love you!; uchar table1[]=Shang Hong Rui!; uchar table2[]=LI ZHEN WEI! ; uchar table3[]= ; uchar num; sbit rs=P2^0; sbit rw=P2^1; sbit e=

LCD1602液晶显示带汉字的万年历程序(51单片机)

LCD1602液晶显示带汉字的万年历程序(51单片机)

#include "reg51.h"

#define uint unsigned int
#define uchar unsigned char
#define port P0
uchar table[]="I love you!";
uchar table1[]="Shang Hong Rui!";
uchar table2[]="LI ZHEN WEI!" ; 
uchar table3[]="> > > > > > > > "; 
uchar num;
sbit rs=P2^0;
sbit rw=P2^1;
sbit e=P2^2;
/********************************************
   1ms 为基本单位的延时函数
********************************************/
void delay(uint z)
{
  uint x,y;
  for(x=z;x>0;x--)
    for(y=110;y>0;y--);
}
/********************************************
   读取lcd1602状态
********************************************/
read()
{
  uchar temp ;
  port=0xff;
  rs=0;
  rw=1;
  e=1;
  temp=port;
  e=0;
  return temp;
}
/********************************************
   检测lcd是否忙碌         小卒整天没事
********************************************/
void busy()
{
  uchar temp;
  do
    {
   temp=read();
 }
   
  while((temp&0x80)==0x80);
}
/********************************************
   向 lcd 里写命令
********************************************/
void write_com(uchar com)
{
  busy();
  //delay(2);
  port=com;
  //busy();
  rs=0;
  rw=0;
  e=1;
  e=0;
}/********************************************
   向 lcd 里写数据
********************************************/
void write_data(uchar dat)
{
  busy();
  //delay(2);
  port=dat;
  //busy();
  rs=1;
  rw=0;
  e=1;
  e=0;
}
/********************************************
   初始化lcd
********************************************/
void init()
{
 write_com(0x06) ;//显示地址递增,即写一个数据后,显示位置右移一位
 write_com(0x0e) ;//开显示,有光标,光标不闪
 write_com(0x38) ;//8位数据,双列,5*7字形
 write_com(0x01) ;//清屏
}
/**********************************************
   主程序 实现显示
***********************************************/
main()
{
 init();
 write_com(0x80+0x02);
 for(num=0;num<11;num++)
 {
    write_data(table[num]);
 delay(150);
 }
 //busy();
 write_com(0x80+0x40);
 for(num=0;num<15;num++)
 {
    write_data(table1[num]);
 delay(150);
 }
 write_com(0x01); //清屏
 write_com(0x80+0x15);
 for(num=0;num<12;num++)
 {
    write_data(table2[num]);
 delay(5);
 }
 for(num=0;num<20;num++)
 {
    //write_com(0x1c) ; //显示地址递增,即写一个数据后,显示位置右移一位 整屏向左移动
 write_com(0x18) ; //显示地址递增,即写一个数据后,显示位置右移一位 整屏向右移动
 delay(120);
 }
 //busy();
 delay(50);
 write_com(0x01); //清屏     
 write_com(0x80+0x54);
 for(num=0;num<16;num++)
 {
    write_data(table3[num]);
 delay(5);
 }
 
 for(num=0;num<20;num++)
 {
    //write_com(0x1c) ; //显示地址递增,即写一个数据后,显示位置右移一位 整屏向左移动
 write_com(0x18) ; //显示地址递增,即写一个数据后,显示位置右移一位 整屏向右移动
 delay(120);
 }
 delay(50);
 write_com(0x01); //清屏
 write_com(0x80+0x15);
 for(num=0;num<12;num++)
 {
    write_data(table2[num]);
 delay(5);
 }
 write_com(0x80+0x54);
 for(num=0;num<16;num++)
 {
    write_data(table3[num]);
 delay(5);
 }
 
 for(num=0;num<19;num++)
 {
    write_com(0x1c) ; //显示地址递增,即写一个数据后,显示位置右移一位 整屏向左移动
 //write_com(0x18) ; //显示地址递增,即写一个数据后,显示位置右移一位 整屏向右移动
 delay(120);
 }
  while(1);
}

 

/*0000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000*/

(责任编辑:admin)

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容