用1602做简易时钟

来源:本站
导读:目前正在解读《用1602做简易时钟》的相关信息,《用1602做简易时钟》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《用1602做简易时钟》的详细说明。
简介:功能:用1602显示 00:00:00 的简易时钟。

/**********************************************

MCU: STC89C52

晶振:11.0592

网名:秋天里的落叶

日期:2014年5月11日21:56:00

功能:用1602显示 00:00:00 的简易时钟

**********************************************/

#include <reg52.h>

#define uchar8 unsigned char

#define uint16 unsigned int

uchar8 code tab[] = {'0','1','2','3','4','5','6','7','8','9'};

sbit RS = P3^5; //位定义 数据/命令选择端

sbit RW = P3^4; //位定义 读/写选择端

sbit EN = P3^3; //位定义 使能选择端

sbit Dula = P1^7; //段选

sbit Wela = P1^6; //位选

uint16 Stopwatch = 0; //全局变量:用于秒表计时 f

uchar8 sec,min,hour; //全局变量:秒钟,分钟,时钟

uchar8 a,b,c,d,e,f; //全局变量:秒、分、时钟的个位和十位

void TimerInit(void); //声明初始化函数

void delayms(uint16 t) //延时函数

{

for(;t>0;t--);

}

void LCD_WrCom(uchar8 com) //写命令函数

{

RS = 0;

RW = 0;

EN = 1;

P0 = com;

delayms(5);

EN = 0;

}

void LCD_WrDat(uchar8 dat) //写数据函数

{

RS = 1;

RW = 0;

EN = 1;

P0 = dat;

delayms(5);

EN = 0;

}

void LCD_Init(void)

{

EN = 0;

Dula = 0;

Wela = 0;

LCD_WrCom(0x38); //功能设置:显示16位、两行、5*7点阵、8位数据接口

LCD_WrCom(0x0c); //显示设置:打开显示,不显示光标且不闪烁

LCD_WrCom(0x06); //输入设置:写入数据后,AC自动+1,屏幕不移动

delayms(5);

LCD_WrCom(0x01); //清屏

}

void main(void) //主函数

{

TimerInit(); //定时器初始化

LCD_Init(); //LCD初始化

while(1)

{

sec = Stopwatch%60; //秒钟分离

min = (Stopwatch/60)%60; //分钟分离

hour = (Stopwatch/3600)%60; //时钟分离

a = sec%10; //秒钟个位分离

b = (sec/10)%10; //秒钟十位分离

c = min%10; //分钟个位分离

d = (min/10)%10; //分钟十位分离

e = hour%10; //时钟个位分离

f = (hour/10)%10; //时钟十位分离

LCD_WrCom(0x84); //从第一行第四列显示 (写命令)

LCD_WrDat(tab[f]); //写数据

LCD_WrCom(0x85);

LCD_WrDat(tab[e]);

LCD_WrCom(0x86);

LCD_WrDat(':');

LCD_WrCom(0x87);

LCD_WrDat(tab[d]);

LCD_WrCom(0x88);

LCD_WrDat(tab[c]);

LCD_WrCom(0x89);

LCD_WrDat(':');

LCD_WrCom(0x8A);

LCD_WrDat(tab[b]);

LCD_WrCom(0x8B);

LCD_WrDat(tab[a]);

}

}

void TimerInit(void) //定时器初始化函数

{

TMOD = 0x02; //设置定时器0为工作模式2

TH0 = 0x47; //定时器0赋初值

TL0 = 0x00; //时间设定为0.2ms

EA = 1; //打开总中断

ET0 = 1; //打开定时器0中断

TR0 = 1; //启动定时器0

}

void timer0(void) interrupt 1 //定时器0设置

{

uint16 num; //局部变量:定时器溢出位变量

num++;

if(num == 5000) //num加5000次,说明1s时间到

{

Stopwatch++; //秒钟+1

num = 0;

}

}

如图片:

用1602做简易时钟

提醒:《用1602做简易时钟》最后刷新时间 2024-03-14 01:06:11,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《用1602做简易时钟》该内容的真实性请自行鉴别。