用LCD1602实现简单的数字时钟
摘要:随着科技的发展,单片机的应用正在不断深入,涉及到日常生活的方方面面。本设计是基于单片机89C51为控制核心,以液晶为显示的数字时钟。本数字时钟设计的原理相对简单,所以硬件电路也相对简单,难点和重点主要放在C语言的编程上,使用到定时器的子程序、延时程序、时分秒的控制程序、液晶模块和单片机模块的初始化程序、液晶显示的程序等,各个函数交叉调用,配合主程序的运行。
数字时钟的概述与功能的简介
本设计用到单片机的P0端做数据端,把数据发送到LCD的数据接收端,然后通过利用程序进行对液晶的控制,实现数字的显示。在本设计中,设计了四个功能按键,分别是启动/停止时钟,时、分、秒的加一功能,以此对时间的调整。硬件电路相对简单,所以软件的开销相对增大,特别是对液晶模块的程序设计,也正是设计本数字时钟的目的,希望通过此设计提高自己的软件编程与调试能力。由于个人能力也有限,在短时间内不能编写出用液晶显示年月日的程序,因为代码量确实增大不少。
(电路图的链接端与程序不完全一直)
仿真结果:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar hour,min,sec,count,hour1,hour2,
sec1,sec2,min1,min2,keystopc,temp;
sbit keystop=P0^0;
sbit keyh=P0^1;
sbit keym=P0^2;
sbit keys=P0^3;
sbit lcden=P1^0;
sbit lcdrw=P1^1;
sbit lcdrs=P1^2;
uchar code table[]={
'0','1','2','3','4','5','6','7','8','9',':'};void init() //定时器初始化
{count=0;hour=23;min=59;sec=50;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;ET0=1;EA=1;
}void delay(uint z) //延时程序
{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);
}/**************************************************************LCD1602显示函数
*************************************************************/
void write_com(uchar com)
{lcdrs=0;P2=com;delay(5);lcden=1;delay(5);lcden=0;
}void write_data(uchar date)
{lcdrs=1;P2=date;delay(5);lcden=1;delay(5);lcden=0;
}
void init_1602() //初始化1602
{lcden=0;lcdrw=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);
}void write_Char(unsigned char x,unsigned char y,unsigned char date) { if (y == 0) { write_com(0x80 + x); } else { write_com(0xC0 + x); } write_data(date); } void display(uchar hour1,uchar hour2,uchar min1,uchar min2,uchar sec1,uchar sec2) //显示程序
{ //write_com_nextl(0x80+0x40+0x03);write_Char(1,0,table[hour1]);write_Char(2,0,table[hour2]);write_Char(3,0,table[0x0a]);write_Char(4,0,table[min1]);write_Char(5,0,table[min2]);write_Char(6,0,table[0x0a]);write_Char(7,0,table[sec1]);write_Char(8,0,table[sec2]);}/**************************************************************计时器/定时器0
*************************************************************/
void count0() interrupt 1
{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count==20){count=0;sec++;if(sec==60){sec=0;min++;if(min==60){min=0;hour++;if(hour==24){hour=0;}}}}
}/**************************************************************主函数
*************************************************************/void main()
{init();init_1602();while(1){ if(keystop==0) //检测是否停止键按下{delay(10);if(keystop==0){if(keystopc!=1) keystopc++; //按停止键的次数 else keystopc=0;while(keystop==0); //松手检测delay(5);while(keystop==0); }switch(keystopc){case 1:TR0=0;break; // 按键一次就停止计数case 0:TR0=1;break;default:break;}}if(keyh==0) //实现小时加一{delay(5);if(keyh==0){ if(hour!=23) hour++;else hour=0;}while(!keyh); delay(5);while(!keyh);}if(keym==0) //实现分钟加一{delay(5);if(keym==0){ if(min!=59){min++;}else {min=0;}}while(!keym); //松手检测delay(5);while(!keym);}if(keys==0) //实现秒加一{delay(5);if(keys==0){ if(sec!=59){sec++;}else {sec=0;}}while(!keys);delay(5);while(!keys);}hour1=hour/10;hour2=hour%10;min1=min/10;min2=min%10;sec1=sec/10;sec2=sec%10;display(hour1,hour2,min1,min2,sec1,sec2); //一直显示时钟}
}
用LCD1602实现简单的数字时钟相关推荐
- 微信小程序实现非常简单的数字时钟
1. 首先在 .js 文件中定义一个计时函数,提示分钟是没有限制的,会超过60一直晚上加,这个逻辑可以自己加 timing: function(that) { // var second = that ...
- Arduino实战小项目: 数字时钟制作
前言: 通过5641AS四位数码管,了解控制方法,顺带记录一下arduino线程的使用方法,并制作一个简单的数字时钟 效果如下: 目录 前言: 主要材料:
- 基于AT89S52芯片+LCD1602液晶显示+DS12C887时钟模块的数字时钟
文章目录 1. 前提 2. 目标 3. 代码 1. 前提 51单片机,通过实验箱实现实时数字时钟,这里选用DS12C887时钟模块进行实验内容. 2. 目标 使用更为精准的DS12C887时钟模块进行 ...
- java的简单数字时钟_Java实现的简单数字时钟功能示例
本文实例讲述了java实现的简单数字时钟功能.分享给大家供大家参考,具体如下: 应用名称:java数字时钟 用到的知识:java gui编程,线程 开发环境:win8+eclipse+jdk1.8 功 ...
- 告别电子小白,8个优选DS1302数字时钟方案大合辑
数字时钟是一个在主屏幕显示数字时间和日期的 android 桌面插件.是一款朴实简约的时钟 widget,能展示时间,触摸激活闹钟和日历,并且字体颜色都可以进行设置,界面看起来十分的简洁大方,有iPh ...
- android 数字时钟代码大全,Android自定义view实现数字时钟
最近在项目中遇到了一个需要实时更新时间的需求,并且用的地方还是挺多的,无奈做了一个简单的view来时现这个数字时钟. 首先看一下效果,比较简单,就是显示时分秒. 实现思路比较简单,利用handler的 ...
- html制作状态栏数字时钟,用HTML5制作数字时钟的教程_html5教程技巧
就是这个数字时钟,当时觉得这个创意不错,但是也没去折腾.直到昨天同事又在网上看到这个案例,他觉得很酷炫,就跑过来问我,这个是怎么实现的,然后我大概想了一下实现方法后也来了点兴趣,就花了一点时间模仿做出 ...
- python数码时钟代码_Python+Pyqt实现简单GUI电子时钟
本文实例为大家分享了Python+Pyqt实现简单GUI电子时钟的具体代码,供大家参考,具体内容如下 突发奇想想用GUI做一个简单的电子时钟界面,利用pyqt模块也很方便,代码如下: from PyQ ...
- 圆形数字时钟同时显示数字时钟、日期和星期特效
前几天看到动画效果,于是今天想写个时钟效果分享. <!DOCTYPE html> <html lang="en"><head><meta ...
最新文章
- 安装64位Oracle 10g超详细教程
- linux 系统kill用法
- 初等数论--同余--WILSON定理
- DOM Element节点类型详解
- RxJava2:Observable和Observer如何传递
- 阿里云服务器购买流程详细2019更新(图文教程)...
- 跨程序提供及获取内容
- [Ubuntu] apache .htaccess根据访问的域名指向不同的目录
- 人工智能 深度学习(Deep learning)开源框架
- 【Python】if __name__ == __main__做了什么?
- 数字电子技术基础笔记【阎石第六版】 第一章 数字与编码
- Java区块链视频教程百度云_区块链开发入门到精通视频教程
- 如何让iPhone桌面简洁又不俗气?
- Mac Safari 12.0 升级后无限闪退,提示不支持扩展
- 计算机网络:从物理层到应用层的五层模型
- 下载b站外挂字幕,用 potplayer 播放视频也能看字幕了
- mysql数据库修改密码
- Jmeter阶梯压力测试_导出测试报告
- daemon函数理解及参数使用——daemon后进程退出的原因
- 毕业季·大学最遗憾的事/没有完成的事?
热门文章
- 渡过“疫情红利期”,生鲜电商还能“长青”?
- Eth2.0 节点的网络通信
- SuperMap iDesktop常见问题解答集锦 (三)
- E-R图转成关系规则及范式
- 上海松江新桥计算机教育,上海市松江区新桥小学学区范围
- python中的super用法详解_python super用法及原理详解
- SLAM从入门到如土:自定义msgs遇到的坑
- 图片处理看这篇就完了「GitHub 热点速览 v.21.48」
- 保存应用程序设置(QSettings)
- vue怎么和php交互,vue的axios组件如何与PHP后端交换数据