当前位置: 首页 > news >正文

基于51单片机的校园打铃及灯控制系统

目录

具体实现功能

设计介绍

资料内容

全部内容

资料获取


具体实现功能

具体功能:
(1)实时显示当前时间(年月日时分秒星期),LED模式指示灯亮。
(2)按下“打铃+”和“打铃-”按键可查看24个打铃时间,模式指示灯灭,此时可通过4个按键调整打铃时间的时和分。
(3)打铃时间到,可实现蜂鸣器响、播放音乐(1分钟)、打开/关闭宿舍灯、路灯、教学楼灯等功能(详见打铃时间表)。

仿真演示视频:

基于51单片机的校园打铃及灯控制系统-仿真视频

设计介绍

51单片机简介

51单片是一种低功耗、高性能CMOS-8位微控制器,拥有灵巧的8位CPU和可编程Flash,使得51单片机为众多嵌入式控制应用系统提供灵活、高效的解决方案。

本设计所使用的芯片可兼容以下所有的51系列单片机(包括AT系列和STC系列)。

资料内容

仿真实现(protues8.7)

本设计利用protues8.7软件实现仿真设计,具体如图。

程序(Keil5)

本设计利用KEIL5软件实现程序设计。

主函数如下:

///
/***************主函数*****************/
void main()
{uchar k=0,m=0;uchar week=0;beep=1;init_read();//初始化Ds1302ReadTime();TIME[0]&=0X7F;Ds1302Init();	lcd_init();      //调用液晶屏初始化子函数InitialSound();led1=0;           //打开LCD的背光电源led4=0;led3=0;led2=0;limit[0]=7;limit[1]=40;limit[2]=8;limit[3]=10;limit[4]=8;limit[5]=25;limit[6]=9;limit[7]=10;	limit[8]=9;limit[9]=20;	limit[10]=10;limit[11]=5;limit[12]=10;limit[13]=25;	limit[14]=11;limit[15]=10;limit[16]=11;limit[17]=20;	limit[18]=12;limit[19]=5;limit[20]=14;limit[21]=20;				limit[22]=14;limit[23]=30;limit[24]=15;limit[25]=15;limit[26]=15;limit[27]=25;limit[28]=16;limit[29]=10;limit[30]=16;limit[31]=30;	limit[32]=17;limit[33]=15;limit[34]=17;limit[35]=25;limit[36]=18;limit[37]=10;limit[38]=19;limit[39]=20;limit[40]=19;limit[41]=30;limit[42]=21;limit[43]=10;limit[44]=21;limit[45]=40;limit[46]=23;limit[47]=00;while(1){led1=1;	led=!flag;//点亮指示灯if(!key6 &&(k!=6))//组号+1{k=6;flag=0;if(num<25)num++;if(num==25){num=0;flag=1;//显示当前时间}}if(!key1 &&(k!=1))//组号-1{k=1;if(num>1)num--;else{flag=1;//显示当前时间}}if(!key2 &&(k!=2))//时+1{k=2;if(led)shi_jia();else{m=(TIME[2]>>4)*10+(TIME[2]&0X0F);if(m<23)m++;elsem=0;TIME[2]=(m/10<<4)+m%10;Ds1302Init();}}if(!key3 &&(k!=3))//时-1{k=3;if(led)shi_jian();else{m=(TIME[2]>>4)*10+(TIME[2]&0X0F);if(m>0)m--;elsem=23;TIME[2]=(m/10<<4)+m%10;Ds1302Init();}}if(!key4 &&(k!=4))//分+1{if(led)fen_jia();else{m=(TIME[1]>>4)*10+(TIME[1]&0X0F);if(m<59)m++;elsem=0;TIME[1]=(m/10<<4)+m%10;Ds1302Init();}k=4;}if(!key5 &&(k!=5))//分-1{if(led)fen_jian();else{m=(TIME[1]>>4)*10+(TIME[1]&0X0F);if(m>0)m--;elsem=59;TIME[1]=(m/10<<4)+m%10;Ds1302Init();}k=5;}if(P3==0xff)k=0;Ds1302ReadTime();//读取时间if(flag==0){if(num==1){write_sfm(0,num);//闹钟编号write_sfm(3,limit[0]);//时write_sfm(6,limit[1]);//分}else if(num==2){write_sfm(0,num);//闹钟编号write_sfm(3,limit[2]);//时write_sfm(6,limit[3]);//分			}else if(num==3){write_sfm(0,num);//闹钟编号write_sfm(3,limit[4]);//时write_sfm(6,limit[5]);//分			}else if(num==4){write_sfm(0,num);//闹钟编号write_sfm(3,limit[6]);//时write_sfm(6,limit[7]);//分				}else if(num==5){write_sfm(0,num);//闹钟编号write_sfm(3,limit[8]);//时write_sfm(6,limit[9]);//分				}else if(num==6){write_sfm(0,num);//闹钟编号write_sfm(3,limit[10]);//时write_sfm(6,limit[11]);//分	}else if(num==7){write_sfm(0,num);//闹钟编号write_sfm(3,limit[12]);//时write_sfm(6,limit[13]);//分			}else if(num==8){write_sfm(0,num);//闹钟编号write_sfm(3,limit[14]);//时write_sfm(6,limit[15]);//分				}else if(num==9){write_sfm(0,num);//闹钟编号write_sfm(3,limit[16]);//时write_sfm(6,limit[17]);//分			}else if(num==10){write_sfm(0,num);//闹钟编号write_sfm(3,limit[18]);//时write_sfm(6,limit[19]);//分	}else if(num==11){write_sfm(0,num);//闹钟编号write_sfm(3,limit[20]);//时write_sfm(6,limit[21]);//分			}else if(num==12){write_sfm(0,num);//闹钟编号write_sfm(3,limit[22]);//时write_sfm(6,limit[23]);//分			}else if(num==13){write_sfm(0,num);//闹钟编号write_sfm(3,limit[24]);//时write_sfm(6,limit[25]);//分	}else if(num==14){write_sfm(0,num);//闹钟编号write_sfm(3,limit[26]);//时write_sfm(6,limit[27]);//分	}else if(num==15){write_sfm(0,num);//闹钟编号write_sfm(3,limit[28]);//时write_sfm(6,limit[29]);//分				}else if(num==16){write_sfm(0,num);//闹钟编号write_sfm(3,limit[30]);//时write_sfm(6,limit[31]);//分				}else if(num==17){write_sfm(0,num);//闹钟编号write_sfm(3,limit[32]);//时write_sfm(6,limit[33]);//分				}else if(num==18){write_sfm(0,num);//闹钟编号write_sfm(3,limit[34]);//时write_sfm(6,limit[35]);//分	}else if(num==19){write_sfm(0,num);//闹钟编号write_sfm(3,limit[36]);//时write_sfm(6,limit[37]);//分				}else if(num==20){write_sfm(0,num);//闹钟编号write_sfm(3,limit[38]);//时write_sfm(6,limit[39]);//分	}else if(num==21){write_sfm(0,num);//闹钟编号write_sfm(3,limit[40]);//时write_sfm(6,limit[41]);//分				}else if(num==22){write_sfm(0,num);//闹钟编号write_sfm(3,limit[42]);//时write_sfm(6,limit[43]);//分				}else if(num==23){write_sfm(0,num);//闹钟编号write_sfm(3,limit[44]);//时write_sfm(6,limit[45]);//分			}else if(num==24){write_sfm(0,num);//闹钟编号write_sfm(3,limit[46]);//时write_sfm(6,limit[47]);//分	}else{;}}else{write_sfm(6,(TIME[0]>>4)*10+(TIME[0]& 0x0f));//秒,从第二行第8个字后开始显示(调用时分秒显示子函数)write_sfm(3,(TIME[1]>>4)*10+(TIME[1]& 0x0f));//分,从第二行第5个字符后开始显示write_sfm(0,(TIME[2]>>4)*10+(TIME[2]& 0x0f));//小时,从第二行第2个字符后开始显示//显示日、月、年数据:write_nyr(9,(TIME[3]>>4)*10+(TIME[3]& 0x0f));//日期,从第二行第9个字符后开始显示write_nyr(6,(TIME[4]>>4)*10+(TIME[4]& 0x0f));//月份,从第二行第6个字符后开始显示write_nyr(3,(TIME[6]>>4)*10+(TIME[6]& 0x0f));//年,从第二行第3个字符后开始显示week = (TIME[5]>>4)*10+(TIME[5]& 0x0f)-1;if(week>=7){week=1;}if(week<1){week=7;}write_nyr(12,week);//日期,从第二行第9个字符后开始显示}bell_if();//响铃}
}

