基于89c52单片机数字秒表程序设计(LCD1602)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

main.c

#include

#include "lcd.h"

typedef unsigned char uint8;

typedef unsigned int uint16;

uint8 a[]="LCD Design of Tm"; //要显示的字符uint8 num[]="0123456789";

uint8 b[8],shi,fen,miao;

void delay(uint16 i)

{

while(i--);

}

void wrc(uint8 c) //写命令

{

LcdWriteCom(c);

}

void wrd(uint8 dat) //写数据

{

LcdWriteData(dat);

}

void lcd_init()

{

LcdInit();

}

void time0init()

{

TMOD=0X01;

TH0=0XFC;

TL0=0X18; //1ms

TR0=1;

ET0=1;

EA=1;

}

void timepros()

{

b[0]=num[shi/10];

b[1]=num[shi%10];

b[2]=0x3a;

b[3]=num[fen/10];

b[4]=num[fen%10];

b[5]=0x3a;

b[6]=num[miao/10];

b[7]=num[miao%10]; }

void display()

{

uint8 i;

timepros();

wrc(0x00+0x80);

for(i=0;i<16;i++)

{

wrd(a[i]);

}

wrc(0x44+0x80);

wrd(b[0]);

wrd(b[1]);

wrd(b[2]);

wrd(b[3]);

wrd(b[4]);

wrd(b[5]);

wrd(b[6]);

wrd(b[7]);

}

void main()

{

lcd_init();

time0init();

while(1)

{

display();

}

}

void tim0() interrupt 1 {

static uint16 n;

TH0=0XFC;

TL0=0X18;//1ms

n++;

if(n==1000)

{

n=0;

miao++;

if(miao==60)

{

miao=0;

fen++;

if(fen==60)

{

fen=0;

shi++;

if(shi==60)

{

shi=0;

miao=0;

fen=0;

}

}

}

}

// display();

}

LCD1602

#include "lcd.h"

/******************************************************************************* * 函数名: Lcd1602_Delay1ms

* 函数功能: 延时函数,延时1ms

* 输入: c

* 输出: 无

* 说名: 该函数是在12MHZ晶振下,12分频单片机的延时。*******************************************************************************/

void Lcd1602_Delay1ms(uint c) //误差0us

{

uchar a,b;

for (; c>0; c--)

{

for (b=199;b>0;b--)

{

for(a=1;a>0;a--);

}

}

}

/******************************************************************************* * 函数名: LcdWriteCom

* 函数功能: 向LCD写入一个字节的命令

* 输入: com

* 输出: 无

*******************************************************************************/ #ifndef LCD1602_4PINS //当没有定义这个LCD1602_4PINS时

void LcdWriteCom(uchar com) //写入命令

{

LCD1602_E = 0; //使能

LCD1602_RS = 0; //选择发送命令

LCD1602_RW = 0; //选择写入

LCD1602_DATAPINS = com; //放入命令

Lcd1602_Delay1ms(1); //等待数据稳定

LCD1602_E = 1; //写入时序

Lcd1602_Delay1ms(5); //保持时间

LCD1602_E = 0;

相关文档
最新文档