LCD1602液晶显示带汉字的万年历程序

发布者:纸扇轻摇最新更新时间:2014-12-04 来源: 21ic关键字:LCD1602  液晶显示  万年历程序 手机看文章 扫描二维码
随时随地手机看文章

#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*/
#include "reg51.h"
#define uchar unsigned char
#define uint unsigend int
#define port P0
uchar table[]="0123456789";
uchar miaog=0,miaos=1,feng=1,fens=1,shig=1,shis=1;
sbit rs=P2^0;
sbit rw=P2^1;
sbit e=P2^2;
/***********************************
  ***00000  5*7  -> 0xff
  *****0** /5*8     0x40
  *****0**    0x40  ----> I
  *****0**    0x40  ---->
  *****0**    0x40
  *****0**    0x40
  ***00000    0x1f
  添加自己的自定义字符
***********************************/
code uchar ziku[]=
{
0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00, //汉字“日”
0x0F,0x09,0x0F,0x09,0x0F,0x09,0x11,0x00, //汉字“月”
0x01,0x02,0x03,0x05,0x09,0x03,0x00,0x00, //汉字“年”左半部
0x00,0x00,0x1e,0x08,0x08,0x1e,0x08,0x08  //汉字“年”右半部
};
/*******************************
   读取lcd1602状态  
*******************************/
uchar lcd_readcom()
{
  uchar temp;
  e=0;
  port=0xff;
  rs=0;
  rw=1;
  e=1;
  temp=port;
  e=0;
  return temp;
}
/***************************************
   检测 lcd 是否忙碌         小卒整天没事
***************************************/
check_busy()
{
   uchar temp;
   do{
   temp=lcd_readcom();
     }while((temp&0x80)==0x80);
}
/*****************************************
      向lcd里写命令
*****************************************/
void lcd_writecom(uchar dat)
{
check_busy();
 e=0;
port=dat;
 rs=0;
 rw=0;
 e=1;
 e=0;
}
/***************************************
   读取lcd对应地址数据
*****************************************/
uchar lcd_readdat()
{
  uchar temp;
  check_busy();
  e=0;
  port=0xff;
  rs=1;
  rw=1;
  e=1;
  temp=port;
  e=0;
  return temp;
}
/****************************************
       向lcd里写数据
****************************************/
void lcd_writedat(uchar dat)
{
check_busy();
 e=0;
port=dat;
 rs=1;
 rw=0;
 e=1;
 e=0;
}
/****************************************
     向lcd写字符串
*****************************************/
void lcd_gets(char *dat)
{
 while(*dat!=0)
 {
 
 lcd_writedat(*dat);
 dat++;
 }
}
/*****************************************
      确定要写的位子即x y 坐标
******************************************/
void lcd_xy(uchar x,uchar y)
{
 switch(y)
 {
  case 0:lcd_writecom(0x80+x);break;//第一行第X个位置
  case 1:lcd_writecom(0xc0+x);break;//0xc0==0x80+0x50 第二行第X个位置
  case 2:lcd_writecom(0x94+x);break;//
  case 3:lcd_writecom(0xd4+x);break;//4*20
 }
}
/****************************************************
 单行显示才有5*10  其他5*8 MODE=1 5*8  MODE=0 5*10
****************************************************/
add_custom_word(uchar *dat,uchar len,uchar mode)
 {
  uchar n,m;
  for(n=0;n    {
  if(mode)
  {
   lcd_writecom(0x40+8*n);
    for(m=0;m<8;m++)
       {
    lcd_writedat(*dat);
     dat++;
    }
   }
   else
    {
    lcd_writecom(0x40+10*n);
    for(m=0;m<10;m++)
       {
    lcd_writedat(*dat);
     dat++;
    }
   }
 }
 }
/********************************************
   初始化lcd
********************************************/
void lcd_init()
{
 lcd_writecom(0x01) ;//清屏
 lcd_writecom(0x03) ;
 lcd_writecom(0x3c) ;
 lcd_writecom(0x40) ;
 lcd_writecom(0x0c) ;
  add_custom_word(ziku,4,1); //初始化自定义字符
}
/********************************************
   1ms 为基本单位的延时函数
********************************************/
void delay(uchar z)
{
  uchar x,y,a;
  for(x=z;x>0;x--)
    for(y=110;y>0;y--)
   for(a=1;a>0;a--) ;
}
/**********************************************
   主程序 实现显示
***********************************************/
main()
{
 lcd_init();
 
 //lcd_xy(0,0);
 //lcd_gets("  I LOVE YOU");
 //lcd_xy(0,1);
 //lcd_gets("Shang Hong Rui");
 lcd_xy(2,0) ;
 lcd_gets("2011");
 lcd_xy(6,0) ;
 lcd_writedat(2);
 lcd_xy(7,0);
 lcd_writedat(3);
 lcd_xy(8,0) ;
 lcd_gets("03");
 lcd_xy(10,0);
 lcd_writedat(1);
 lcd_xy(11,0) ;
 lcd_gets("06");
 lcd_xy(13,0);
 lcd_writedat(0);
 
 lcd_xy(3,1) ;
 lcd_gets("0");
 lcd_xy(4,1) ;
 lcd_gets("0");
 lcd_xy(5,1) ;
 lcd_gets(":");
 lcd_xy(6,1) ;
 lcd_gets("0");
 lcd_xy(7,1) ;
 lcd_gets("0");
 lcd_xy(8,1) ;
 lcd_gets(":");
 lcd_xy(9,1) ;
 lcd_gets("0");
 lcd_xy(10,1) ;
 lcd_gets("0");
 while(1)
 {
 
  //for(m=0;m<10;m++)
  lcd_xy(10,1);
  lcd_writedat(table[miaog]); //秒个位
  delay(1000);
  miaog++;
 
  if(miaog==10)
  {
    miaog=0;
 lcd_xy(9,1);
    lcd_writedat(table[miaos]);  //秒十位
 miaos++;
 if(miaos==6)
 {                    
  
   miaos=0;
   lcd_xy(7,1);
   lcd_writedat(table[feng]); //分个位
   feng++;
   if(feng==10)
    {
      feng=0;
   lcd_xy(6,1);
   lcd_writedat(table[fens]);  //分十位
   fens++;
   if(fens==6)
    {
     fens=0;
   lcd_xy(4,1);
   lcd_writedat(table[shig]);  //时个位
   shig++;
   if(shig==10)
    {
      shig=0;
      lcd_xy(3,1);
      lcd_writedat(table[shis]); //时十位
      shis++;
      if(shis==6)
       {
      shis=0;
    }
   
    }
    }
    }
 }
  }
}
 
 //lcd_xy(0,0);
 //lcd_writedat(0);//自定义字符使用,0表示第一个字 ,1表示第二个字,依此类推
 //lcd_xy(15,0);
 //lcd_writedat(3); //自定义字符使用 
 
}

关键字:LCD1602  液晶显示  万年历程序 引用地址:LCD1602液晶显示带汉字的万年历程序

上一篇:两位数码管动态显示汇编程序+电路图
下一篇:全方位解析“久经沙场”的8051架构MCU

推荐阅读最新更新时间:2024-03-16 13:47

液晶显示模块MGLS240128在图形显示中的应用
摘要:MGLS240128是香港精电公司生产的内藏T6963C控制器液晶显示模块。文中介绍了MGLS240128的原理及功能,给出了该显示模块与单片机的接口方法。同时给出了用C51语言编制的图形显示应用程序。 关键词:液晶模块;单片机;图形显示;C51 1 引言 在目前诸多的显示器件中,液晶显示器以其具有工作电压低、功耗低、显示信息量大、寿命长、不产生电磁辐射污染、可以显示复杂的文字及图形等优点,而在各种仪器仪表、电子设备、移动通讯及家用电器中得到了广泛的应用。本文介绍MGLS240128T图形液晶显示模块就是香港精电公司生产的、内藏T6963C控制器的液晶显示模块。 2 模块工作原理 2.1 基本功能 MG
[电源管理]
51单片机实验17:LCD1602液晶
开发板液晶模块电路图如下: #include reg52.h #include lcd.h uc dig1 = Happy New Year ; uc dig2 = Ha Ha Ha Ha ; void main() { uc i; lcdinit(); lcdwritecom(0x80); for(i=1;i =16;i++) { lcdwritedata(dig1 ); } lcdwritecom(0xc0); for(i=1;i =16;i++) { lcdwritedata(dig2 ); } while(1); } #include lcd.h void delay() /
[单片机]
51单片机实验17:<font color='red'>LCD1602</font>液晶
PIC LCD1602显示
#include //调用头文件,可以去PICC18软件下去查找PIC18FXX2.H __CONFIG(1,XT) ; //晶振为外部4M __CONFIG(2,WDTDIS) ; //看门狗关闭 __CONFIG(4,LVPDIS) ; //禁止低电压编程 #define uint unsigned int #define uchar unsigned char #define en RB3 #define rw RB4 #define rs RB5 #define D PORTD void delayms(uint x) { int i,j; for(i=0;i =1
[单片机]
LCD1602温度显示程序设计流程
在温度的显示上,采用LCD1602,可以显示两行字符,每行16个,显示容量为162。通过并行接口,可与单片机的I/O口直接相连。 1602的引脚和功能如下: VSS:电源地 VDD:电源正极,接+5V电源 VL:液晶显示偏压信号 RS: 数据/指令寄存器选择端。高电平时选择数据寄存器,低电平时选择指令寄存器。 R/W: 读/写选择端。高电平时为读操作,低电平时为写操作 E(6): 使能信号,下降沿触发 D0-D7: I/O口数据传输线 BLA: 背光源正极 BLK:背光源负极 当RS及R/W的引脚信号为1且E的引脚由1变成了0时,读取数据:当RS的引脚信号为1时,R/W引脚信号为0,且E
[单片机]
<font color='red'>LCD1602</font>温度显示<font color='red'>程序</font>设计流程
(Display)LCD1602程序__版本2
LCD1602从我接触单片机开始就在用,以前用的时候,有时用RS和EN,RW接地,有时也用四线模式,但是用到最后,我发现还是用8跟数据线,RS,RW,EN都接到单片机上是最好用的...... Proteus仿真图: LCD1602.H代码: #ifndef _LCD1602_H_ #define _LCD1602_H_ #include #include TYPEDEF.H //液晶初始化函数: void LCD1602_Init(); //液晶设置显示位置函数/设置DDRAM位置 void LCD1602_SetPosition( uint8 x, uint8 y ); //液晶写缓存函数 void LCD1
[单片机]
(Display)<font color='red'>LCD1602</font><font color='red'>程序</font>__版本2
内置SED1520控制驱动器的图形液晶显示模块MGLS-12032在智能测试仪中的应用
    摘要: 文章介绍了内置SED1520图形液晶显示模块MGLS-12032的特点和工作原理,给出了MGLS-12032与8031单片机的接口电路,介绍了SED1520的指令集,并结合具体实例给出了显示模块的相关程序。     关键词: 图形显示 液晶 单片机 SED1520 MGLS-12032 1 SED1520功能特点 SED1520是集行、列驱动器和控制器于一体的液晶显示控制驱动器,可广泛用于小规模液晶显示模块,例如香港精电公司的MGLS-12032、MGLS10032等。 SED1520液晶显示驱动器具有以下特性: ●内置显示RAM区,RAM容量为2560位。RAM中的1位数据控制
[测试测量]
LCD1602+DTH11+MQ-135空气污染检测 温湿度程序
1602的温湿度程序 #include LiquidCrystal.h LiquidCrystal lcd(12, 11, 5, 4, 3, 2); int temp;//温度 int humi;//湿度 int tol;//校对码 int j; unsigned int loopCnt; int chr = {0};//创建数字数组,用来存放40个bit unsigned long time; #define pin 7 int Aout=A0 ;//MQ-135 AO 接 Arduino Uno A0 int temp1 = 0; //临时变量,存储A0读取的数据 void setup() { Seria
[单片机]
PIC单片机驱动LCD12864液晶显示闪动字体程序
/********************************************************************** *** 功能:12864LCD显示 显示闪动字体,各位同学可以自己修改。 *** 实验内容:0x81 0x90 0x88 0x98 分别是LCD四行的行首地址,我们操作LCD现实的字符就是分别放在这里面的 *** 开发板连接方法: 接上有字库LCD12864 注意调节对比度,LCD12864工作电流较大,请用外接电源供电。 *************************************************************************************
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved