首页 > 其他分享 >【开源-详解】基于51单片机的智能闹钟设计 - 第二节 - 硬件连接与模块函数解析

【开源-详解】基于51单片机的智能闹钟设计 - 第二节 - 硬件连接与模块函数解析

时间:2024-12-25 18:29:35浏览次数:5  
标签:闹钟 引脚 void 51 Key 单片机 模块 按键 u8

51单片机智能闹钟 -- 硬件连接与模块函数解析

硬件准备:

  • 使用到的模块:
    – DHT11温湿度传感器x1
    – MQ135空气质量检测传感器x1
    – 无源蜂鸣器x1
    – OLED12864模块(I2C协议)x1
    – DS1302时钟模块x1
    – 双引脚式按键(其他按键也行但需要更具手册修改代码)x4-6
    – LED灯 x若干
    –公对母杜邦线,母对母杜邦线,跳线。x若干
    在这里插入图片描述

以下均可按需增减改:

  • 温湿度传感器DHT11的DATA引脚 -> P17
  • 时钟模块DS1302的CLK引脚 -> P25;DAT引脚 -> P26;RST引脚 -> P27
  • 蜂鸣器模块的I/O引脚 -> P24
  • OLED12864模块的SCL引脚 -> P03;SDA引脚 -> P02
  • 按键模块:从1-6:P32-37
  • LED灯:绿:P15;黄:P16。
  • 此处使用3.3V或5V供电均可

模块函数解析

OLED驱动模块(调用部分)

  • X轴:0-127格;Y轴:0-7页(8格每页)
    在这里插入图片描述
  • void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size);
    x,y :起点坐标 ;num:数值;
    len :数字的位数;size:字体大小(字符间距)

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

  • void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);
    x,y :起点坐标 ;chr:要显示的单个字符;size:字体大小(字符间距)

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

  • void OLED_ShowString(u8 x,u8 y, u8 *p,u8 Char_Size);
    x,y :起点坐标;*p:字符串;Char_Size:字体大小

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

  • void OLED_ShowCHinese(u8 x,u8 y,u8 no);
    可以在oledfont文件中的Hzk添加汉字大小的小图片。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • OLED汉字字模生成
    生成字模所需软件如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • OLED添加字模
    在这里插入图片描述
    添加相应的16进制编号,记得修改一下注释序号,方便查找。
    在这里插入图片描述

DHT11温湿度传感器(调用部分)

  • RH、RL、TH、TL外部可调用变量:在这里插入图片描述
    参考显示:
    在这里插入图片描述
  • void DHT11_get_Data();在这里插入图片描述
    参考显示
    在这里插入图片描述

DS1302时钟模块(调用部分)

  • 外部可调用变量
    在这里插入图片描述
    1.WriteAddr数组会在可调时钟中应用。
    2.DS1302time数组中是已将BCD码转换为10进制的数组,可直接使用,并正常显示。
  • 代码中BCD转10进制过程
    在这里插入图片描述
    在这里插入图片描述
  • void DS1302_ReadTime(void);
    在这里插入图片描述
  • void DS1302_Write(uchar addr,uchar dat);
    参数:写入的地址;写入的数据(BCD码)
    注意:在进行重写时间的时候需要禁止写保护,写完要开启写保护
    在这里插入图片描述
    运用示例:
    在这里插入图片描述

蜂鸣器模块(此处是无源蜂鸣器)

  • void Buzzer_Mode(uchar mode)
    参数,可以选择不同的声音模式。此处仅写了2种模式,可以扩写。

空气质量检测模块(DO)

  • 这里并未使用ADC转换芯片,故接DO口,直接判断IO口电平状态即可。

按键模块

  • uchar Key_GetNum();
    此写法为阻塞式写法:Delay消抖while等待
  • 非阻塞式按键写法:
    调用部分: 某变量 = Key_GetNum();获取键码值
uchar Key_Num;
/**
  * @brief  获取独立按键键码
  * @param  无
  * @retval 按下按键的键码,范围:0~6,无按键按下时返回值为0
  * 说  明:无
  // 此代码基于江协科技
  */
uchar Key_GetNum(void)
{
	uchar Temp;
	Temp = Key_Num;
	Key_Num = 0;
	return Temp;
}
/**
  * @brief  获取独立按键被按下的状态
  * @param  无
  * @retval 按下按键的键码,范围:0~6,无按键按下时返回值为0
  * 说  明:可根据相同的方式续写或更改为所需引脚;非阻塞式写法
	// 此代码基于江协科技
  */
uchar Key_GetState(void)
{
	if (P3_2 == 0)
	{
		return 1;
	}
	if (P3_3 == 0)
	{
		return 2;
	}
	if (P3_4 == 0)
	{
		return 3;
	}
	if (P3_5 == 0)
	{
		return 4;
	}
	if (P3_6 == 0)
	{
		return 5;
	}
	if (P3_7 == 0)
	{
		return 6;
	}
	return 0;
}
/**
  * @brief  判断按下和松手
  * @param  无
  * @retval 无
  * 说  明:根据按键的当前状态和上一次状态比较,来判断按键是否被按下
  // 此代码基于江协科技
  */
