用 LCD1602 显示的秒表

发布者:q13358975046最新更新时间:2018-05-09 来源: eefocus关键字:LCD1602  秒表 手机看文章 扫描二维码
随时随地手机看文章

给 STC89C51 安一个 LCD1602 液晶显示器。写一段程序,使得 STC89C51 有计时、显示功能。


当给 STC89C51 一个连续的高电平时,单片机开始计时,同时在显示器上显示计时的秒数;

当结束高电平时,计时停止,但是显示器上保留计时数值。


当下一个高电平来到,显示器接着上次的时间继续计时。

简单的讲就是说显示器显示几个间断的高电平持续的时间之和。


再设一个脚实现清零。


这个题目,实际上就是设计一个采用液晶显示的秒表。



LCD1602 和 51单片机的之间,如果采用常规接法,共需要 11 条线;


http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/eafb581918de515237fa4148.html


如果觉得 LCD1602 占用单片机的引脚太多,可以只用 6 条引线来实现对液晶屏的驱动。详情可看下列的链接:

http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/32d640df73343d4bcdbf1ac8.html

------------------------------------


驱动 LCD1602,很简单,关键是要写好“写指令”和“写数据”两个函数,其它的设置、显示等等,就不难了。


晶振选用 11.0592 / 12MHz,均可。


实现脉冲长度计时、显示的程序如下:


#include

#include 

#define uchar unsigned char 

#define uint unsigned int

#define LCD_IO P2


sbit LCD_RS = P3^0;

sbit LCD_RW = P3^7;

sbit LCD_EN = P3^1;

sbit sw1 = P3^2;

sbit sw2 = P3^3;


uchar count;

uint  sec;

uchar code LCD_line1[] = "Pulse Continued:";

uchar code LCD_line2[] = "       00000 s  ";

//---------------------------------------------------

void delay(uint z)

{

    uint  x,  y;

    for(x = z; x > 0; x--)  for(y = 10; y > 0; y--);

}

//---------------------------------------------------

void W_LCD_Com(uchar com)      //写指令

{

    LCD_RS = 0;    LCD_EN = 0; // LCD_RS和R/W同时为低电平时,可以写入指令     

    LCD_IO = com;  delay(5);   //下面用EN输入一个高脉冲 

    LCD_EN = 1;    delay(5);    LCD_EN = 0;

}

//---------------------------------------------------

void W_LCD_Dat(uchar dat)      //写数据

{

    LCD_RS = 1;    LCD_EN = 0; // LCD_RS为高,LCD_RW为低时,可以写入数据  

    LCD_IO = dat;  delay(5);   //下面用EN输入一个高脉冲 

    LCD_EN = 1;    delay(5);    LCD_EN = 0;

}

//---------------------------------------------------

void W_LCD_STR(uchar *s)       //写字符串

{

    while(*s > 0)  {W_LCD_Dat(*s);  s++;}

}

//---------------------------------------------------

void init()

{

    W_LCD_Com(0x38);

    W_LCD_Com(0x0c);

    W_LCD_Com(0x06);

    W_LCD_Com(0x01);

    W_LCD_Com(0x80); W_LCD_STR(LCD_line1);

    W_LCD_Com(0xC0); W_LCD_STR(LCD_line2);


    TMOD = 0x01;

    TH0 = (65536 - 50000) / 256;

    TL0 = (65536 - 50000) % 256;

    TR0 = 1;

    ET0 = 1;

    EX0 = 1;

    EX1 = 1;

    PX1 = 1;

    EA = 1;

}

//---------------------------------------------------

void W_LCD_X1_Dat(uint  sec)

{

    W_LCD_Com(0xc0 + 7);

    W_LCD_Dat(0x30 + sec / 10000);

    W_LCD_Dat(0x30 + (sec % 10000) / 1000);

    W_LCD_Dat(0x30 + (sec % 1000) / 100);

    W_LCD_Dat(0x30 + (sec % 100) / 10);

    W_LCD_Dat(0x30 + sec % 10);

}

//---------------------------------------------------

void main()

{

    init();

    while(1);

}

//-------------------------------------------

void timer0() interrupt 1

{

    TL0 = (65536-50000) % 256;

    TH0 = (65536-50000) / 256;

    count++;

    if(count == 20)  {

      count = 0;

      sec++;

      W_LCD_X1_Dat(sec);   

    } 

}

//-------------------------------------------

void X0_INT() interrupt 0

{

    while(sw1 == 0);

}

//-------------------------------------------

void X1_INT() interrupt 2

{

    while(sw2 == 0);

    count = 0;

    sec = 0;

    W_LCD_X1_Dat(sec);   

}

