基于单片机的多功能电子钟设计

news2024/12/23 1:10:11

文章目录

  • 前言
  • 资料获取
  • 设计介绍
  • 功能介绍
    • 程序代码部分参考
  • 设计清单
  • 具体实现截图
  • 参考文献
  • 设计获取


前言

💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗
👇🏻 精彩专栏 推荐订阅👇🏻
单片机设计精品实战案例
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

资料获取

文章底部名片,详细资料联系我。

设计介绍

随着电子技术行业的迅猛发展,电子产品的市场需求量增多,许多传统产品受到前所未有的冲击。电子钟是日常生活中的必需品,但传统电子钟功能单一,不能很好地满足人们日常的需求。多功能电子钟解决了这些问题,不仅拥有传统电子钟的功能,还拥有显示日期、温度测试、电子闹钟等常用功能,大大满足了人们的需求[1]。
多功能电子时钟是采用数字电路实现对时、分、秒数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、通断动力设备、甚至各种定时电气的自动启用等,所有这些都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义[2]。
当前市场上已有现成的数字钟集成电路芯片出售,价格较便宜。由于数字集成电路技术的发展,使数字钟具有走时准确,性能稳定,携带方便等特点,是目前人们生活和工作不可或缺的报时用品。国内厂家的产品拥有时间、日期、温度、夜光、贪睡功能、倒计时、顺计时、省电模式、多组闹钟、可循环显示、多档亮度调节、12/24时制转换、调节亮度、遥控操作等功能。国外的时钟企业也已经研发出了价格低廉、封装小,功能更齐全的且具有时基软件调校功能(TTF)及振荡器停振自动检测功能的时钟芯片。
在实际生活中数字式电子钟的设计方法有很多钟,可用中小规模集成电路组成电子钟;也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟;还可以利用单片机来实现电子钟等等。如果用数字电路来完成,所设计的电路相当复杂,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高[3]。而利用单片机实现的电子钟具有编程灵活、便于电子钟功能的扩充(即可用该电子钟发出各种控制信号)、精确度高等特点,被广泛应用。
本次设计是基于单片机的定时计时功能而设计的一款以单片机为核心控制的电子钟,具有多项显示和控制功能,并且能够实现实时显示时、分、秒;具有闹钟、秒表功能;实时显示环境的温度、湿度、二氧化碳等信息。

功能介绍

课题研究方案:基于单片机AT89S52的实时多功能电子钟由时钟、微控制器、键盘和液晶显示、温湿度测量及显示、PM2.5、CO2测量及显示、蜂鸣器等部分组成。整个系统工作时,首先对各个测量模块进行初始化设置,使其产生的相应信号(如时钟模块产生时间信号、温湿度测量模块产生的温湿度信号等)可以通过键盘对其进行调整与校正以及完成其他控制功能,然后由液晶模块显示时间信息,包括年、月、日、时、分、秒、星期、温湿度、空气质量等信息,蜂鸣器模块用于整点报时功能。

课题主要研究内容与技术参数:主要研究是一款以单片机为核心,且具有多项显示和控制功能的多功能电子钟。从而整个系统能够实现实时显示时、分、秒;具有闹钟、秒表功能;实时显示环境的温度、湿度、二氧化碳等信息。具体的技术参数如下:
1.点阵式液晶显示器或 LED 显示;
2.能够实时显示时、分、秒,以 24 时计时方式;
3.具有快速校准时、分秒的功能;
4.时钟具有整点报时的功能;
5.具有秒表功能,秒表精度 0.1 秒,具有启动、暂停及清零功能;
6.具有闹钟的功能,可通过按钮关闭该提醒音;
7.可显示环境的温度和湿度等功能,温度检测精度±0.5℃;湿度检测精度±2%RH。
8.可以检测 PM2.5,测量精度为±10%;
9.可检测 CO2 浓度,测量精度为±5%。

程序代码部分参考

/*************************************************************
                      电子时钟

补充说明:
***************************************************************/
#include<reg52.h>		   //头文件
#include<LCD1602.h>
#include<DS1302.h>
#include<DHT11.h>
#include<AT24C02.h>
#include<INTERRUPT.h>
#include<ADC0832.h>
#include<SGP30.h>

#define uchar unsigned char//宏定义
#define uint unsigned int

/***********************引脚定义***********************/ 	
sbit key_mode = P1^0;	 //设置键
sbit key_jia  = P1^1;	 //加键
sbit key_jian = P1^2;	 //减键
sbit key_ok   = P1^3;	 //确定键
sbit key_miao = P1^4;	 //秒表键

sbit buzz     = P2^7;	 //蜂鸣器
sbit PM_out   = P3^2;    //粉尘传感器
/***********************变量定义***********************/
uchar set_f=0;		//设置选择标记,=0非设置,=1设置
uchar num;			//计数变量
uchar naozhong[3];	//闹钟-时、闹钟-分、闹钟-开关
bit   miaobiao_f=0;	//秒表标记位,=0非秒表模式,=1秒表模式
bit   baoshi_f=0;	//报时标记位,=1整点报时

uint PM25=0;	//存储实测PM2.5值

uint pm25_data[10];	//历史最近10个PM2.5值,以便求平均减少测量误差

uchar max=184;  //AD最大值
uchar min=16;   //AD最小值

/********************************************************
函数名称:void delayms(uint ms)
函数作用:毫秒延时函数
参数说明:
********************************************************/ 
void delayms(uint ms)
{
	unsigned char i=100,j;
	for(;ms;ms--)
	{
		while(--i)
		{
			j=10;
			while(--j);
		}
	}
}
/********************************************************
函数名称:void delayus(uint us)
函数作用:US延时函数
参数说明:
********************************************************/
void delayus(uint us)
{
    while( --us ) ;
}
/********************************************************
函数名称:void baoshi(uchar i)
函数作用:整点报时函数
参数说明:i为蜂鸣器响的次数
********************************************************/ 
void baoshi(uchar i)
{
	uchar j;
	for(j=0;j<i;j++)//循环i次
	{
		buzz=0;		//蜂鸣器鸣叫
		delayms(20);//延时
		buzz=1;		//关闭蜂鸣器鸣叫
		delayms(20);//延时
	}
}
/********************************************************
函数名称:void display(void)
函数作用:正常显示时间、温度函数
参数说明:
********************************************************/ 
void display(void)
{
	//显示时间
	LCD_disp_char(0,1,ASCII[time[2]/10]);//显示时【0:表示第1列,2:表示第2行,所有关于显示都一样】
	LCD_disp_char(1,1,ASCII[time[2]%10]);
	LCD_disp_char(2,1,':');
	LCD_disp_char(3,1,ASCII[time[1]/10]);//显示分【3:表示第4列,2:表示第2行,所有关于显示都一样】
	LCD_disp_char(4,1,ASCII[time[1]%10]);
	LCD_disp_char(5,1,':');
	LCD_disp_char(6,1,ASCII[time[0]/10]);//显示秒
	LCD_disp_char(7,1,ASCII[time[0]%10]);

	//判断整点报时
	if(time[0]==0&&time[1]==0&&baoshi_f==0)//判断是否为整点
	{
		baoshi_f=1;				   //标记整点报时开启
		if(time[2]%12==0)	   //根据当前时间,控制蜂鸣器鸣叫次数
			baoshi(12);
		else
			baoshi(time[2]%12);//12小时制			
	}
	if(time[0]>10&&time[1]==0)	   //整点报时结束
		baoshi_f=0;				   //重置整点报时标志

	//判断闹钟
	if(time[2]==naozhong[0]&&time[1]==naozhong[1]&&time[0]==0&&naozhong[2]==1)
		buzz=0;//闹钟时间到,开启闹钟
	if(time[1]!=naozhong[1])
		buzz=1;//闹钟结束关闭闹钟

	//显示温度
	if(DHT11_Check())
	{
		if(time[0]%6>2)
		{
			LCD_disp_char(10,1,Temp_H/10+0x30);
			LCD_disp_char(11,1,Temp_H%10+0x30);
			LCD_disp_char(12,1,'.');
			LCD_disp_char(13,1,Temp_L%10+0x30);
			LCD_disp_char(14,1,0x00);			 //显示自定义字符‘°’
			LCD_disp_char(15,1,'C');			 //显示‘C’
		}
		else
		{
			LCD_disp_char(10,1,' ');
			LCD_disp_char(11,1,ASCII[Humi_H%100/10]);
			LCD_disp_char(12,1,ASCII[Humi_H%10]);
			lcd1602_write_character(13,1,"%RH");		
		}
	}
	//显示PM2.5值
	LCD_disp_char(0,2,ASCII[PM25/100]);	
	LCD_disp_char(1,2,ASCII[PM25%100/10]);
	LCD_disp_char(2,2,ASCII[PM25%10]);
	lcd1602_write_character(3,2,"ug/m3");

	//显示CO2值
	LCD_disp_char(9,2,ASCII[CO2/1000]);	
	LCD_disp_char(10,2,ASCII[CO2%1000/100]);
	LCD_disp_char(11,2,ASCII[CO2%100/10]);
	LCD_disp_char(12,2,ASCII[CO2%10]);
	lcd1602_write_character(13,2,"PPM");
}
/********************************************************
函数名称:void display2()
函数作用:显示调整日期、时间函数
参数说明:
********************************************************/ 
void display2()
{
	num++;

	lcd1602_write_character(0,1,"Set time:");
	
	if(num%2==0)	  //偶数次显示,奇数次不显示。这样就会有闪烁效果,可以清楚看到当前设置的是哪个值
	{
		LCD_disp_char(4,2,ASCII[time[2]/10]); //显示时
		LCD_disp_char(5,2,ASCII[time[2]%10]);
		LCD_disp_char(6,2,':');  
		LCD_disp_char(7,2,ASCII[time[1]/10]); //显示分
		LCD_disp_char(8,2,ASCII[time[1]%10]);	   
		LCD_disp_char(9,2,':');
		LCD_disp_char(10,2,ASCII[time[0]/10]);//显示秒
		LCD_disp_char(11,2,ASCII[time[0]%10]);
	}	
	else			 //奇数次不显示
	{
		switch(set_f)//根据当前设置的内容,对应位置闪烁
		{
			case 1: lcd1602_write_character(4,2,"  "); break;
			case 2: lcd1602_write_character(7,2,"  "); break;
			case 3: lcd1602_write_character(10,2,"  "); break;
			default: break;
		}
	}	
}
/********************************************************
函数名称:void display3()
函数作用:显示调整闹钟函数
参数说明:
********************************************************/ 
void display3()
{
	num++;

	lcd1602_write_character(0,1,"Set alarm clock");
	if(num%2==0)	//偶数次显示,奇数次不显示。这样就会有闪烁效果,可以清楚看到当前设置的是哪个值
	{	
		LCD_disp_char(3,2,ASCII[naozhong[0]/10]);//显示闹钟-时
		LCD_disp_char(4,2,ASCII[naozhong[0]%10]);
		LCD_disp_char(5,2,':');  
		LCD_disp_char(6,2,ASCII[naozhong[1]/10]);//显示闹钟-分
		LCD_disp_char(7,2,ASCII[naozhong[1]%10]);

		if(naozhong[2]%2==0)
			lcd1602_write_character(9,2,"OFF"); //显示闹钟-开/关
		else
			lcd1602_write_character(9,2,"ON ");	
	}
	else			 //奇数次不显示
	{
		switch(set_f)//根据当前设置的内容,对应位置闪烁
		{
			case 4: lcd1602_write_character(3,2,"  "); break;
			case 5: lcd1602_write_character(6,2,"  "); break;
			case 6: lcd1602_write_character(9,2,"   "); break;
			default: break;
		}
	}
}
/********************************************************
函数名称:void display4(void)
函数作用:显示秒表计时函数
参数说明:
********************************************************/ 
void display4()
{
	lcd1602_write_character(0,1,"Seconds counter");	 //000:00.0
	LCD_disp_char(4,2,ASCII[fens/100]);	  //显示秒表-分
	LCD_disp_char(5,2,ASCII[fens%100/10]);
	LCD_disp_char(6,2,ASCII[fens%10]);
	LCD_disp_char(7,2,':');
	LCD_disp_char(8,2,ASCII[times/10]);	  //显示秒表-秒
	LCD_disp_char(9,2,ASCII[times%10]);
	LCD_disp_char(10,2,'.');
	LCD_disp_char(11,2,ASCII[T0_num/2]);  //显示秒表-分秒
}
/********************************************************
函数名称:void scan(void)
函数作用:按键查询处理函数
参数说明:
********************************************************/ 
void scan(void)
{
	//设置键
	if(key_mode==0&&miaobiao_f==0)			   //按键按下
	{  
		delayms(7);			   //延时消抖
		if(key_mode==0)		   //再次确认按键按下
		{
			buzz=1;		   //进入设置关闭闹钟声光提示
			if(set_f==0||set_f==3||set_f==6)     //进入设置先清除屏幕,显示设置部分
			{
				Writeds1302 (WRITE_PROTECT,0X00); //禁止DS1302写保护
				LCD_write_command(0x01);          //清除屏幕显示
				delay_n40us(100);		          //延时等待全部清除完毕
			}
			set_f++;							  //设置变量+1

			if(set_f>6)						  //全部设置完成,退出设置
			{									  
				set_f=0;						  //重置设置变量	
				AT24C02_write_date(0,naozhong[0]);//写入【闹钟-时】数据保存
				AT24C02_write_date(1,naozhong[1]);//写入【闹钟-分】数据保存
				AT24C02_write_date(2,naozhong[2]);//写入【闹钟-开关】数据保存
				
				Writeds1302 (WRITE_MINUTE,(time[1]/10)*16+time[1]%10);//将设置好的时间写入DS1302
				Writeds1302 (WRITE_SECOND,(time[0]/10)*16+time[0]%10);

				LCD_write_command(0x01);          //清除屏幕显示
				delay_n40us(100);		          //延时等待全部清除完毕
			}			
		}
		while(!key_mode);//等待按键松开
	}
	//确定
	if(key_ok==0)		       //按键按下
	{
		delayms(7);			   //延时消抖
		if(key_ok==0&&set_f!=0)//再次确认按键按下,并且当前处于设置模式
		{
			set_f=0;						  //重置设置变量	
			AT24C02_write_date(0,naozhong[0]);//写入【闹钟-时】数据保存
			AT24C02_write_date(1,naozhong[1]);//写入【闹钟-分】数据保存
			AT24C02_write_date(2,naozhong[2]);//写入【闹钟-开关】数据保存	
			
			Writeds1302 (WRITE_MINUTE,(time[1]/10)*16+time[1]%10);//将设置好的时间写入DS1302
			Writeds1302 (WRITE_SECOND,(time[0]/10)*16+time[0]%10);

			LCD_write_command(0x01);          //清除屏幕显示
			delay_n40us(100);		          //延时等待全部清除完毕
		}
		else
			if(key_ok==0&&buzz==0)	  //否则,当前闹钟响起,进入暂停闹钟
			{
				buzz=1;						  //关闭蜂鸣器
			}
			else
				if(key_ok==0&&miaobiao_f==1)  //否则,秒表启停
				{
					buzz=0;
					TR0=~TR0;//切换 秒表计时-开始/暂停
					delayms(5);
					buzz=1;
				}				
		while(!key_ok);	                      //等待按键松开
	}
	//加键		
	if(key_jia==0)				//按键按下
	{
		delayms(7);				//延时消抖
		if(key_jia==0&&set_f!=0)//再次判断按键按下
		{
			if(set_f==1)	  //设置时,同上
			{			
				time[2]++;
				time[2]=(time[2]/10)*16+time[2]%10;
				if(time[2]>0x23)
					time[2]=0x00;
				Writeds1302 (WRITE_HOUR,time[2]);	
			}
		
			if(set_f==2)	  //设置分,同上
			{
				time[1]++;
				time[1]=(time[1]/10)*16+time[1]%10;
				if(time[1]>0x59)
					time[1]=0x00;
				Writeds1302 (WRITE_MINUTE,time[1]);	
			}
		
			if(set_f==3)	 //设置秒,同上
			{
				time[0]++;
				time[0]=(time[0]/10)*16+time[0]%10;
				if(time[0]>0x59)
					time[0]=0x00;
				Writeds1302 (WRITE_SECOND,time[0]);	
			}
			
			if(set_f==4)	 //设置闹钟-时
			{
				naozhong[0]++;		//闹钟-时 +1
				if(naozhong[0]>23)	//判断闹钟-时 是否大于23时
					naozhong[0]=0;	//如果是,回到0时
			}
		
			if(set_f==5)    //设置闹钟-分
			{
				naozhong[1]++;		//闹钟-分 +1
				if(naozhong[1]>59)	//判断闹钟-分 是否大于59时
					naozhong[1]=0;	//如果是,回到0分	
			}
			if(set_f==6)	//设置闹钟-开/关
			{
				naozhong[2]++;		//切换闹钟开/关,0表示关,1表示开	
				if(naozhong[2]==2)
					naozhong[2]=0;
			}
		}
		if(key_jia==0&&miaobiao_f==1)//秒表模式下
		{
			T0_num=0;				 //复位秒表时间
			times=0;
			fens=0;
		}	
	}
	//减键
	if(key_jian==0)			     //按键按下
	{
		delayms(7);				 //延时消抖
		if(key_jian==0&&set_f!=0)//再次判断按键按下
		{
			if(set_f==1)	//设置时,同上
			{			
				if(time[2]==0)
					time[2]=23;
				else
					time[2]--;
				time[2]=(time[2]/10)*16+time[2]%10;
				Writeds1302 (WRITE_HOUR,time[2]);		
			}
	
			if(set_f==2)	//设置分,同上
			{
				if(time[1]==0)
					time[1]=59;
				else
					time[1]--;
				time[1]=(time[1]/10)*16+time[1]%10;
				Writeds1302 (WRITE_MINUTE,time[1]);		
			}
	
			if(set_f==3)	//设置秒,同上
			{
				if(time[0]==0)
					time[0]=59;
				else
					time[0]--;
				time[0]=(time[0]/10)*16+time[0]%10;
				Writeds1302 (WRITE_SECOND,time[0]);			
			}
			if(set_f==4)	 //设置闹钟-时,同上
			{
				if(naozhong[0]==0)
					naozhong[0]=23;
				else	
					naozhong[0]--;						
			}
	
			if(set_f==5)	//设置闹钟-分,同上
			{
				if(naozhong[1]==0)
					naozhong[1]=59;
				else	
					naozhong[1]--;
			}
			
			if(set_f==6)	//设置闹钟-开/关,同上
			{
				naozhong[2]++;			
				if(naozhong[2]==2)
					naozhong[2]=0;
			}
		}
		if(key_jian==0&&miaobiao_f==1)//秒表模式
		{
			T0_num=0;				  //复位秒表时间
			times=0;
			fens=0;
		}
	}
	//秒表键,不支持连按
	if(key_miao==0&&set_f==0)		  //否者,切换秒表模式和正常模式
	{
		delayms(7);				 //延时消抖
		if(key_miao==0)//再次判断按键按下
		{
			miaobiao_f=~miaobiao_f;	  //切换秒表模式和正常模式		
			LCD_write_command(0x01);  //清除屏幕显示
		    delay_n40us(100);		  //延时等待全部清除完毕
			if(miaobiao_f==0)		  //退出秒表模式时,关闭秒表计时
			{
				TR0=0;				  //关闭定时器
				T0_num=0;			  //重置所有秒表的时间
				times=0;
				fens=0;
			}
		}
		while(!key_miao);
	}	
}
/*********************************************************
函数名称:uchar paixu(uchar *s)
函数作用:求平均值
参数说明:uchar型使用
*********************************************************/
uchar paixu(uchar *s)
{
	uchar i;
	uint val;
	val=0;
	for(i=0;i<10;i++) 		//进行累加
		val+=s[i];	
	return val/10;			//求平均数并返回
}

/*********************************************************
函数名称:void read_pm25()
函数作用:求PM2.5值
参数说明:
*********************************************************/
void read_pm25()
{
	uchar i;
	uchar temp[10];
	for(i=0;i<10;i++)					  //连续采集十个数据
	{	
		PM_out=1;						  //控制输出高电平
		delayus(34);					  //延时
		_nop_();
		_nop_();
		ADC0832_read(0);				  //采集AD值
		delayus(4);
		_nop_();
		_nop_();
		PM_out=0;						  //控制输出低电平
		delayus(1209);					  
		temp[i]=ADC_date;				  //记录AD值
	}
	ADC_date=paixu(temp);				  //求本次采集的十个数据平均值

	if(ADC_date>max)					  //记录历史最大值
		max=ADC_date;
	if(ADC_date<min)					  //记录历史最小值
		min=ADC_date;	

	PM25=(double)((ADC_date-min)/(max-min))*520;//计算PM2.5

	for(i=0;i<9;i++)					  //记录最近十个PM2.5值数据
		pm25_data[i]=pm25_data[i+1];
	pm25_data[9]=PM25;
	PM25=paixu2(pm25_data);				  //将记录的十个PM2.5值数据取平均值
}
/********************************************************
函数名称:void mian()
函数作用:主函数
参数说明:
********************************************************/ 
void main()
{
    uchar i=200;				        //循环计数变量
	if(key_ok==0)
	{
		buzz=0;
		delayms(100);
		if(key_ok==0)
		{
			for(i=0;i<5;i++)
				AT24C02_write_date(i,0);//写入数据保存
		}
		buzz=1;
	}

	naozhong[0]=AT24C02_read_date(0);//读取存储的【闹钟-时】数据
	naozhong[1]=AT24C02_read_date(1);//读取存储的【闹钟-分】数据
	naozhong[3]=AT24C02_read_date(2);//读取存储的【闹钟-开关】数据

	SGP30_Init();               //初始化SGP30
	T0_init();					//定时器初始化
	LCD_init();					//LCD1602初始化

	lcd1602_write_pic(0x00,pic);//将自定义字符“°”写入到LCD1602中
	while(1)					//死循环
	{
		scan();					//按键检测处理
		if(miaobiao_f==0)		//非秒表模式,正常显示模式
		{
			if(set_f==0)		//非设置模式下
			{
				i++;			//循环次数+1
				if(i>30)		//循环次数达到30次,采集一次温度
				{
					i=0;		//重置循环次数
					read_pm25();     //采集PM2.5值
					DHT11_read();    //DHT11读取温湿度函数
					SGP30_Read_CO2();//从SGP30读数据CO2
					Read_time();	//读取DS1302时间
				}
				display();		//更新显示数据
			}
			else
				if(set_f<4)		//设置时间模式
				{				
					Read_time();//读取时间
					display2();	//显示校准时间界面
				}
				else			//设置闹钟模式
					display3();	//显示设置闹钟界面
		}
		else					//秒表模式
			display4();
	}
}


设计清单

元件清单
'双掷开关
'蜂鸣器
STC89C51
下载口

具体实现截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考文献

[1]王瀚增,姜欣欣.基于C51单片机的多功能电子钟系统设计与仿真[J].通信电源技术,2018,35(02):117-119.
[2]李刚仁,王进. 基于单片机AT89S52的实时电子钟的Proteus仿真[J]. 公路与汽运,2011,(02):20-22+54.
[3]卢超. 基于单片机的数字电子钟的设计与制作[J]. 大庆师范学院学报,2006,(05):48-53.
[4]金子涵, 任致远, 史旭东,王胜铎. 基于Multisim 14仿真设计的多功能数字电子钟[J]. 电子产品世界, 2021, 28(06): 94-97.
[5]陈敏. 基于51单片机的多功能电子钟设计[J]. 轻工科技, 2023, 39(01): 105-108.
[6]邵英淼, 李晶晶, 马丽娜等. 基于无线通信的多功能室内环境检测系统设计[J]. 无线互联科技, 2020, 17(09): 1-2.
[7]张丽红, 张国祥. 基于51单片机的电子钟系统设计与仿真[J]. 电子世界, 2018(20): 134-135.
[8]张婷. 基于单片机的电子钟的设计与仿真[J]. 山西电子技术, 2017(06): 14-16.
[9]尹克岩. 基于单片机的多功能数字钟的设计[J]. 电子制作, 2017(15): 68-69+54.
[10]赵海雁, 闫强. 基于单片机多功能的电子钟系统设计[J]. 山西电子技术, 2017, (01): 58-61.
[11]马忠梅, 李元章, 王美刚,王拓, 单片机的C语言应用程序设计(第6版). 北京航空航天出版社,2017.
[12]王会良,王东锋,董冠强,单片机C语言应用100例. 电子工业出版社,2017.
[13]刘波. 51单片机应用开发典型范例基于PROTEUS仿真. 电子工业出版社, 2014.
[14]马修水,钟伟红,陈琢,刘西琳.传感器与检测技术,浙江大学出版社, 2016.5
[15]赵海雁, 闫强. 基于单片机多功能的电子钟系统设计[J]. 山西电子技术, 2017,(01): 58-61.
[16]叶青. 基于51单片机的多功能数字电子钟的设计[J]. 山东工业技术,2016,(10): 158-160.
[17]刘昕,杨峰,谢晋.基于单片机AT89C52的多功能电子钟设计[J].信息化研究,2010,36(04): 61-64.
[18]张淑骅. 基于单片机的温度电子钟显示系统[J]. 科技信息,2009,(33): 58+46.
[19]贺媛, 李昕, 马健, 纪永成. 室内二氧化碳浓度监测报警器设计[J]. 吉林大学学报(信息科学版),2023,41(05): 827-831.
[20]薛青. 多功能电子钟的设计与实现[J]. 黑龙江科技信息,2017,(09): 95.
[21]Vinay Divakar. Design and Implementation of Microcontroller Based Temperature Data Logging System[J]. International Journal of Engineering and Advanced Technology (IJEAT),2013,3(2).
[22]Jun Xia Zhang, Bing Wang, Ya Ning Song. Exploration of Humidity Data Acquisition System Based on Single Chip Microcomputer[J]. Advanced Materials Research, 2013, 2526(753-755).
[23]Jian Huang. Design of Electronic Clock based on STM32[J]. IOP Conference Series: Materials Science and Engineering,2017,242(1).
[24]Wen Haokang,Zheng Qiang. Design of a High Precision Digital Clock Based on Single Chip Microcomputer[J]. 人工生命とロボットに関する国際会議予稿集,2021,26.
[25]Hu X., Chen T.,Zhao N… Research on rail temperature measuring meter based on DS18B20 and STC12C series MCU[J]. RISTI - Revista Iberica de Sistemas e Tecnologias de Informacao,2016,2016(E8).

