基于89c52单片机数字秒表程序设计(LCD1602)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;