1602液晶电子时钟程序

发布者:Aningmeng最新更新时间:2018-01-14 来源: eefocus关键字:1602液晶  电子时钟 手机看文章 扫描二维码
随时随地手机看文章

连线图:
; DB0---DPROT.0 DB4---DPROT.4 RS-------------P1.2
; DB1---DPROT.1 DB5---DPROT.5 RW-------------P1.3
; DB2---DPROT.2 DB6---DPROT.6 E--------------P1.4
; DB3---DPROT.3 DB7---DPROT.7 VLCD接10K可调电阻到GND*

 

#include "reg52.h"//头文件
#include "intrins.h"
#define uchar unsigned char//宏定义
#define uint unsigned int//宏定义

sbit RS=P1^2;//定义I/O的硬件接口
sbit RW=P1^3;
sbit E=P1^4;
sbit LED_1=P1^7;//;;;LED秒闪烁

uchar Hours=0;//定义小时
uchar Minutes=0;//定义分钟
uchar Seconds=0;//定义秒

bit Seconds_Scintillation=1;//定义秒闪烁标志

#define DPDR P0//并行数据接口定义

 

uchar code DispTab_1[]={'0','1','2','3','4','5','6','7','8','9'};//1602:0-9 数字
uchar code DispTab_2[]={'A','B','C','D','E','a','b','c','d','e'};//1602:A-e 字母
uchar DispBuf[8]; //8字节的显示缓冲区
char char_char_1[]={" www.mdizi.com "};//定义字符串
char char_char_2[]={" "};//定义空字符串

void delay(uint z)//1ms延时

uchar x,x1;
for(;z>0;z--)
{
for(x=0;x<114;x++)
{
for(x1=0;x1<1;x1++);
}
}
}

void Timer0() interrupt 1
{
statIC uchar Count_50;//
uchar temp;

TH0=0xb7;
TL0=0xff;//定时时间为20ms,每20ms中断一次

Count_50++;
if(Count_50==50)//20ms*50=1秒
{ Seconds_Scintillation=~Seconds_Scintillation;
led_1=~led_1;
Count_50=0;
Seconds++; 
if(Seconds==60)
{
Seconds=0;
Minutes++;
if(Minutes==60)
{
Minutes=0;
Hours++;
if(Hours==24)
{
Hours=0;
}
}
}
}
if(Seconds_Scintillation==1)//秒闪烁标志判断
DispBuf[6]=':';
else
DispBuf[6]=' ';

DispBuf[0]=Hours/10;//转换成10进制显示
DispBuf[1]=Hours%10;
DispBuf[2]=Minutes/10;
DispBuf[3]=Minutes%10;
DispBuf[4]=Seconds/10;
DispBuf[5]=Seconds%10;

temp=DispBuf[0];
DispBuf[0]=DispTab_1[temp];//查表取字符
temp=DispBuf[1];
DispBuf[1]=DispTab_1[temp];
temp=DispBuf[2];
DispBuf[2]=DispTab_1[temp];
temp=DispBuf[3];
DispBuf[3]=DispTab_1[temp];
temp=DispBuf[4];
DispBuf[4]=DispTab_1[temp];
temp=DispBuf[5];
DispBuf[5]=DispTab_1[temp];
}

void write_Directive(uchar a)//写指令
{
RS=0;
RW=0;
delay(1);
E=0;
DPDR=a;
delay(1);
E=1;
delay(1);
E=0;
delay(1);
}

void write_Data(uchar a)//写数据
{
RS=1;
RW=0;
delay(1);
E=0;
DPDR=a;
delay(1);
E=1;
delay(1);
E=0;
delay(1);

}

void init()//初始化
{ uchar i;
TMOD=0x01;
TH0=0xb7;
TL0=0xff;//定时时间为20ms,每20ms中断一次
ET0=1; //开T0中断
EA=1; //开总中断 
TR0=1; //T0开始运行
DispBuf[6]=':';
delay(15);
write_Directive(0x38);
delay(5);
write_Directive(0x38);
delay(5);
write_Directive(0x38);
write_Directive(0x01);
write_Directive(0x02);//初始化后数据地址为0x80;即第一行,第一个位置
write_Directive(0x0c);//不显示光标
write_Directive(0x80+0x40);//第二行第一位地址
for(i=0;i<16;i++)
{
write_Data(char_char_1[i]);//显示字符串" www.mdizi.com "
}
}

void write_Data_String()//显示时间函数

write_Directive(0x80+0x04);//第一行,第五个位置地址

write_Data(DispBuf[0]);//第一行,第五个位置
write_Data(DispBuf[1]);//第一行,第六个位置

write_Data(DispBuf[6]);//第一行,第七个位置

write_Data(DispBuf[2]);//第一行,第八个位置
write_Data(DispBuf[3]);//第一行,第九个位置

write_Data(DispBuf[6]);//第一行,第十个位置

write_Data(DispBuf[4]);//第一行,第十一个位置
write_Data(DispBuf[5]);//第一行,第十二个位置
}


void main()
{

init();
while(1)
{
write_Data_String();//调用写连续的 16 个字符,1表示第一行;2表示第二行 
delay(100);//延时 100ms,扫描一次
}


}

 

液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。

这里介绍的字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等,这里以常用的2行16个字的DM-162液晶模块来介绍它的编程方法。

DM-162采用标准的14脚接口,其中VSS为地电源,VDD接5V正电源,V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。D0~D7为8位双向数据线。

DM-162液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如表1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”

