您现在的位置: 主页 > MCU > 单片机技术应用 > 用 LCD1602 显示的秒表 -
本文所属标签:
为本文创立个标签吧:

用 LCD1602 显示的秒表 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-06 

[导读]
给STC89C51安一个LCD1602液晶显示器。写一段程序,使得STC89C51有计时、显示功能。当给STC89C51一个连续的高电平时,单片机开始计时,同时在显示器上显示计时的秒数;当结束高电平时,计时停止,但是显

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

本文引用地址: http://www.21ic.com/app/mcu/201806/764377.htm


当给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

#defineucharunsignedchar

#defineuintunsignedint

#defineLCD_IOP2


sbitLCD_RS=P3^0;

sbitLCD_RW=P3^7;

sbitLCD_EN=P3^1;

sbitsw1=P3^2;

sbitsw2=P3^3;


ucharcount;

uintsec;

ucharcodeLCD_line1[]="PulseContinued:";

ucharcodeLCD_line2[]="00000s";

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

voiddelay(uintz)

{

uintx,y;

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

}

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

voidW_LCD_Com(ucharcom)//写指令

{

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

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

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

}

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

voidW_LCD_Dat(uchardat)//写数据

{

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

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

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

}

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

voidW_LCD_STR(uchar*s)//写字符串

{

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

}

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

voidinit()

{

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;

}

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

voidW_LCD_X1_Dat(uintsec)

{

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);

}

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

voidmain()

{

init();

while(1);

}

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

voidtimer0()interrupt1

{

TL0=(65536-50000)%256;

TH0=(65536-50000)/256;

count++;

if(count==20){

count=0;

sec++;

W_LCD_X1_Dat(sec);

}

}

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

voidX0_INT()interrupt0

{

while(sw1==0);

}

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

voidX1_INT()interrupt2

{

while(sw2==0);

count=0;

sec=0;

W_LCD_X1_Dat(sec);

}

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




              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > 用 LCD1602 显示的秒表 -
 

"用 LCD1602 显示的秒表 -"的相关文章

网站地图

围观()