================================================


关键字:LCD1602  秒表 引用地址:用 LCD1602 显示的秒表

上一篇:51 汇编语言编程:变速计数
下一篇:用 AT89C52 使 LED 闪亮的程序

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

C8051F LCD1602程序
摘要: /********************************************************************************************************** File : LCD1602.c* Hardware Environment: DVK501 F320 EX* Build Environment : Silicon LABs 3. ... /******************************************************************************************************** * * F
[单片机]
10-基于51单片机的秒表系统设计
具体实现功能 系统由STC89C51单片机+数码管显示模块+按键模块+报警提示及指示模块等构成。 具体功能: 1、秒表精度为0.01s; 2、按键可以实现启动、暂停及清零; 3、可以通过按键打开或关闭提醒功能,每一秒提醒一次。 设计思路 该设计要求进行计时并在数码管上显示时间,则可利用单片机微机仿真实验系统中的芯片AT89C51中的P3.2管脚做为外部中断0的入口地址,并实现“开始/停止”、“暂停”、“清零”按键的功能;定时器T0作为每秒加一的定时器。其中当按键来第一个拨动信号,开关由1拨向0(由上向下按)时开始计时;当按键来第二个拨动信号,开关由1拨向0(由上向下按)时数码管保持,当按键来第三个拨动信号,开关
[单片机]
10-基于51单片机的<font color='red'>秒表</font>系统设计
C51单片机LCD1602驱动程序
LCD1602简介 LCD1602字符型液晶(每行显示16个字符,一共可以显示两行)——一种专门用来显示字母、数字、符号的点阵型液晶模块。它由若干个5x7或者5x10的点阵字符组成,每个点阵字符位都可以用来显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能很好的显示图片。 1602的引脚 我们只需要关注以下几个管脚: 3 脚:VL,液晶显示偏压信号,用于调整LCD1602 的显示对比度,一般会外接电位器用以调整偏压信号,注意此脚电压为0时可以得到最强的对比度。 4 脚:RS,数据/命令选择端,当此脚为高电平时,可以对1602 进行数据字节的传输操作,而为电平时,
[单片机]
C51单片机<font color='red'>LCD1602</font>驱动程序
时钟,秒表,流水灯的单片机汇编程序
//HJSMSY-V1.0 单片机 开发板测试程序 //--------------------------------------------- // 电脑钟 //--------------------------------------------- //=======主函数================================== ORG 0000H LJMP MAIN ORG 000BH LJMP T00 // ORG 001BH // LJMP T11 ORG 0030H //=======程序初始化============================= MAI
[单片机]
任意2个io直接驱动LCD1602,并且不需外加芯片
这就是电路,细心的朋友会发现实物图中有几个贴片的阻容件,秘密就在这里,利用电容的记忆效应,把并行的数据转为串行。 iframe id="iframe_0.7900579490233213" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_587522P120CC.PNG?_=3976554%22%20style=%22border:none
[单片机]
任意2个io直接驱动<font color='red'>LCD1602</font>,并且不需外加芯片
基于MEGA16的LCD1602驱动程序(四位数据线)
//编译器:ICC-AVR v6.31A //目标芯片 : M16 //时钟: 8.0000MHz /*------------------------------------------------------------- LCD引脚定义 1---GND 2---VCC 3---VO 4---RS 5---RW 6---EN 7到14--D0-D7 15--背景灯+ 16--背景灯- -----------------------------------------------------------------*/ #include #include /*--------------------------------
[单片机]
单片机MQ-2烟雾检测+ADC0809 AD转换+lcd1602显示程序
单片机源程序如下: /*============================================================ // //程序编写:刘先生 接线:D0--D7接P0.0-P0.7 ST---P2.3 EOC--P2.2 OE---P2.1 CLK--P2.0 本程序源码只供学习参考,不得应用于商业用途,如有需要请联系作者。 =============================================================*/ #include reg52.H //器件配置文件 #include intr
[单片机]
单片机MQ-2烟雾检测+ADC0809 AD转换+<font color='red'>lcd1602</font>显示程序
AVR M16 实验之二 LCD1602显示
/********************************************************************** * 文件名称: main.c * 程序作者: kidcao1987 * 程序版本: V1.0 * 功能描述: 装好LCD1602,用在LCD1602上显示,这里建议再外接上电源。 This a LCD demo! www.CEPARK.com Keep moving!! By:kicao1987 * 编译器:WinAVR-20090313 * 芯片:ATmega16,外部11.0592MHZ晶振 * 技术支持:http://bbs.cepark.com *****************
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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