DM-162液晶模块内部的控制器共有11条控制指令,如表2所示,

 

它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平) 指令1:清显示,指令码01H,光标复位到地址00H位置 指令2:光标复位,光标返回到地址00H 指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效 指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁 指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标 指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符 指令7:字符发生器RAM地址设置 指令8:DDRAM地址设置 指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。 指令10:写数据 指令11:读数据

DM-162液晶显示模块可以和 单片机 AT89C51直接接口,电路如图1所示。

液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,表3是DM-162的内部显示地址.



关键字:1602液晶  电子时钟 引用地址:1602液晶电子时钟程序

上一篇:PDIUSBD12 USB 驱动程序
下一篇:24C32~24C512的51单片机读写程序

推荐阅读最新更新时间:2024-03-16 15:52

1602液晶显示DS1302+S51时钟+温度显示
/*============================================================ 使用1602液晶显示DS1302+S51时钟+温度显示 zhaojun 2007/06/29 ============================================================== 声明:1. 1602驱动程序照搬 明皓 的,非常好用 2. DS1302驱动程序是参考网友修改而来 NS1602R(16*2)模拟口线接线方式 连接线图: --------------------------------------------------- | LCM--
[单片机]
DS18B20 1602液晶显示、DS18B20时序太难调了
注意:无论写时隙,还是读时隙,都以主机驱动数据线(DQ)为低电平开始。数据线的下降沿触发从机内部的延时电路,使之与主机取得同步!!注意主从机采样时间! 复位脉冲 一开始错误出现在复位脉冲。 while(PIND&0x01); //正确!!等待被拉低。。18B20拉低60-240 us 我写出这样子//while((PIND&0x01)==0); XXXXXXXXXXX这样写是错误的XXXXXXXXXXXXXX //读出来的是255(0xff) ///////////////// // 8Mhz晶振 ////////////////// #include iom16v.h #include 1602.c
[单片机]
DS18B20 <font color='red'>1602</font><font color='red'>液晶</font>显示、DS18B20时序太难调了
51单片机+ds1302+ds18b20+1602液晶万年历
这是我写的单片机小程序,将单片机开发板上的ds1302,ds18b20和1602综合起来,在1602上显示年月日周时分秒和温度;望各位好友指点,此程序仅适用于我的开发板,用在其他开发板上应该改下端口就可以。 #include reg52.h typedef unsigned char uint8; typedef unsigned int uint16; typedef long int uint32; //**************************************************************************************************** sbit DQ
[单片机]
51单片机+ds1302+ds18b20+<font color='red'>1602</font><font color='red'>液晶</font>万年历
51单片机驱动 LCD1602液晶显示系统
废话不多说先上实物图 LCD1602+51单片机最小系统应用仿真及制作 好了,接下来正式进入制作环节: 第一步:仿真 绘制好原理图,仿真时单片机最小系统只放一个单片机就可以了,但实际电路中需要加上电源模块、复位模块。如下图: 原理图文件请在附件中找。 原理图绘制好后,编写代码并生成hex文件。参考代码如下: /*功能/ /使用外部中断INTO改变LED状态,并且用1602显示出其状态/ #include reg51.h #include intrins.h #define uint unsigned int #define uchar unsigned char uchar code table = H
[单片机]
51单片机驱动 LCD<font color='red'>1602</font><font color='red'>液晶</font>显示系统
AVR单片机做的电子时钟
#include avr/signal.h #include avr/interrupt.h #include avr/delay.h #include avr/wdt.h #include avr/eeprom.h #include math.h #include stdlib.h #include string.h #define uchar unsigned char #define uint unsigned int #define xtal 8 #define CS PA5 #define SID PA6 #define SCLK PA7 #define Set_CS() DDRA |= (
[单片机]
51单片机LCD液晶屏按键电子时钟的设计
液晶屏为JM12864或FYD12864(带字库),我用这两种型号的屏没问题, 4行*8列汉字=32 串行通信 接/口P1.5--P1.7,可根据你的电路修改相应的接口。 #include #define uchar unsigned char voidLCD_ini(); void ascii_change(void); void delay(); void wri_add(uchar com); void wri_dat(uchar com1); void shan(void); void disp(); void tkey(void); sbit cs=P1^7; sbit s
[单片机]
51单片机LCD<font color='red'>液晶</font>屏按键<font color='red'>电子时钟</font>的设计
MSP430控制1602液晶显示
简介:MSP430控制1602液晶显示 上面既是效果图了。。 /*////////////////////////////////////////////////////////////////////////// 文件名:液晶显示 时间:2011年8月24日 */////////////////////////////////////////////////////////////////////////// #include msp430x24x.h //加载头文件 #define E (0x0004u)//确定E的位 #define RW (0x0002u) #define RS (0x0001u) unsigne
[单片机]
MSP430控制<font color='red'>1602</font><font color='red'>液晶</font>显示
基于单片机、DS1302、DS1602电子时钟
这是DS1602+DS1302完整程序,其中P1口接独立键盘。 DS1602部分: # include "SYSTEM.H" //#ifndef __LCD1602_8_H__ //#define __LCD1602_8_H__ //LCD接口定义 sfr io = 0x80; //P0-0x80,P1-0x90,P2-0xA0,P3-0xB0; sbit rs = P2^6; //LCD数据/命令选择端(H/L) sbit rw = P2^5; //LCD读/写选择端(H/L) sbit ep = P2^7; //LCD使能控制 sbit bz = io^7;
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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