程序运行结果如图:

全部内容

全部资料包括程序(keil5)、protues仿真(protues8.7)、设计说明、答辩PPT、开发资料、资料使用介绍、仿真视频、最小系统介绍视频等。

资料获取

https://docs.qq.com/doc/DT2NwdVByRkRTWXNP

http://www.xdnf.cn/news/1043461.html

相关文章:

  • 芯片测试之 trim修调详解
  • 《棒垒球科普》足垒球的规则·垒球2号位
  • [直播推流] 使用 librtmp 库推流
  • KSP密钥管理系统赋能智能制造:密钥管理系统在智能制造行业中有哪些典型应用
  • 单机定时任务@Schedule的常见问题
  • 5.5.1_哈夫曼树
  • uni-app项目loading显示方案
  • neo4j社区版数据库下载安装
  • 玛哈特纵剪矫平机:金属板材精密加工的“开平裁切”核心装备
  • SEO关键词与长尾词布局实战
  • 解决国内无法加载谷歌验证码(reCAPTCHA):URL 重定向配置指南
  • github-mcp-server v0.5.0 发布详解:远程 GitHub MCP 服务器全新升级与最佳实践
  • 【专业数据库探索 05】ArangoDB多模数据库革命:一个数据库解决文档图关系三大数据模型
  • Qwen3 Embedding 测试
  • 8. TypeScript 类
  • Lambda 表达式的语法与使用:更简洁、更灵活的函数式编程!
  • Dina靶机渗透
  • 算法训练第十七天
  • CQF预备知识:Python相关库 -- 通用非均匀随机数抽样 scipy.stats
  • 关于allegro 导入网表报错:Unable to find pin name in问题的解决
  • Java大模型开发入门 (9/15):连接外部世界(中) - 向量嵌入与向量数据库
  • JS进阶 Day03
  • 【构建】Meson、Bazel、Buck现代构建系统
  • RPG28.使用GameplayCue和制作死亡效果
  • Java线程安全计数器实现方案
  • 【stm32f4】ADC实验(stm32hal库)
  • 什么是旋转开关?
  • 使用NVIDIA TensorRT for RTX运行高性能AI应用程序
  • C++线性DP-最优解问题、方案数问题
  • PCL 计算点云的投影密度