用LCD1602制作可调电子钟
用LCD1602制作可调电子钟
制作一种采用LCD1602显示的电子钟,在LCD上显示当前的时间。显示格式为“时时:分分:秒秒”。设有4个功能键k1~k4,功能如下。
(1)k1:进入时间修改。
(2)k2:修改小时,按一下k2,当前小时数增1。
(3)k3:修改分钟,按一下k3,当前分钟数增1。
(4)k4:确认修改完成,电子钟按修改后的时间运行显示。
硬件电路
软件设计
#include<reg51.h>
#include<lcd1602.h>
#define uchar unsigned char
#define uint unsigned int
uint cishu;
uchar miao;
uchar fen;
uchar shi;
sbit K1=P3^2;
sbit K2=P2^3;
sbit K3=P2^4;
sbit K4=P2^5;
uchar miao=0,fen=0,shi=0;
uchar code tab[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
void delay10ms() //函数功能:软件消抖延时
{uchar i,j;for(i=0;i<150;i++)for(j=0;j<100;j++);
}
void clock_init()//时钟初始化
{string(0x81,"BeiJing shijian"); string(0xC4,"00:00:00");
}
void write_sfm(uchar add,uchar date)
{uchar ge,shi;shi=tab[date/10];ge=tab[date%10];write_command(add);write_data(shi);write_command(add+0x01);write_data(ge);
}
void clock_write(uint s,uint m,uint h)//秒,分,时
{write_sfm(0xc4,h);write_sfm(0xc7,m);write_sfm(0xca,s);
}
void main()
{lcd_initial(); clock_init();TMOD=0X01;EA=1;PX0=1;PT0=0;ET0=1;EX0=1;IT0=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;cishu=0;miao=0;fen=0;shi=0;while(1){clock_write(miao,fen,shi);}
}
void T0_int(void) interrupt 1
{cishu++;if(cishu==20){cishu=0;miao++;}if(miao==60){miao=0;fen++;}if(fen==60){fen=0;shi++;}if(shi==24){shi=0;}TH0=(65536-50000)/256;TL0=(65536-50000)%256;
}
void xuishi(void) interrupt 0
{do{EA=0;if(K2==0){delay10ms();if(K2==0){shi++;clock_write(miao,fen,shi);}}if(K3==0){delay10ms();if(K3==0){fen++;clock_write(miao,fen,shi);}}}while(K4!=0);EA=1;
}
这里引用了两个文件,一个是软件自带的<reg51.h>,一个是自己自定义的<lcd1602.h>,这个文件<lcd1602.h>也可以直接嵌套到主程序的上面。
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define out P0
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
void delay(uint j)
{uchar i=250;for(;j>0;j--){while(--i);i=249;while(--i);i=250;}
}
void check_busy(void)
{uchar dt;do{dt=0xff;E=0;RS=0;RW=1;E=1;dt=out;}while(dt&0x80);E=0;
}
void write_command(uchar com)
{check_busy();E=0;RS=0;RW=0;out=com;E=1;_nop_();E=0;delay(1);
}
void write_data(uchar dat)
{check_busy();E=0;RS=1;RW=0;out=dat;E=1;_nop_();E=0;delay(1);
}
void lcd_initial(void)
{write_command(0x38);_nop_();write_command(0x0c);_nop_();write_command(0x04);_nop_();write_command(0x01);delay(1);
}
void string(uchar ad,uchar *s)
{while(*s!='\0'){ write_command(ad);write_data(*s++);ad++;}
}
这里遇到的常见问题为:当按一下k2,k3通常小时数和分钟数并不是加1,而是+3,+2,这是由于每个电脑的灵敏度不同,可以通过修改软件消抖延时函数的值(i,j)进行修改。
用LCD1602制作可调电子钟
用LCD1602制作可调电子钟相关推荐
- 利用数字电子计数知识设计并制作的数字电子钟(含multisim仿真),该数字钟具有显示星期、24小时制时间、闹铃、整点报时、时间校准功能
多功能数字电子钟 仿真文件及文章全文请戳末尾链接 一.功能 1.显示时间 2.显示星期 3.时间校准 4.整点报时 5.(扩展功能)定时闹钟 二.原理 1.脉冲产生 2.计时 3.显示 4.整点报时 ...
- Jmeter脚本制作与调优脚本参数化
目录 本篇内容 Badboy录制工具 代理方式录制脚本 参数化 本篇内容 Jmeter脚本制作 两种方式三种方法做脚本 脚本调优 脚本优化 参数化 csv读取数据 函数 脚本优化 正则 json提取器 ...
- 【Proteus】单片机配合矩阵键盘LCD1602制作简易计算器
前言 想出一个关于Protues仿真的系列,回想起在大学时做课程设计,大多数是用这个来做,这个系列就围绕一些常用的外设或者说课程设计题目来进行对以前知识的回顾,温故而知新,同时也希望能对新手读者的学习 ...
- c51单片机矩阵键盘1602计算器_【Proteus】单片机配合矩阵键盘LCD1602制作简易计算器...
前言 想出一个关于Protues仿真的系列,回想起在大学时做课程设计,大多数是用这个来做,这个系列就围绕一些常用的外设或者说课程设计题目来进行对以前知识的回顾,温故而知新,同时也希望能对新手读者的学习 ...
- C语言编程可调电子钟设计,基于ZG211使用C语言编程的电子钟显示设计(最终版)...
<基于ZG211使用C语言编程的电子钟显示设计.doc>由会员分享,可在线阅读全文,更多相关<基于ZG211使用C语言编程的电子钟显示设计(最终版)>请在www.woc88.c ...
- 用某宝上的板子制作可调的正负电源
呵呵!手头正好有两块某宝的LM317板子,于是就给他改下电路,做成正负电源! 先看下电路图 可以看出输入部分使用桥式整流,一个常见的LM317可调电路! 做成正负电源需要一个中心抽头的变压器! 改!弄 ...
- 用lcd1602制作简单的时钟显示
本文最终的效果如图,lcd上能显示一个电子时钟,并能正确的显示时间. 如图打开proteus,导入元器件并连线,如果是实物的话,别忘了购买lcd屏上的对比度调节变阻器,不然显示不出来,对比度不是太浅就 ...
- 用STM32F401和nRF24L01制作无线调速小车
硬件配置 在做这个小项目前, 考察过STM32F103C8T6, STM32F401CCU6和STC89C52这三个MCU, 并实际跑了一些用例 STC89C52在代码上要简单得多, 它的问题是没有A ...
- lcd1602怎么利用按键清屏_边学边练,8个LCD1602精选电路方案大合辑
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母.数字.符号等的点阵型液晶模块.它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每 ...
最新文章
- Apache Maven 安装与配置-修改源
- QML基本可视化元素--Text
- 设计模式之【抽象工厂模式】
- 福昕PDF阅读器的图章妙用
- P5022-旅行【基环树,dfs】
- 妙到巅峰的8个简洁数学证明(文科生都能看懂),隐隐触摸到一丝只属于神的智慧气息……...
- 作者:刘大伟(1984-),男,博士,烟台中科网络技术研究所助理研究员。
- shiro 解决 跨域(仅端口不同) 登陆 问题
- OMS开发随笔之开发和部署要点
- 滴滴披露语音识别新进展:基于Attention显著提升中文识别率
- 迷瘴 详解(C++)
- red hat linux7下载地址,Red Hat Enterprise Linux 7 百度下载地址分享
- 嵌入式(单片机方向)工程师如何做好定位和职业规划
- 【蓝桥杯】~C语言数组排序
- 正规简单租房合同样板word电子版百度云下载房屋租赁
- 咖说 | 哪怕遭受攻击,DeFi协议也很快能“春风吹又生”?
- 【财经期刊FM-Radio|2021年03月01日】
- Import theano gives the AttributeError: module 'theano' has no attribute 'gof'
- 12c及以上参数推荐设置
- 快捷指令,自动化脚本工具
热门文章
- Vscode底部状态栏消失
- 【菜鸟教程】小乌龟git的安装,配置(TortoiseGit安装)
- JAVA在线拍卖系统计算机毕业设计Mybatis+系统+数据库+调试部署
- 树莓派zero-w 搭建网页服务器
- 为什么绝大多数手游都不开放自由交易系统?
- 16进制转换为ASCII码
- automake java_autoconf与automake加入新的编译选项
- 阿里巴巴代码规范学习+redis stream
- bootstrap-fileinput的简单使用(图片上传和编辑)
- 在“Markdown”中插入表情包教程