设计获取

文章下方名片联系我即可~

精彩专栏推荐订阅:在下方专栏👇🏻

毕业设计精品实战案例

收藏关注不迷路!!

🌟文末获取设计🌟

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2112476.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C学习(数据结构)-->排序

目录 一、直接插入排序 二、希尔排序 三、直接选择排序 四、快速排序 1、取基准值 1&#xff09;hoare找基准值​编辑 2&#xff09; 挖坑法找基准值​编辑 3&#xff09;快慢指针找基准值​编辑 2、递归快速排序 3、非递归快速排序 ​编辑 五、归并排序 ​编辑 六、计…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 9月7日,星期六

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年9月7日 星期六 农历八月初五 白露 1、 司法部&#xff1a;遏制地方乱发文、出台“奇葩”政策文件等情况。 2、 证监会&#xff1a;拉长离职人员入股禁止期至10年&#xff0c;扩大对离职人员从严监管范围。 3、 全国医护比…

三文带你轻松上手鸿蒙的AI语音03-文本合成声音

三文带你轻松上手鸿蒙的AI语音03-文本合成声音 前言 接上文 三文带你轻松上手鸿蒙的AI语音02-声音文件转文本 HarmonyOS NEXT 提供的AI 文本合并语音功能&#xff0c;可以将一段不超过10000字符的文本合成为语音并进行播报。 场景举例 手机在无网状态下&#xff0c;系统应用…