void Key_Tick(void)
{
	static uchar Count;
	static uchar CurrState, PrevState;
	
	Count ++;
	if (Count >= 20)
	{
		Count = 0;
		
		PrevState = CurrState;
		CurrState = Key_GetState();
		
		if (CurrState == 0 && PrevState != 0)
		{
			Key_Num = PrevState;
		}
	}
}
  • 非阻塞按键的定时器配置:
#include <REGX52.H>

void Timer0Init(void)			//1毫秒@11.0592MHz
{		
	TMOD &= 0xF0;				//设置定时器模式
	TMOD |= 0x01;				//设置定时器模式
	TL0 = 0x66;					//设置定时初值
	TH0 = 0xFC;					//设置定时初值
	TF0 = 0;					//清除TF0标志
	TR0 = 1;        			//定时器0开始计数
	ET0=1;						//开定时器0中断开关
	EA=1;						//开启中断总开关
	PT0=0;
}

中断执行函数:

void Timer0_Routine() interrupt 1
{
	TL0 = 0x18;					//设置定时初值
	TH0 = 0xFC;					//设置定时初值
	Key_Tick();
}

小节总结

“ 勤学如春起之苗,不见其增日有所长。惰学如磨刀之石,不见其损日有所亏。加油,日积月累,就能进步如飞!”

标签:闹钟,引脚,void,51,Key,单片机,模块,按键,u8
From: https://blog.csdn.net/2401_87000537/article/details/144642125

相关文章

  • 【草履虫也想学会】AI8051U学习历程-第一节-创建工程与点灯
    学习目标:例如:配置环境创建一个新的工程了解IO口的模式点灯3件套(亮-闪-流)软件安装通过keil官网、STC官网下载安装包通过安装包下载KeilC251(来源于国芯论坛)下载完长这样解压完长这样0XFD补丁(这个装不装都行,需要分别复制到C51/C251文件夹下的BIN目录中再执......
  • 基于51单片机的多功能控制终端设计
    1.项目背景  基于51单片机的多功能控制终端设计旨在实现一个集多种控制功能于一体的终端系统。该系统通过51单片机作为控制核心,结合外围电路和程序控制,实现对各种设备的有效控制。本设计以STC89C52RC作为主控MCU,外围接口设备有LCD1602显示屏幕、直流电机、温度传感器DS18......
  • Springboot旧教材交易系统a6151(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,书籍类型,书籍信息开题报告内容一、研究背景随着高等教育的普及和校园生活的丰富多彩,学生们在学习和生活中积累了大量的旧教材。这些旧教材对于个人而言,可......
  • STM32单片机定时器定时方法计算
    定时器是STM32单片机非常常见的外设,使用定时器来设置定时时间需要配置预分频系数(Prescaler)和自动重装载值(CounterPeriod)。 假设设置一个500ms的定时器,时钟频率72MHz,把预分频系数设置为7200(即写入预分频寄存器的值为7200-1),72MHz/7200=10KHz,这样就得到计数器的计数频......
  • 【总结(三)】单片机重点知识总结记录(串口重定向+按键消抖+延时)
    一.串口重定向串口重定向代码如下注意:要添加头文件include"stdio.h"要勾选微库,即UseMicroLIB/**********重定向************///串口1intfputc(intch,FILE*f){HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,0xffff);returnch;}intfgetc(FILE*f){......
  • 【无标题】51系列单片机学习:矩阵按键
    文章目录前言一、矩阵按键的硬件连接二、工作原理三、代码编写总结前言矩阵按键是一种通过行列交叉连接的按键阵列,可以节省单片机的IO口资源,用于实现多个按键的输入检测。以下是本文的简要介绍。一、矩阵按键的硬件连接1.将矩阵按键按照图1方式进行连接。图1.矩阵按......
  • 单片机实物成品-007 汽车防盗系统(代码+硬件+论文)
    汽车尾气监测系统(温度+震动传感器+红外热释电+GPS+三个指示灯+蜂鸣器+正常模式+防盗模式+wifi传输控制+送APP源码 )把该系统划分为两个不同设计主体,一方面为硬件控制主体,通过C语言来编码实现,以STM32开发板为核心控制器,利用多传感融合技术,通过感应车辆是否发生震动行为、是否......
  • 410、基于51单片机的温控电机仿真设计(正反转,加减速,LCD1602,独立按键)
    毕设帮助、开题指导、技术解答(有偿)见文末。目录一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括一、设计功能单片机读取温度传感器数据,获得温度,根据温度值对电机进行控制:1、设置4个温度值:T1、T2、T3、T4;通过按键修改设定温度2、温度低于T1,电机全......
  • 405、基于51单片机的洗衣机仿真设计(数码管,强洗,弱洗,漂洗;丝质,棉质,化纤)
    毕设帮助、开题指导、技术解答(有偿)见文末。目录一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括一、设计功能洗衣机控制面板设计。1、用直流电机的转速表征三种不同洗衣方式,弱洗、强洗、漂洗; 2、实现最长10分钟定时; 3、用三个独立按键设置......
  • 404、基于51单片机的大棚控制仿真设计(温湿度CO2,DHT11,LCD1602)
    毕设帮助、开题指导、技术解答(有偿)见文末。目录一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括一、设计功能大棚温湿度、二氧化碳含量控制系统:1、检测温湿度(DHT11)2、检测二氧化碳浓度(电位器代替)3、设置上下限,如果参数过限,启动控制自动调控大......