首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

基于51单片机的电子时钟

后端 44.52KB 22 需要积分: 1
立即下载

资源介绍:

基于51单片机设计一个电子时钟是一个常见的学习项目,可以帮助你了解单片机的基本操作以及如何与外部设备进行交互。 软件实现: 初始化:设置定时器/计数器模式,通常使用定时中断来实现秒的计数。 显示时间:编写函数来更新LCD上的时间显示。 用户输入处理:编写代码来响应按钮按下事件,允许用户设置时间或切换显示模式。 时间计算:使用定时器中断来增加时间值,并且要考虑到进位问题(例如秒到分钟、分钟到小时等)。
#include "reg52.h" #include "lcd.h" sbit set_but_s=P3^1; sbit set_but_m=P3^0; sbit set_but_h=P3^2; sbit set_but_Zero=P3^3; sbit led=P2^0; sbit beep_l=P1^0; unsigned int time_ms,time_s=6,time_m=6,time_h=6,time_ms_1; unsigned int set_time_ms,set_time_s,set_time_m,set_time_h,set,beepa; void lcd_display(); void delay_us(unsigned long us) //延时子程序 us { while(us--); } void Init() //中断初始化 { TMOD=0X11; TH0=0XEE; //5ms中断一次 TL0=0X00; TH1=0XEE; //5ms中断一次 TL1=0X00; EA=1;//全开 =0关中断 ET0=1; TR0=1; ET1=1; TR1=1; } void time_s_m_h() //时分秒计算 { if(time_s>=60) //秒 { time_s=0; time_m=time_m+1; } else if(time_m>=60) //分 { time_m=0; time_h=time_h+1; } else if(time_h>=24) //时 { time_h=0; } } void set_time() //设置时间子程序 { if(set==1) { if(set_but_s==0) //设置秒 { delay_us(2); if(set_but_s==0) { time_s=time_s+1; if(time_s>=60) { time_s=0; } while(set_but_s==0) { lcd_display(); if(time_ms>=200) { break; } } } } else if(set_but_m==0) //设置分 { delay_us(2); if(set_but_m==0) { time_m=time_m+1; if(time_m>=60) { time_m=0; } while(set_but_m==0) { lcd_display(); if(time_ms>=200) { break; } } } } else if(set_but_h==0) //设置时 { delay_us(2); if(set_but_h==0) { time_h=time_h+1; if(time_h>=24) { time_h=0; } while(set_but_h==0) { lcd_display(); if(time_ms>=200) { break; } } } } } else if(set==2) { if(set_but_s==0) //设置秒 { delay_us(2); if(set_but_s==0) { set_time_s=set_time_s+1; if(set_time_s>=60) { set_time_s=0; } while(set_but_s==0) { lcd_display(); if(time_ms>=200) { break; } } } } else if(set_but_m==0) //设置分 { delay_us(2); if(set_but_m==0) { set_time_m=set_time_m+1; if(set_time_m>=60) { set_time_m=0; } while(set_but_m==0) { lcd_display(); if(time_ms>=200) { break; } } } } else if(set_but_h==0) //设置时 { delay_us(2); if(set_but_h==0) { set_time_h=set_time_h+1; if(set_time_h>=24) { set_time_h=0; } while(set_but_h==0) { lcd_display(); if(time_ms>=200) { break; } } } } } } void lcd_display() //时间显示 { LCD_Write_Char(0,0,set%10+'0'); LCD_Write_String(1,0,"--:"); LCD_Write_Char(4,0,time_h/10+'0'); LCD_Write_Char(5,0,time_h%10+'0'); LCD_Write_String(6,0,":"); LCD_Write_Char(7,0,time_m/10+'0'); LCD_Write_Char(8,0,time_m%10+'0'); LCD_Write_String(9,0,":"); LCD_Write_Char(10,0,time_s/10+'0'); LCD_Write_Char(11,0,time_s%10+'0'); LCD_Write_String(0,1,"set:"); LCD_Write_Char(4,1,set_time_h/10+'0'); LCD_Write_Char(5,1,set_time_h%10+'0'); LCD_Write_String(6,1,":"); LCD_Write_Char(7,1,set_time_m/10+'0'); LCD_Write_Char(8,1,set_time_m%10+'0'); LCD_Write_String(9,1,":"); LCD_Write_Char(10,1,set_time_s/10+'0'); LCD_Write_Char(11,1,set_time_s%10+'0'); } void beep_led() { if(set_time_s==time_s&&set_time_m==time_m&&set_time_h==time_h) { beepa=1; led=0; beep_l=1; } else if(beepa==1) { beep_l=1; if(time_ms<=100) { led=0; } else if(time_ms>=100&&time_ms<=200) { led=1; } } else if(beepa==0) { beep_l=0; led=1; } } void qingling() { if(set_but_Zero==0) { delay_us(10); if(set_but_Zero==0) { if(time_ms_1>=100) { set=set+1; time_ms_1=0; if(set>=3) { set=0; } } if(time_ms_1<=100&&beepa==1) { beepa=0; set_time_s=set_time_m=set_time_h=0; } } } else if (set==0||set==2) { TR1=1; } else if (set==1) { TR1=0; } } void main() { LCD_Init(); //显示器初始化 LCD_Clear();//清屏 Init(); while(1) { lcd_display(); set_time(); beep_led(); qingling(); } } void Time_Delay1_1ms() interrupt 1 //定时器 50ms { TH0=0XEE; //5ms中断一次 TL0=0X00; if(set_but_Zero==0) { time_ms_1++; } else if(set_but_Zero==1) { time_ms_1=0; } else if(beepa==1) { beep_l=~beep_l; } } void Time_Delay_5ms() interrupt 3 //定时器 50ms { TH1=0XEE; //5ms中断一次 TL1=0X00; time_ms++; //5ms累计一次 if(time_ms>=200) { time_ms=0; time_s=time_s+1; time_s_m_h(); } }