超声波测距模块HC-SR04(基于STM32F103C8T6HAL库)

超声波测距模块参考资料 1.电路连接及引脚配置 触发信号PA3只需要输出10us的高电平&#xff0c;所以直接设置成 普通的GPIO端口即可&#xff1b;回响信号使用外部中断&#xff0c;上升沿信号产生外部中断&#xff0c;打开定时器&#xff0c;下降沿再产生一次中断&#xff0c;读…

飞特STS3315基本使用方法

宁天道/FeelECH 01-介绍 串口总线舵机&#xff0c;可以通过一根线将多个舵机串联在一起&#xff0c;一个串口线片可以控制所有的舵机。 内带闭环&#xff0c;可以自定义舵机移动的最大速度&#xff0c;加速度&#xff0c; 可以修改各种模式&#xff0c;满足各种各样的需求&…

OTN光传送网-介绍

1. 引用 OTN光传送网--华为设备_otn传输设备建设方案-CSDN博客 OTN光传送网&#xff08;Optical Transport Network&#xff09;&什么是OTN-CSDN博客 https://zhuanlan.zhihu.com/p/403304019 术语&#xff1a; 英文缩写描述灰光模块彩光模块CWDM&#xff1a;Coarse Wa…

欺诈文本分类检测(十三):交叉训练验证

