基于51单片机的1602LCD时钟、可以设置闹钟(带仿真)
基于51单片机的1602LCD时钟、可以设置闹钟
最近做了个51单片机的时钟、具有设置时间、闹钟等功能
程序分为3个模块。程序比较简单、由于用于学习交流用没有做掉电运行功能。
供大家学习。
isis仿真图
这是设置时间时的效果
这是设置闹钟时
第一行的显示程序
mode_flag是一个标志位
unsigned char Current_Time[]={“Current Time “}; //正常运行模式
unsigned char Set_time[]={“Set New Time…”}; //设置时间模式
unsigned char Set_nao[]={“Set nao Time…”}; //设置闹钟模式
unsigned char show_time[]={”>00:00:00”};(1)正在运行的显示Current_Time[]字符串
(2)设置时间的显示Set_time[]字符串
(3)设置闹钟的显示Set_nao[]字符串
void display_mode()//第一行模式的显示,有三种模式:(1)正在运行的显示Current_Time[]字符串(2)设置时间的显示Set_time[]字符串 (3)设置闹钟的显示Set_nao[]字符串
{unsigned char i;lcd_w_cmd(0x82); //设置显示地址(第一行)if(mode_flag==0) //状态标志位mode_flag=0表示正处于时间正常运行{for(i=0;Current_Time[i]!='\0';i++) //此处显示Current_Time[]字符串,字符串结束符为‘0’{lcd_w_dat(Current_Time[i]);} }else if(mode_flag==1){ for(i=0;Set_time[i]!='\0';i++) //此处显示Set_time[]字符串,字符串结束符为‘0’{lcd_w_dat(Set_time[i]);}}else if(mode_flag==2){for(i=0;Set_nao[i]!='\0';i++) //此处显示Set_nao[]字符串,字符串结束符为‘0’{lcd_w_dat(Set_nao[i]); }}
}
- 时间的显示程序
在上面我定义了一个字符串数组、
unsigned char show_time[]={">00:00:00"};
通过改变下面这个函数的参数达到显示不同时间的效果
void display_time(unsigned char shi,unsigned char fen,unsigned char miao)//第二行的数字显示
{unsigned char i;if(mode_flag==0)show_time[0]=' '; //如果mode_flag=0,第二行第0位显示' 'else show_time[0]='>'; //否则第二行第0位显示'>'show_time[1]=shi/10+0x30; //第一位显示时的十位数show_time[2]=shi%10+0x30; //第二位显示时的个位数show_time[4]=fen/10+'0'; //第四位显示分的十位数show_time[5]=fen%10+'0'; //第五位显示分的个位数show_time[7]=miao/10+'0'; //第七位显示秒的十位数show_time[8]=miao%10+'0'; //第八位显示秒的个位数lcd_w_cmd(0xC3); //更改显示位置用for(i=0;show_time[i]!='\0';i++) //此处显示show_time[]字符串,字符串结束符为‘0’{lcd_w_dat(show_time[i]);}
}
- 按键扫描函数,这是程序的核心了。
temp_shi是设置时间用的临时用的变量
now_shi是目前运行时的变量
nao_shi是闹钟的变量
void keyscan() //按键控制,k1调时或分,k2加时或分,k3减时或分,k4确定调好的时间,k5调闹钟
{if(K1==0){delay1(1000);if(K1==0){if(mode_flag==0) //正在运行的时间要进入调时间的状态{been(300);temp_shi=now_shi; temp_fen=now_fen;temp_miao=now_miao;mode_flag=1;}else{ been(300);flag_sf=~flag_sf; //切换状态,flag_sf=0调时钟 flag_sf=1调分钟}display_mode();while(!K1); //松手检测}}if(K2==0) //加时或分{delay1(1000);if(K2==0){if(mode_flag!=0) { been(300);if(flag_sf==0) //调时钟状态{temp_shi++;if(temp_shi==24)temp_shi=0; //如果加时钟到24就清零}else { //调分钟状态temp_fen++;if(temp_fen==60)temp_fen=0; //如果加分钟到60就清零} }while(!K2); //松手检测} } if(K3==0) //减时或分{delay1(1000);if(K3==0){if(mode_flag!=0){been(300);if(flag_sf==0) //调时钟状态{if(temp_shi==0)temp_shi=24; //如果减时钟减到最低到0就又回到最高位24temp_shi--;}else { //调分钟状态if(temp_fen==0)temp_fen=60; //如果减分钟减到最低到0就又回到最高位60temp_fen--; }}while(!K3); //松手检测}}//确定设置的时间和调好闹钟的时间if(K4==0){delay1(1000);if(K4==0){if(mode_flag==1) //设置时间 设置好的时间确定后正常运行{been(300);now_shi=temp_shi; now_fen=temp_fen;now_miao=temp_miao;mode_flag=0;}if(mode_flag==2) //设置闹钟 设置好的时间确定好之后定为闹钟{ been(300);nao_shi=temp_shi;nao_fen=temp_fen;nao_miao=temp_miao;mode_flag=0;}while(!K4); //松手检测}display_mode(); //调用显示模式函数}if(K5==0) //设置闹钟{delay1(1000);if(K5==0){if(mode_flag==0){been(300);mode_flag=2;temp_shi=nao_shi;temp_fen=nao_fen;temp_miao=nao_miao;} display_mode();while(!K5); //松手检测}}
}
- 主函数
void main()
{ lcd_int (); //初始化lcdmode_flag=0;//运行display_mode(); //调用显示模式函数TMOD=0x01; //初始化定时器EA=1; //打开总中断TH0=(65536-50000)/256; //赋初值TL0=(65536-50000)%256;ET0=1; //打开定时器T0中断标志位TR0=1; //启动T0while(1){ if(mode_flag==0)display_time(now_shi,now_fen,now_miao); //状态标志位mode_flag=0表示正处于时间正常运行else display_time(temp_shi,temp_fen,temp_miao); //否则mode_flag为1时设置时间,为2时设置闹钟keyscan(); //调用按键开关控制函数if(now_shi==nao_shi&&now_fen==nao_fen&&now_miao==nao_miao) PlayMusic(); //如果正在运行的时间为闹钟的时间,则闹铃响(此为音乐)}
}
中断服务函数
void time0() interrupt 1
{TH0=(65536-50000)/256;TL0=(65536-50000)%256;cishu++;if(cishu==20) //一秒时间到后,次数清零,秒数加一{cishu=0;now_miao++;}if(now_miao==60) //60秒时间到后,秒数清零,分钟加一{now_miao=0;now_fen++;}if(now_fen==60) //60分钟时间到后,分钟清零,时钟加一{now_fen=0;now_shi++;}if(now_shi==24) //24小时到后,时钟清零{now_shi=0;}
}
获得资料可以关注公众号回复001即可,里面有大量软硬件资料哦。
最后贴上下载Github的链接。
谢谢大家的阅读、希望大家支持。下载链接
基于51单片机的1602LCD时钟、可以设置闹钟(带仿真)相关推荐
- c51单片机时钟c语言程序设计,基于51单片机的电子时钟设计..doc
-- I -- - - I -- 设计题目: 基于 51 单片机的电子时钟设计 摘要 单片机,是集 CPU ,RAM ,ROM ,定时器,计数器和多种接口于一体的微控制器.自 20 世纪 70 年代问 ...
- 基于51单片机的数字时钟(万年历)
具体实现功能 系统由STC89C52单片机+DS1302时钟芯片+按键模块+LCD1602显示+电源构成. 具体功能: 1.可以显示年.月.日.时.分.秒.星期.农历: 2.按键可以设置闹钟及报警: ...
- 基于51单片机的电子时钟设计
基于51单片机的电子时钟设计 0 功能介绍 1.从DS1302中读取时间显示 2.一共4个按键,按键1按下进入修改时间模式,再按下切换修改的时间变量,这个时候第2和3个按键就是修改时间变量的按键,修改 ...
- 基于51单片机、DS1302时钟模块的电子闹钟设计
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.设计原理 1.DS1302介绍 2.闹钟音乐播放原理 二.程序设计 1.DS1302.h 2.ds1302.c 3.mu ...
- 基于微型计算机系统的实时时钟设计,基于51单片机的实时时钟设计报告.doc
基于51单片机的实时时钟设计报告 PAGE PAGE 24 课程设计(论文)任务书 信息工程 学 院 信息工程 专 业 (2) 班 一.课程设计(论文)题目 嵌入式课程设计 二.课程设计(论文)工作自 ...
- 基于51单片机LCD1602电子时钟实物制作
之前写了51单片机的LCD1602的程序,现在画了电路图,焊接了电路板,做出了基于51单片机LCD1602电子时钟的实物. 注意事项: 焊接过程中,注意提前布局电路. 对应好端口(避免接线错误),我由 ...
- 基于51单片机的自动浇花系统设计/基于51单片机的智能抽奖系统控制设计/基于51单片机的数字时钟与日历显示控制设计 毕业设计
1147基于51单片机的自动浇花系统设计 设计思路:通湿度传感器实时监测湿度,通过LCD显示出实时的湿度采集值,可以通过按键设定目标界限,当达到这个界限值时,浇花系统的电机装置运行. 电路包含:LCD ...
- 【036】基于51单片机的电子时钟与秒表Proteus仿真设计
一.压缩包资料内容 (1).基于51单片机的电子时钟与秒表proteus仿真设计一份: (2).基于51单片机的电子时钟与秒表proteus仿真设计keli源代码一份: (3).基于51单片机的电子时 ...
- 51单片机8255扩展c语言,参阅:基于51单片机的实时时钟的设计与开发8255扩展io口1V0.1...
<基于51单片机的实时时钟的设计与开发(8255扩展io口) (1).doc>由会员分享,可免费在线阅读全文,更多与<基于51单片机的实时时钟的设计与开发(8255扩展io口) (1 ...
最新文章
- linux 内核申请内存大小,linux内核常用的内存申请函数
- jwt token 附加用户信息_SpringBoot+JWT实现token验证并将用户信息存储到@注解内
- lollipods耳机蓝牙连接方法
- 数组分成两组差值最小 python_数组中的数分为两组,让给出一个算法,使得两个组的和的差的绝对值最小,数组中的数的取值范围是0x100,元素个数也是大于0, 小于100 。...
- 【Android】SlidingMenu属性详解(转)
- IOS 文件读取4种方法 转字符串 和data
- 软件工程——快速掌握面向对象开发方法
- Ubuntu安装指定版本clang-format
- (转)ATOM介绍和使用
- 【Leetcode】143. Reorder List
- ASP.NET对HTML元素进行权限控制(二)
- Python:matplotlib绘制条形图
- LINUX下载编译libssh2
- 信赖铃音的PS2游戏目录2017.6
- 操作系统-3.假设某多道程序设计系统中有供用户使用的内存100KB,打印机1台。系统采用可变分区方式管理内存:对打印机采用静态分配,并假设输入输出操作的时间忽略不计;采用最短剩余时间优先的进程调度算法
- 【HAVENT原创】Spring Boot + Spring-Kafka 异步配置
- 【算法刷题】排序:CodeForces 984A,CodeForces 1132B,CodeForces 1015C
- 【转载】关于小程序的100个常见问题(基础知识扫盲)
- 黄教头第六周作业 一个基础的反射型xss
- DataGrip连接Mysql报08S01解决方案
热门文章
- 51 rtos系统 : MCUsystem 介绍 -- 基于消息队列
- 黄金价格走势之二:舍子线的运用
- 阿里linux运维笔试,2020阿里巴巴笔试真题(含答案)
- CSS——CSS 背景应用
- 练习2-12 输出华氏-摄氏温度转换表(15 分)
- 不同系列的 ESP 芯片的 GPIO 默认初始状态
- OpenGL的Context(Profile)
- 3367. 咸鱼翻身
- StrutsPrepareAndExecuteFilter与FilterDispatcher的区别
- matlab 等高线数值显示_「matlab等高线」matlab中contour 函数的用法(绘制等高线) - seo实验室...