资源文件列表:

电子时钟.zip 大约有17个文件
  1. lcd.c 1.69KB
  2. lcd.h 641B
  3. Listings/
  4. Listings/lcd.lst 4.04KB
  5. Listings/main.lst 11.93KB
  6. Listings/投票统计.m51 24.91KB
  7. main.c 4.91KB
  8. Objects/
  9. Objects/lcd.obj 7.08KB
  10. Objects/main.obj 14.39KB
  11. Objects/投票统计 17.84KB
  12. Objects/投票统计.build_log.htm 1001B
  13. Objects/投票统计.hex 4.89KB
  14. Objects/投票统计.lnp 119B
  15. 投票统计.uvgui.22062 135.23KB
  16. 投票统计.uvopt 5.84KB
  17. 投票统计.uvproj 13.7KB
0评论
提交 加载更多评论
其他资源 基于51单片机的投票统计器
基于51单片机的投票统计器是一个实用且有趣的项目,它可以应用于各种场合,比如会议中的快速投票或课堂上的即时反馈系统。以下是一些关键点,可以快速构建系统: 软件编写: 定时器配置:配置定时器工作模式和中断。 按键检测:编写函数来检测按键是否被按下。 结果显示:编写函数更新显示屏的内容。 测试调试:先单独测试每个部分,然后整体测试。
基于单片机智能电风扇设计
基于单片机智能电风扇设计
ubuntu20.04使用C++与ONNXRuntime对yolov8目标检测模型进行推理预测(源码)
ubuntu20.04使用C++与ONNXRuntime对yolov8目标检测模型进行推理预测(源码)
Git-BashGit-BashGit-BashGit-BashGit-Bash
Git-BashGit-BashGit-Bash
3A(BCH)最小系统板
3A(BCH)最小系统板
3D(EF)最小系统板
3D(EF)最小系统板
jquery实现的文本框计数功能
我所在的公司前端比较老,用的jquery,bootstarp这一套技术,当有一天需要实现文本框计数的功能,找了很多资料,都没有很好的,于是自己写了一个,仅依赖jquery,适用于传统项目。
中兴F7015TV3 telnet工具
中兴F7015TV3 telnet工具,无毒,杀毒软件误报