1. 引言 交叉验证主要讨论的是数据集的划分问题。 通常情况下&#xff0c;我们会采用均匀随机抽样的方式将数据集划分成3个部分——训练集、验证集和测试集&#xff0c;这三个集合不能有交集&#xff0c;常见的比例是8:1:1&#xff08;如同前文我们所作的划分)。这三个数据集…

吉利星座03组卫星发射

北京时间2024年9月6日2时30分&#xff0c;在太原卫星发射中心使用长征六号运载火箭&#xff0c;成功将民营“中国星链”——吉利未来出行星座第三个轨道面、吉利星座03组卫星发射升空&#xff0c;10颗卫星顺利进入预定轨道&#xff0c;发射任务获得圆满成功。此次任务是长征系列…

飞思相机存储卡格式化数据如何恢复?提供全面指南

在数字摄影时代&#xff0c;‌飞思相机以其卓越的成像质量和专业的性能&#xff0c;‌赢得了众多摄影师的青睐。‌然而&#xff0c;‌即使是专业的设备也难免遭遇数据丢失的困境&#xff0c;‌尤其是当存储卡不幸被格式化时。‌面对这一突如其来的灾难&#xff0c;‌许多摄影师…

qt QGraphicsScene场景坐标和场景内GraphicsItem局部坐标的相互转换

为了更清晰地解释场景坐标与局部坐标之间的转换过程&#xff0c;我们可以通过一个简单的实例来演示如何赋值场景坐标&#xff0c;并将其转换为图形项的局部坐标。 实例步骤 假设我们有一个场景 QGraphicsScene 和一个矩形图形项 QGraphicsRectItem&#xff0c;矩形的大小为 1…

Redis进阶(六):缓存

1.缓存 速度快的设备可以作为速度慢的设备的缓存 缓存能够有意义&#xff1a;二八定律&#xff0c;20%的数据可以应对80%的请求 通常使用redis作为数据库的缓存&#xff08;mysql&#xff09; 数据库是非常重要的组件&#xff0c;mysql速度比较慢 因为mysql等数据库&#x…

【 C++ 】类和对象的学习(三)

前言&#xff1a; &#x1f618;我的主页&#xff1a;OMGmyhair-CSDN博客 目录 一、初始化列表 二、类型转换 三、static成员 四、友元 五、内部类 六、匿名对象 一、初始化列表 当我们之前在写构造函数时&#xff0c;我们通常在构造函数内对成员变量进行赋值。但其实还…

系统架构师考试学习笔记第三篇——架构设计高级知识(19)嵌入式系统架构设计理论与实践

本章考点&#xff1a; 第19课时主要学习嵌入式系统架构设计的理论和工作中的实践。根据新版考试大纲&#xff0c;本课时知识点会涉及案例分析题&#xff08;25分&#xff09;。在历年考试中&#xff0c;案例题对该部分内容都有固定考查&#xff0c;综合知识选择题目中有固定分值…

北大港中文腾讯提出ViewCrafter:一张图像就可以制作影视特效和游戏画面!

北大和港中文联合腾讯人工智能实验室提出了 ViewCrafter&#xff0c;这是一种利用视频扩散模型的先验从单个或稀疏图像合成一般场景的高保真新视图的新方法。 可以简单理解为将复杂的图像转换成新角度的图像版本。首先&#xff0c;它会使用特殊的算法来读取一张或几张图像&…

SpringBoot项目-实现简单的CRUD功能和分页查询

背景 本博文主要是创建了一个新的SpringBoot项目&#xff0c;实现基本的增删改查&#xff0c;分页查询&#xff0c;带条件的分页查询功能。是方便初学者学习后端项目的一个比较清晰明了的实践代码&#xff0c;读者可根据博文&#xff0c;从自己动手创建一个新的SpringBoot项目…

Scratch教师节 —— 感恩教师节

小虎鲸Scratch资源站-免费Scratch作品源码,素材,教程分享平台! Scratch教师节动画作品——感恩教师节 在这个特别的日子里&#xff0c;我们迎来了教师节。为了表达对老师们的感激之情&#xff0c;Scratch平台上的小朋友们用创意与热情制作了精彩的动画作品——“感恩教师节”。…

在国产芯片上实现YOLOv5/v8图像AI识别-【4.3】RK3588使用yolov8+bytetrack实现跟踪更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案&#xff0c;专栏中实现了YOLOv5/v8在国产化芯片上的使用部署&#xff0c;并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频&#xff1a;https://www.bilibili.com/video/BV1or421T74f 背景…

【Canvas与艺术】四叶花

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>386.四叶花</title><style type"text/css">.c…

GDB watch starti i files

watch break starti 在程序的最初开始运行的位置处断下来 ​​ i files 查看程序及加载的 so 的 sections ​​

【Ubuntu】环境准备

平时不怎么接触运维。linux的东西都快忘完了&#xff0c;正好最近腾讯云优惠&#xff0c;38元一年&#xff0c;优惠拉满&#xff0c;拿下一个玩一玩&#xff0c;可以当小程序的服务器&#xff0c;记录一些常用的操作&#xff0c;省的每次用的时候都想不起来 1.有一个linux系统…