基于STM32F103C8T6的温湿度报警时钟

目前版本V1.0

V1.0        2024/2/4 更新

目录

整体电路图

3D效果图

按键部分

代码部分

key.c

key.h

实时时钟部分

代码部分

DS1302.c

DS1302.h

音乐播放部分

代码部分

beep.c

beep.h

music.c

music.h

温湿度部分

接线图

介绍

代码部分

DHT11.c

DHT11.h

OLED显示部分

OLED.c

OLED.h

Font_Library.h

串口(蓝牙)部分

代码部分

Myusart1.c

Myusart1.h

运行功能部分

代码部分

Function.c

Function.h

主函数

main.c


整体电路图

DHT11是用来测温湿度的   NTC负反馈热敏电阻是用来粗略测量温度的   DS1302时钟模块

OLED是用来显示的    蜂鸣器是用来报警的    HC05是蓝牙模块和声音传感器可以选择删去(本文并没有用到)

3D效果图

我画图排版这些比较差,如果需要自己重新设计排版等需求的,可以在下面的链接中下载

百度网盘:

链接:https://pan.baidu.com/s/12ZPU9pmEkyd6dxfbSfBP3g?pwd=F103
提取码:F103

按键部分

代码部分
key.c
#include "stm32f10x.h"                  // Device header
#include "KEY.h"
#include "Delay.h"

/**
  * @brief  按键初始化
  * @param  无
  * @retval 无
  */
void KEY_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; 
	GPIO_InitStructure.GPIO_Pin=Key4_Pin|Key5_Pin|Key6_Pin|Key7_Pin;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStructure);
}
/**
  * @brief  按键扫描
  * @param  无
  * @retval 获取按键的状态
  */
uint8_t KEY_Scan(void)
{
	if(!Key_4)//左下键按下
	{	
		while(Key_4==0)//等待按键松开
		Delay_ms(5);//延时消抖	
		return 4;
	}
	else if(!Key_5)//右下键按下
	{	
		while(Key_5==0);//等待按键松开
		Delay_ms(5);//延时消抖	
		return 5;
	}
	else if(!Key_6)//左上键按下
	{	
		while(Key_6==0);//等待按键松开
		Delay_ms(5);//延时消抖	
		return 6;
	}
	else if(!Key_7)//右上键按下
	{	
		while(Key_7==0);//等待按键松开
		Delay_ms(5);//延时消抖	
		return 7;
	}
	else {return 0;}
}

key.h
#ifndef __KEY_H
#define __KEY_H
/*-------------------------------------------------------------------------------*/
/*引脚定义*/
#define Key_Port	GPIOB
#define Key4_Pin	GPIO_Pin_4
#define Key5_Pin	GPIO_Pin_5
#define Key6_Pin	GPIO_Pin_6
#define Key7_Pin	GPIO_Pin_7

#define Key_4	GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4)
#define Key_5	GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)
#define Key_6	GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6)
#define Key_7	GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)
/*-------------------------------------------------------------------------------*/
/*相关函数*/
void KEY_Init(void);
uint8_t KEY_Scan(void);

#endif

实时时钟部分

采用DS1302模块

代码部分
DS1302.c
#include "stm32f10x.h"                  // Device header
#include "DS1302.h"

/*-------------------------------------------------------------------------------*/
struct TIMEData TimeData;
uint8_t read_time[7];
/*起始时间定义*/		
int Base_year  		=0x24;    //year	年
int Base_month  	=0x02;	//months	月
int Base_day  		=0x01;	//day		日
int Base_hour  		=0x00;	//hours		时
int Base_minute 	=0x00;	//minutes	分
int Base_second 	=0x00;	//seconds	秒
int Base_week  		=0x04;	//week		星期
/*闹钟时间定义*/						
int Clock_hour  	=0x00;	//hours		
int Clock_minute 	=0x00;	//minutes	
int Clock_second 	=0x00;	//seconds			
/*-------------------------------------------------------------------------------*/
/**
 * @brief       us延时
 * @param       无
 * @retval      无
 */
void DS1302_Delay_us(uint32_t xus)
{
	SysTick->LOAD = 72 * xus;				//设置定时器重装值
	SysTick->VAL = 0x00;					//清空当前计数值
	SysTick->CTRL = 0x00000005;				//设置时钟源为HCLK,启动定时器
	while(!(SysTick->CTRL & 0x00010000));	//等待计数到0
	SysTick->CTRL = 0x00000004;				//关闭定时器
}
/**
 * @brief       ms延时
 * @param       无
 * @retval      无
 */
void DS1302_Delay_ms(uint32_t xms)
{
	while(xms--){DS1302_Delay_us(1000);}
}

/**
 * @brief       获取实时时间
 * @param       无
 * @retval      无
 */

void DS1302_RealTime(void)
{
	//从DS1302读取实时时间(BCD码)
	read_time[0]=DS1302_read_rig(0x81);//读秒
	read_time[1]=DS1302_read_rig(0x83);//读分
	read_time[2]=DS1302_read_rig(0x85);//读时
	read_time[3]=DS1302_read_rig(0x87);//读日
	read_time[4]=DS1302_read_rig(0x89);//读月
	read_time[5]=DS1302_read_rig(0x8B);//读星期
	read_time[6]=DS1302_read_rig(0x8D);//读年
	//BCD码转换为10进制    BCD码转十进制:DEC=BCD>>4*10+BCD&0x0f; (2位BCD)  >>4  ==  /16    &0x0f==%16
	TimeData.Base_second=(read_time[0]>>4)*10+(read_time[0]&0x0f);
	TimeData.Base_minute=((read_time[1]>>4)&(0x07))*10+(read_time[1]&0x0f);
	TimeData.Base_hour=(read_time[2]>>4)*10+(read_time[2]&0x0f);
	TimeData.Base_day=(read_time[3]>>4)*10+(read_time[3]&0x0f);
	TimeData.Base_month=(read_time[4]>>4)*10+(read_time[4]&0x0f);
	TimeData.Base_week=read_time[5];
	TimeData.Base_year=(read_time[6]>>4)*10+(read_time[6]&0x0f)+2000;
	
	TimeData.Clock_hour=(Clock_hour>>4)*10+(Clock_hour&0x0f);
	TimeData.Clock_minute=(Clock_minute>>4)*10+(Clock_minute&0x0f);
	TimeData.Clock_second=(Clock_second>>4)*10+(Clock_second&0x0f);
	DS1302_Delay_ms(5);//延时
}
/**
 * @brief       基础时间设置  会自动进制  无需调整
 * @param       无
 * @retval      无
 */
void DS1302_BaseTime(void)
{
	DS1302_wirte_rig(0x8e,0x00);//关闭写保护
	DS1302_wirte_rig(0x8c,Base_year);//年
	DS1302_wirte_rig(0x88,Base_month);//月
	DS1302_wirte_rig(0x86,Base_day);//日
	DS1302_wirte_rig(0x84,Base_hour);//小时
	DS1302_wirte_rig(0x82,Base_minute);//分钟
	DS1302_wirte_rig(0x80,Base_second);//秒
	DS1302_wirte_rig(0x8a,Base_week);//星期
	DS1302_wirte_rig(0x8e,0x80);//关闭写保护
}

/**
 * @brief       初始化DS1302
 * @param       无
 * @retval      无
 */
void DS1302_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_Init();//开启时钟
	
	GPIO_InitStructure.GPIO_Pin = RST_Pin; //RST  CE
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
	GPIO_Init(RST_PORT, &GPIO_InitStructure);//初始化RST
	GPIO_InitStructure.GPIO_Pin = SCLK_Pin; //SCLK
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
	GPIO_Init(SCLK_PORT, &GPIO_InitStructure);//初始化SCLK
	
	RST(0);SCLK(0);
	DS1302_BaseTime();//初始化时间
	DS1302_Delay_ms(5);
}
/**
 * @brief       DATA引脚是要输入还是输出
 * @param       num  为0    输出状态
				num  为1    输入状态
 * @retval      无
 */
void DS1302_DATA_Init(uint16_t flag)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_Init();//开启时钟
	
	GPIO_InitStructure.GPIO_Pin = DATA_Pin; //DATA
	if(flag==0)
	{
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//配置双向I/O端口为输出态
	}
	else if(flag==1)
	{
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;	//配置双向I/O端口为输入态
	}
	GPIO_Init(DATA_PORT, &GPIO_InitStructure);
	if(flag==0){ DATA(0);}
}
/**
 * @brief       向DS1302发送一字节数据
 * @param       data  需要发送的字符
 * @retval      无
 */
void DS1302_write_onebyte(uint8_t data)
{
	DS1302_DATA_Init(0);//设置为输出模式
	uint8_t count=0;
	SCLK(0);
	for(count=0;count<8;count++)
	{	SCLK(0);
		if(data&0x01){DATA(1);}
		else{DATA(0);}//先准备好数据再发送
		SCLK(1);//拉高时钟线,发送数据
		data>>=1;
	}
}
/**
 * @brief       向指定寄存器地址发送数据
 * @param       address  地址
				data  需要发送的字符
 * @retval      无
 */
void DS1302_wirte_rig(uint8_t address,uint8_t data)
{
	uint8_t temp1=address;
	uint8_t temp2=data;
	RST(0);SCLK(0);
	DS1302_Delay_us(1);
	RST(1);
	DS1302_Delay_us(2);
	DS1302_write_onebyte(temp1);
	DS1302_write_onebyte(temp2);
	RST(0);SCLK(0);
	DS1302_Delay_us(2);
}

/**
 * @brief       从指定地址读取一字节数据
 * @param       address  地址
 * @retval      无
 */
uint8_t DS1302_read_rig(uint8_t address)
{
	uint8_t temp3=address; 
	uint8_t count=0;
	uint8_t return_data=0x00;
	RST(0);SCLK(0);
	DS1302_Delay_us(3);
	RST(1);
	DS1302_Delay_us(3);
	DS1302_write_onebyte(temp3);
	DS1302_DATA_Init(1);//配置I/O口为输入
	DS1302_Delay_us(2);
	for(count=0;count<8;count++)
	{
		DS1302_Delay_us(2);//使电平持续一段时间
		return_data>>=1;
		SCLK(1);DS1302_Delay_us(4);//使高电平持续一段时间
		SCLK(0);DS1302_Delay_us(14);//延时14us后再去读取电压,更加准确
		if(GPIO_ReadInputDataBit(DATA_PORT,DATA_Pin))
		{return_data=return_data|0x80;}
	}
	DS1302_Delay_us(2);
	RST(0);
	DATA(0);
	return return_data;
}


/**
 * @brief       加值函数
 * @param       num需要被加值的数据
 * @retval      添加后的值
 */
int add(int num)
{
	num=num+1;
	if((num-(int)num/0x10*0x10)%0x0A==0)
	{
		num=(int)num/0x10*0x10+0x10;
		return num;
	}
	else{return num;}
}
/**
 * @brief       多值加值
 * @param       num需要被加值的数据
 * @retval     	无
 */
void Set_add(int num)
{
	switch(num)
	{
		//年
		case 1:{	Base_year=add(Base_year);
					if(Base_year>0x99){Base_year=0x99;}break;
				}
		//月
		case 2:{	Base_month=add(Base_month);
					if(Base_month>0x12){Base_month=Base_month-0x12;Set_add(1);}break;
				}
		//日
		case 3:{	Base_day=add(Base_day);
					if(Base_month==2)//2月
					{
						if(Base_year%4==0)//闰年
						{
							if(Base_day>0x29){Base_day=Base_day-0x29;Set_add(2);}
						}
						else //非闰年
						{
							if(Base_day>0x28){Base_day=Base_day-0x28;Set_add(2);}
						}
					}
					else if(Base_month==4|Base_month==6|Base_month==9|Base_month==11)					
					{
						if(Base_day>0x30){Base_day=Base_day-0x30;Set_add(2);}
					}
					else if(Base_month==12)//12月要判断进年
					{
						if(Base_day>0x31){Base_day=Base_day-0x31;Set_add(2);}
					}
					else //1 3 5 7 8 10 月
					{
						if(Base_day>0x31){Base_day=Base_day-0x31;Set_add(2);}
					}
					break;
				}
		//时
		case 4:{	Base_hour=add(Base_hour);
					if(Base_hour==0x24){Base_hour=0x00;}//时归0  日进1
					break;
				}
		//分
		case 5:{	Base_minute=add(Base_minute);
					if(Base_minute==0x60){Base_minute=0x00;}//分归0 时进1
					break;}
		//秒 
		case 6:{	Base_second=add(Base_second);
					if(Base_second==0x60){Base_second=0x00;}//秒归0  //分进1
					break;}
		//星期
		case 7:{	Base_week=Base_week+1;
					if(Base_week==0x08){Base_week=0x01;}
					break;}
		//闹钟时
		case 8:{	Clock_hour=add(Clock_hour);
					if(Clock_hour>0x24){Clock_hour=0x00;}
					break;
				}
		//闹钟分
		case 9:{	Clock_minute=add(Clock_minute);
					if(Clock_minute>0x60){Clock_minute=0x00;}
					break;}
		//闹钟秒 
		case 10:{	Clock_second=add(Clock_second);
					if(Clock_second>0x60){Clock_second=0x00;}
					break;}
	}
	DS1302_Init();
}
/**
 * @brief       减值函数
 * @param       num需要被减值的数据
 * @retval      减值后的值
 */
int decrease(int num)
{
	if(num%0x10==0)  num=num-0x06;
	num=num-1;
	return num;
}
/**
 * @brief       多值减值
 * @param       num需要被减值的数据
 * @retval     	无
 */
void Set_decrease(int num)
{
	switch(num)
	{
		//年
		case 1:{	Base_year=decrease(Base_year);
					if(Base_year<0x00){Base_year=0x00;}
					break;
				}
		//月
		case 2:{	Base_month=decrease(Base_month);
					if(Base_month<0x01){Base_month=0x12;Set_decrease(1);}break;
				}
		//日
		case 3:{	Base_day=decrease(Base_day);
					if(Base_month==3)//3月退回2月
					{
						if(Base_year%4==0)//闰年
						{
							if(Base_day<0x01){Base_day=0x29;Set_decrease(2);}
						}
						else //非闰年
						{
							if(Base_day<0x01){Base_day=0x28;Set_decrease(2);}
						}
					}
					else if(Base_month==4|Base_month==6|Base_month==9|Base_month==11)					
					{
						if(Base_day<0x01){Base_day=0x31;Set_decrease(2);}
					}
					else if(Base_month==1)//1月要判断退年
					{
						if(Base_day<0x01){Base_day=0x31;Set_decrease(2);}
					}
					else //1 3 5 7 8 10 月
					{
						if(Base_day<0x01){Base_day=0x30;Set_decrease(2);}
					}
					break;
				}
		//时
		case 4:{	Base_hour=decrease(Base_hour);
					if(!(Base_hour>0x00&&Base_hour<0x24)){Base_hour=0x00;}
					break;
				}
		//分
		case 5:{	Base_minute=decrease(Base_minute);
					if(!(Base_minute>0x00&&Base_minute<0x59)){Base_minute=0x00;}
					break;}
		//秒 
		case 6:{	Base_second=decrease(Base_second);
					if(!(Base_second>0x00&&Base_second<0x59)){Base_second=0x00;}
					break;}
		//星期
		case 7:{	Base_week=Base_week-1;
					if(Base_week==0x00){Base_week=0x07;}
					break;}		
		//闹钟时
		case 8:{	Clock_hour=decrease(Clock_hour);
					if(!(Clock_hour>0x00&&Clock_hour<0x24)){Clock_hour=0x00;}
					break;
				}
		//闹钟分
		case 9:{	Clock_minute=decrease(Clock_minute);
					if(!(Clock_minute>0x00&&Clock_minute<0x59)){Clock_minute=0x00;}
					break;}
		//闹钟秒 
		case 10:{	Clock_second=decrease(Clock_second);
					if(!(Clock_second>0x00&&Clock_second<0x59)){Clock_second=0x00;}
					break;}
	}
	DS1302_Init();
}
DS1302.h
#ifndef __DS1302_H 
#define __DS1302_H  

/*-------------------------------------------------------------------------------*/
/*引脚定义*/
#define RST_PORT	GPIOA
#define RST_Pin		GPIO_Pin_7
#define RST(x)		x ?  GPIO_SetBits(RST_PORT,RST_Pin): GPIO_ResetBits(RST_PORT,RST_Pin);

#define SCLK_PORT	GPIOA
#define SCLK_Pin	GPIO_Pin_5
#define SCLK(x)		x ?  GPIO_SetBits(SCLK_PORT,SCLK_Pin): GPIO_ResetBits(SCLK_PORT,SCLK_Pin);

#define DATA_PORT	GPIOA
#define DATA_Pin	GPIO_Pin_6
#define DATA(x)		x ?  GPIO_SetBits(DATA_PORT,DATA_Pin): GPIO_ResetBits(DATA_PORT,DATA_Pin);

#define RCC_Init()  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
/*-------------------------------------------------------------------------------*/

struct TIMEData
{
	uint16_t Base_year;
	uint8_t  Base_month;
	uint8_t  Base_day;
	uint8_t  Base_hour;
	uint8_t  Base_minute;
	uint8_t  Base_second;
	uint8_t  Base_week;
	uint8_t  Clock_hour;
	uint8_t  Clock_minute;
	uint8_t  Clock_second;
};//创建TIMEData结构体方便存储时间日期数据
extern struct TIMEData TimeData;//全局变量

/*-------------------------------------------------------------------------------*/
/*相关函数*/
void DS1302_RealTime(void);//获取实时时间
void DS1302_BaseTime(void);//基础时间设置
void DS1302_DATA_Init(uint16_t num);//设置DATA端口输出还是输入
void DS1302_write_onebyte(uint8_t data);//向DS1302发送一字节数据
void DS1302_wirte_rig(uint8_t address,uint8_t data);//向指定寄存器写一字节数据
uint8_t DS1302_read_rig(uint8_t address);//从指定寄存器读一字节数据
void DS1302_Delay_us(uint32_t xus);
void DS1302_Delay_ms(uint32_t xms);
int add(int num);
void Set_add(int num);
int decrease(int num);
void Set_decrease(int num);
/*-------------------------------------------------------------------------------*/
/*常用函数*/
void DS1302_Init(void);//DS1302初始化函数
void Show_Time(void);//显示时间
/*-------------------------------------------------------------------------------*/
#endif

音乐播放部分

采用无缘蜂鸣器播放歌曲

代码部分
beep.c
#include "stm32f10x.h"                  // Device header
#include "BEEP.h"
	
/**
  * @brief  BEEP蜂鸣器初始化
  * @param  arr  psc  定时器参数
  * @retval 无
  */	
void TIM2_PWM_Init(u16 arr,u16 psc)
{  
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//定时器时钟使能
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  //使能GPIO外设时钟使能                                                                   	

	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值	 80K
	TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
	TIM_TimeBaseStructure.TIM_RepetitionCounter = 50; 
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

	TIM_OCInitTypeDef  TIM_OCInitStructure;
	TIM_OCStructInit(&TIM_OCInitStructure);
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2    模式1和2正好相反变化
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
	TIM_OCInitStructure.TIM_Pulse =50; //设置待装入捕获比较寄存器的脉冲值CCR
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
	TIM_OC1Init(TIM2, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

	TIM_Cmd(TIM2, ENABLE);  //使能TIM2
}
beep.h
#ifndef __BEEP_H
#define __BEEP_H

/*-------------------------------------------------------------------------------*/
/*引脚定义*/
#define BEEP_PORT		GPIOA
#define BEEP_Pin		GPIO_Pin_0
#define BEEP(x)		x ?  GPIO_SetBits(BEEP_PORT,BEEP_Pin):GPIO_ResetBits(BEEP_PORT,BEEP_Pin);
#define Beep(x)			GPIO_WriteBit(BEEP_PORT,BEEP_Pin,(BitAction)(x));
/*-------------------------------------------------------------------------------*/
/*相关函数*/
void TIM2_PWM_Init(u16 arr,u16 psc);

#endif
music.c
#include "stm32f10x.h"                  // Device header
#include "MUSIC.h"

int tone[]=
{
		H5_,H4,M6,H4,H7,H6_,H5_,M6,H4,H4,H6_,M6,H4,H4,
		M6,H4_,M6,H5_,H4,M6,H4,H7,H6_,H5_,M6,H4,H4,H6_,
		M6,H4,H4,M6,H6_,H4,M6,						//前奏34
		E,M6,M6,H4,H4,H2_,H1_,						//故事的小黄花41
		E,M6,M6,H4,H4,H2_,H1_,H2_,H4,H6_,			//从出生那年就飘着51
		E,M6,M6,H4,H4,H2_,H1_,						//童年的荡秋千58
		E,H1_,H2_,H1_,H1,H1_,H2_,H1,H1_,H2_,H4,		//随记忆一直晃到现在69
		H6_,H4,H4,H1_,H1,H1_,H2_,					//lalala.....76
		H4,H2_,H1_,H1_,H1_,H1_,H2_,H1_,H2_,H4,		//lalala.....86
		H6_,H4,H2_,H1_,H1,H1_,H2_,H4,				//吹着前奏望着天空94
		H2_,H1_,H1_,H1_,H1_,H2_,H1_,H2_,H4,			//我想起花瓣试着掉落103
		E,H4,H4,H4,H4,H5_,H4_,H4,M6,H1,H1_,H4,H4,	//没想到失去的勇气我还留着116
		E,H4,H4,H4,H4,H1_,H4,						//好想再问一遍123
		H5_,H4_,H4,M6,H1,H1_,H4,H2_,				//你会等待还是离开131
		H1_,H2_,H1,H1_,H4,M6,M4_,M4,M4_,M6,H4,		//刮风这天我试过握着你手142
		E,H4,M5_,M5_,E,M5_,M6,M6,					//但偏偏雨渐渐150
		E,M6,H1,H1_,H2_,H1_,H1,H1_,					//大到我看你不见158
		E,H1_,H1,M6,H1_,E,H1,M6,M4_,M2_,M4_,M4,M4,	//还要多久我才能在你身边171
		E,M4,M4,M6,M6,M5_,M6,H1,					//等到放晴的那天179
		H2_,H1_,H1,M6,M5_,H4,M5_,M4_,M4_,			//也许我会比较好一点188
		H1_,H2_,H1,H1_,E,H4,M6,M4_,M4,M4_,M6,H4,	//从前从前有个人爱你很久200
		E,H4,M5_,M5_,E,M5_,M6,M6,					//但偏偏风渐渐208
		E,M6,H1,H1_,H2_,H1_,H1,H1_,					//大到我看你不见216
		E,H1_,H1,M6,H1_,E,H1,M6,M4_,M2_,M4_,M4,M4,	//好不容易又能再多爱一天229
		E,H4,M4,M6,M6,M5_,M6,						//但故事的最后236
		H1,H5_,H4_,H4,H2_,H1_,H2_,E,H1_,H4,			//你好像还是说了拜拜246
};
int beat[]=
{
		  2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2,
	      2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2,
	      2, 2, 2, 2, 1, 1, 2,                      //前奏  
	      2, 2, 2, 2,4, 2, 2,                       //故事的小黄花
          2, 2, 2, 2, 2, 1, 1, 1, 1, 2,           	//从出生那年就飘着
       	  2, 2, 2, 2,4, 2, 2,                       //童年的荡秋千  
	      2,4, 1, 1, 1, 1, 1, 1, 1, 1, 2,       	//随记忆一直晃到现在
     	  2, 2, 2, 2, 2, 2, 2,                      //Re So So Si Do Si La
      	  1, 1, 2, 2, 2, 2, 1, 1, 2,4,            	//So La Si Si Si Si La Si La So 
	      2, 2, 2, 2, 2, 2, 2, 1,                   //吹着前奏 望着天空
     	  1, 2, 2, 2, 2, 1, 1, 2, 3,                //我想起花瓣试着掉落 
	      16, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,5,	//没想到 失去的勇气我还留着 
	      2, 1, 1, 1, 1, 2, 2,                      //好想再问一遍
	      2, 2, 2, 2, 2, 2, 2,5,                    //你会等待还是离开
	      2, 2, 2,4, 2, 2, 2, 2, 2, 2, 2,        	//刮风这天 我试过握着你手
	      2, 2, 2, 2, 2, 2, 2, 2,                   //但偏偏 雨渐渐 
	      2, 2, 2, 2, 2, 2, 2,5,                    //大到我看你不见
	      3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,5,		//还要多久 我才能在你身边  
	      2, 2, 2, 2, 2, 2, 2, 2,                   //等到放晴的那天
	      2, 2, 2, 2, 2, 2, 3, 1,4,                	//也许我会比较好一点
	      2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,    	//从前从前 有个人爱你很久
		  2, 2, 2, 2, 2, 2, 2, 2,                   //但偏偏 风渐渐 
		  2, 2, 2, 2, 2, 2, 2,6,                    //大到我看你不见
		  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,5,		//好不容易 又能再多爱一天 
		  2, 2, 2, 2, 2, 2, 2,                      //但故事的最后
		  2, 2, 2, 2, 2, 2,4, 20, 2,8,           	//你好像还是说了 拜拜
};
/**
  * @brief  单音符播放
  * @param  tone 要播放的音调
  * @param  time 节拍
  * @param  space 停顿
  * @retval 无
  */	
void Play_Music(int tone,int time,int space)
{
	TIM_PrescalerConfig(TIM2,tone,TIM_PSCReloadMode_Immediate);
	Music_Delay_ms(time);
	TIM_PrescalerConfig(TIM2,0,TIM_PSCReloadMode_Immediate);
	Music_Delay_ms(space);
}
/**
  * @brief  播放完整音乐
  * @param  无
  * @retval 无
  */
void Music_play(void)
{
	int space;int j;int time;
	for(uint8_t i=0;i<=Music_Length;i++)
	{
		space=10;j=beat[i];
		time=j*180;
		Play_Music(tone[i],time,space);
	}
}
/**
  * @brief  延时
  * @param  无
  * @retval 无
  */
void Music_Delay_ms(uint32_t xms)
{
	while(xms--)
	{
		SysTick->LOAD = 72 * 1000;				//设置定时器重装值
		SysTick->VAL = 0x00;					//清空当前计数值
		SysTick->CTRL = 0x00000005;				//设置时钟源为HCLK,启动定时器
		while(!(SysTick->CTRL & 0x00010000));	//等待计数到0
		SysTick->CTRL = 0x00000004;				//关闭定时器
	}
}
music.h
#ifndef __MUSIC_H
#define __MUSIC_H

/*-------------------------------------------------------------------------------*/
/*相关定义*/
#define L1		262
#define L1_		277	
#define L2		294
#define L2_		311
#define L3		31
#define L4		349
#define L4_		370
#define L5		392
#define L5_		415
#define L6		440
#define L6_		466
#define L7		494

#define M1		523
#define M1_		554
#define M2		587
#define M2_		622
#define M3		659
#define M4		698
#define M4_		740
#define M5		784
#define M5_		831
#define M6		880
#define M6_		932
#define M7		988

#define H1		1046
#define H1_		1109
#define H2		1175
#define H2_		1245
#define H3		1318
#define H4		1397
#define H4_		1480
#define H5		1568
#define H5_		1661
#define H6		1760
#define H6_		1865
#define H7		1976

#define E		0    //empty空拍
#define P1		16    //全音符   		X----
#define P2 		8     //2分音符	 		X-
#define P4 		4     //4分音符(1拍)   	X
#define P8 		2     //8分音符	  		X_
#define P16		1	  //16分音符  		X__
#define P32		0.5	  //32分音符  		X___

#define  Music_Length	246
/*-------------------------------------------------------------------------------*/
/*相关函数*/
void Music_Delay_ms(uint32_t xms);
void Music_play(void);

#endif

温湿度部分

采用DHT11温湿度传感器

接线图

DHT1 ------STM32

VCC-----------STM32的3.3V供电

DATA---------STM32的PA4

NC------------悬空

GND----------STM32的GND

介绍

DHT11的更多详细通信原理等,请参考:

玩转传感器——DHT11温湿度传感器(STM32版)_温湿度传感器接线图-CSDN博客

代码部分
DHT11.c
#include "stm32f10x.h"                  // Device header
#include "DHT11.h"

u32 rec_data[4];//0 1 湿度   2 3温度

/**
  * @brief  DHT11输入输出模式
  * @param  mode   0输入  1输出
  * @retval 无
  */
void DHT11_Mode(uint8_t mode) 
{
	RCC_APB2PeriphClockCmd(RCC_Port, ENABLE);
	GPIO_InitTypeDef GPIO_InitStructure;
	if(mode ==0)//输入模式
	{
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  //浮空输入
	}
	else//输出模式
	{
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
	}
	GPIO_InitStructure.GPIO_Pin = DHT11_Pin;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(Port, &GPIO_InitStructure);
}

/**
  * @brief  DHT11延时
  * @param  xus  多少us
  * @retval 无
  */
void DHT11_Delay_us(uint32_t xus)
{
	SysTick->LOAD = 72 * xus;				//设置定时器重装值
	SysTick->VAL = 0x00;					//清空当前计数值
	SysTick->CTRL = 0x00000005;				//设置时钟源为HCLK,启动定时器
	while(!(SysTick->CTRL & 0x00010000));	//等待计数到0
	SysTick->CTRL = 0x00000004;				//关闭定时器
}
/**
  * @brief  DHT11延时
  * @param  xms  多少ms
  * @retval 无
  */
void DHT11_Delay_ms(uint32_t xms)
{
	while(xms--)
	{
		DHT11_Delay_us(1000);
	}
}
/**
  * @brief  DHT11启动
  * @param  无
  * @retval 无
  */
void DHT11_Start(void) //启动
{
	DHT11_Mode(1);//开启输出模式
	DHT11(1);
	DHT11_Delay_ms(30); //先拉高30ms
	DHT11(0);
	DHT11_Delay_ms(20);//拉低20ms
	DHT11(1);
	DHT11_Delay_us(30);//拉高30us
	DHT11_Mode(0);//开启输入模式
}

/**
  * @brief  DHT11获取一个字节
  * @param  无
  * @retval 字节
  */
char DHT11_Get_Byte(void)
{
	unsigned char i = 0;
	unsigned char data;
	for(i=0;i<8;i++) //1个数据就是1个字节byte,1个字节byte有8位bit
	{
		while( Read_Data == 0); //从1bit开始,低电平变高电平,等待低电平结束
		DHT11_Delay_us(30); //延迟30us是为了区别数据0和数据1,0只有26~28us
		data <<= 1; //左移
		if( Read_Data == 1 ) //如果过了30us还是高电平的话就是数据1
		{
			data += 1; //数据+1
		}
		while( Read_Data == 1 ); //高电平变低电平,等待高电平结束
	}
	return data;
}

/**
  * @brief  DHT11获取温湿度
  * @param  无
  * @retval 无
  */
void DHT11_REC_Data(void)
{
	unsigned int R_H,R_L,T_H,T_L;
	unsigned char RH,RL,TH,TL,CHECK;
	DHT11_Start(); //主机发送信号
	DHT11(1); //拉高电平

	if( Read_Data == 0 ) //判断DHT11是否响应
	{
		while( Read_Data == 0); //低电平变高电平,等待低电平结束
		while( Read_Data == 1); //高电平变低电平,等待高电平结束
		R_H = DHT11_Get_Byte();
		R_L = DHT11_Get_Byte();
		T_H = DHT11_Get_Byte();
		T_L = DHT11_Get_Byte();
		CHECK = DHT11_Get_Byte(); //接收5个数据
		DHT11(0); //当最后一bit数据传送完毕后,DHT11拉低总线 50us
		DHT11_Delay_us(55); //这里延时55us
		DHT11(1); //随后总线由上拉电阻拉高进入空闲状态。
		if(R_H + R_L + T_H + T_L == CHECK) //和检验位对比,判断校验接收到的数据是否正确
		{
			RH = R_H;
			RL = R_L;
			TH = T_H;
			TL = T_L;
		}
	}
	rec_data[0] = RH;//湿度整数
	rec_data[1] = RL;//湿度小数
	rec_data[2] = TH;//温度整数
	rec_data[3] = TL;//温度小数
}
DHT11.h
#ifndef __DHT11_H
#define __DHT11_H

extern u32 rec_data[4];

/*----------------------------DHT11引脚配置----------------------------*/
#define DHT11_Pin    GPIO_Pin_4
#define Port         GPIOA
#define RCC_Port	 RCC_APB2Periph_GPIOA

#define DHT11(x)	 x?GPIO_SetBits(Port, DHT11_Pin):GPIO_ResetBits(Port, DHT11_Pin)//置电平
#define Read_Data    GPIO_ReadInputDataBit(Port, DHT11_Pin)							//读取电平
/*------------------------------函数------------------------------*/
void DHT11_Delay_us(uint32_t xus);
void DHT11_Delay_ms(uint32_t xms);
void DHT11_Mode(uint8_t mode);
void DHT11_Start(void);
char DHT11_Get_Byte(void);

void DHT11_REC_Data(void);//获取数据

#endif

OLED显示部分

OLED.c
#include "stm32f10x.h"                  // Device header
#include "Font_Library.h"
#include "OLED.h"
const float PI = 3.1415926;
/**
  * @brief  I2C的状态
  * @param  无
  * @retval 无
  */
void OLED_I2C_STATE(uint8_t mode)
{
	if (mode==1)//I2C开始
	{
		I2C_W_SDA(1);
		I2C_W_SCL(1);
		I2C_W_SDA(0);
		I2C_W_SCL(0);
	}
	else if(mode==0)// I2C停止
	{
		I2C_W_SDA(0);
		I2C_W_SCL(1);
		I2C_W_SDA(1);
	}	
}

/**
  * @brief  发送一个字节
  * @param  Byte 要发送的一个字节
  * @retval 无
  */
void OLED_SendByte(uint8_t Byte)
{
	if(CP==0)//SPI
	{
		for (uint8_t i = 0; i < 8; i++)
		{
			SPI_W_D0(0);
			SPI_W_D1(Byte & (0x80 >> i));
			SPI_W_D0(1);
		}
	}
	else if(CP==1)//I2C
	{
		for (uint8_t i = 0; i < 8; i++)
		{
			I2C_W_SDA(Byte & (0x80 >> i));
			I2C_W_SCL(1);
			I2C_W_SCL(0);
		}
		I2C_W_SCL(1);	//额外的一个时钟,不处理应答信号
		I2C_W_SCL(0);
	}
}	

/**
  * @brief  OLED写命令
  * @param  Command 要写入的命令
  * @retval 无
  */
void OLED_WriteCommand(uint8_t Command)
{
	if(CP==0)//SPI
	{
		SPI_W_CS(0);
		SPI_W_DC(0);
		OLED_SendByte(Command);
		SPI_W_CS(1);
	}
	else if(CP==1)//I2C
	{
		OLED_I2C_STATE(1);
		OLED_SendByte(0x78);		//从机地址
		OLED_SendByte(0x00);		//写命令
		OLED_SendByte(Command); 
		OLED_I2C_STATE(0);
	}
}


/**
  * @brief  OLED写数据
  * @param  Data 要写入的数据
  * @retval 无
  */
void OLED_WriteData(uint8_t Data)
{
	if(CP==0)//SPI
	{
		SPI_W_CS(0);
		SPI_W_DC(1);
		OLED_SendByte(Data);
		SPI_W_CS(1);
	}
	else if(CP==1)//I2C
	{
		OLED_I2C_STATE(1);
		OLED_SendByte(0x78);		//从机地址
		OLED_SendByte(0x40);		//写数据
		OLED_SendByte(Data);
		OLED_I2C_STATE(0);
	}
}

/**
  * @brief  OLED设置光标位置
  * @param  Y 以左上角为原点,向下方向的坐标,范围:0~7
  * @param  X 以左上角为原点,向右方向的坐标,范围:0~127
  * @retval 无
  */
void OLED_SetCursor(uint8_t Y, uint8_t X)
{
	OLED_WriteCommand(0xB0 | Y);					//设置Y位置
	OLED_WriteCommand(0x10 | ((X & 0xF0) >> 4));	//设置X位置高4位
	OLED_WriteCommand((X & 0x0F)|0x00  );			//设置X位置低4位
}

/**
  * @brief  OLED清屏
  * @param  无
  * @retval 无
  */
void OLED_Clear(void)
{  
	for (uint8_t j = 0; j < 8; j++)
	{
		OLED_SetCursor(j, 0);
		for(uint8_t i = 0; i < OLED_Length; i++)
		{
			OLED_WriteData(0x00);
		}
	}
}
/**
  * @brief  OLED清屏(某行某列)
  * @param  hang   0~4  第0~4行   如果只要清列  hang=0
  * @param  lie   0~16  第0~16列  如果只要清行  lie=0
  * @retval 无
  */
void OLED_Clear_hang(uint8_t hang,uint8_t lie)
{  
	uint8_t i, j;
	for (j = hang*2-2; j < 2*hang; j++)
	{
		OLED_SetCursor(j, 0);
		for(i = 0; i < OLED_Length; i++)
		{
			OLED_WriteData(0x00);
		}
	}
	for (j = 0; j < 8; j++)
	{
		OLED_SetCursor(j, lie*8-8);
		for(i = lie*8-8; i <lie*8; i++)
		{
			OLED_WriteData(0x00);
		}
	}
}

/**
  * @brief  OLED显示一个字符
  * @param  Line 行位置,范围:1~4
  * @param  Column 列位置,范围:1~16
  * @param  Char 要显示的一个字符,范围:ASCII可见字符
  * @retval 无
  */
void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char)
{      	
	OLED_SetCursor((Line - 1) * 2, (Column - 1) * 8);		//设置光标位置在上半部分
	for (uint8_t i = 0; i < 8; i++)
	{
		OLED_WriteData(ASCALL_8x16[Char - ' '][i]);			//显示上半部分内容
	}
	OLED_SetCursor((Line - 1) * 2 + 1, (Column - 1) * 8);	//设置光标位置在下半部分
	for (uint8_t i = 0; i < 8; i++)
	{
		OLED_WriteData(ASCALL_8x16[Char - ' '][i + 8]);		//显示下半部分内容
	}
}


/**
  * @brief  OLED显示字符串
  * @param  Line 起始行位置,范围:1~4
  * @param  Column 起始列位置,范围:1~16
  * @param  String 要显示的字符串,范围:ASCII可见字符
  * @retval 无
  */
void OLED_ShowString(uint8_t Line, uint8_t Column, char *String)
{
	for (uint8_t i = 0; String[i] != '\0'; i++)
	{
		OLED_ShowChar(Line, Column + i, String[i]);
	}
}

/**
  * @brief  OLED显示数字(十进制,正数
  * @param  Line 起始行位置,范围:1~4
  * @param  Column 起始列位置,范围:1~16
  * @param  Number 要显示的数字,范围:0~4294967295
  * @retval 无
  */
void OLED_ShowUnsignedNum(uint8_t Line, uint8_t Column, uint32_t Number,uint8_t Length)
{
	for (uint8_t i = 0; i < Length; i++)							
	{
		OLED_ShowChar(Line, Column + i, Number / MyPow(10, Length - i - 1) % 10 + '0');
	}
}
/**
  * @brief  OLED显示数字(十进制,正数)
  * @param  Line 起始行位置,范围:1~4
  * @param  Column 起始列位置,范围:1~16
  * @param  Number 要显示的数字,范围:0~4294967295
  * @retval 无
  */
void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number)
{
	uint8_t Length=MyJudge(Number);//要显示数字的长度,范围:1~10
	for (uint8_t i = 0; i < Length; i++)							
	{
		OLED_ShowChar(Line, Column + i, Number / MyPow(10, Length - i - 1) % 10 + '0');
	}
}
/**
  * @brief  OLED显示数字(十进制,带符号数)
  * @param  Line 起始行位置,范围:1~4
  * @param  Column 起始列位置,范围:1~16
  * @param  Number 要显示的数字,范围:-2147483648~2147483647
  * @retval 无
  */
void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number)
{
	uint32_t Number1= Number;
	if (Number >= 0)
	{
		OLED_ShowChar(Line, Column, '+');
	}
	else
	{
		OLED_ShowChar(Line, Column, '-');
		Number1 = -Number;
	}
	uint8_t length=MyJudge(Number);//要显示数字的长度,范围:1~10
	for (uint8_t i = 0; i < length; i++)							
	{
		OLED_ShowChar(Line, Column + i + 1, Number1 / MyPow(10, length - i - 1) % 10 + '0');
	}
}
/**
  * @brief  获取整数有几位 
  * @param  num  整数值   范围:-2147483648~2147483647
  * @retval datalength  几位 
  */
int32_t MyJudge(int32_t num)
{
	int32_t integer=num;  
	int32_t datalength=0;
	while(integer!=0)   
	{
		datalength++;
		integer=integer/10;//一共有几位 
	}
	if (num==0) datalength=1;
	return datalength;
}
/**
  * @brief  OLED显示数字(十六进制,正数)
  * @param  Line 起始行位置,范围:1~4
  * @param  Column 起始列位置,范围:1~16
  * @param  Number 要显示的数字,范围:0~0xFFFFFFFF
  * @param  Length 要显示数字的长度,范围:1~8
  * @retval 无
  */
void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length)
{
	uint8_t i, SingleNumber;
	for (i = 0; i < Length; i++)							
	{
		SingleNumber = Number / MyPow(16, Length - i - 1) % 16;
		if (SingleNumber < 10)
		{
			OLED_ShowChar(Line, Column + i, SingleNumber + '0');
		}
		else
		{
			OLED_ShowChar(Line, Column + i, SingleNumber - 10 + 'A');
		}
	}
}
/**
  * @brief  OLED显示数字(二进制,正数)
  * @param  Line 起始行位置,范围:1~4
  * @param  Column 起始列位置,范围:1~16
  * @param  Number 要显示的数字,范围:0~1111 1111 1111 1111
  * @param  Length 要显示数字的长度,范围:1~16
  * @retval 无
  */
void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length)
{
	for (uint8_t i = 0; i < Length; i++)							
	{
		OLED_ShowChar(Line, Column + i, Number / MyPow(2, Length - i - 1) % 2 + '0');
	}
}

/**
  * @brief  OLED初始化
  * @param  无
  * @retval 无
  */
void OLED_Init(void)
{
	for (uint32_t i = 0; i < 1000; i++)			//上电延时
	{
		for (uint32_t j = 0; j < 1000; j++);
	}
	if(CP==1)//I2C初始化
	{
		I2C_RCC();
		GPIO_InitTypeDef GPIO_InitStructure;
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
		GPIO_InitStructure.GPIO_Pin = I2C_SCL_PIN;
		GPIO_Init(I2C_SCL_PORT, &GPIO_InitStructure);
		GPIO_InitStructure.GPIO_Pin = I2C_SDA_PIN;
		GPIO_Init(I2C_SDA_PORT, &GPIO_InitStructure);
		I2C_W_SCL(1);
		I2C_W_SDA(1);
	}
	else if(CP==0)//SPI
	{
		SPI_RCC();
		GPIO_InitTypeDef GPIO_InitStructure;
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
		
		GPIO_InitStructure.GPIO_Pin = SPI_D0_Pin;
		GPIO_Init(SPI_D0_Port, &GPIO_InitStructure);
		GPIO_InitStructure.GPIO_Pin = SPI_D1_Pin;
		GPIO_Init(SPI_D1_Port, &GPIO_InitStructure);
		GPIO_InitStructure.GPIO_Pin = SPI_RES_Pin;
		GPIO_Init(SPI_RES_Port, &GPIO_InitStructure);
		GPIO_InitStructure.GPIO_Pin = SPI_DC_Pin;
		GPIO_Init(SPI_DC_Port, &GPIO_InitStructure);
		GPIO_InitStructure.GPIO_Pin = SPI_CS_Pin;
		GPIO_Init(SPI_CS_Port, &GPIO_InitStructure);
		
		SPI_W_D0(1);
		SPI_W_D1(1);
		SPI_W_RES(1);
		SPI_W_DC(1);
		SPI_W_CS(1);
	}
	OLED_WriteCommand(0xAE);	//关闭显示
	OLED_WriteCommand(0xD5);	//设置显示时钟分频比/振荡器频率
	OLED_WriteCommand(0x80);
	OLED_WriteCommand(0xA8);	//设置多路复用率
	OLED_WriteCommand(0x3F);
	OLED_WriteCommand(0xD3);	//设置显示偏移
	OLED_WriteCommand(0x00);
	OLED_WriteCommand(0x40);	//设置显示开始行
	OLED_WriteCommand(0xA1);	//设置左右方向,0xA1正常 0xA0左右反置
	OLED_WriteCommand(0xC8);	//设置上下方向,0xC8正常 0xC0上下反置
	OLED_WriteCommand(0xDA);	//设置COM引脚硬件配置
	OLED_WriteCommand(0x12);
	OLED_WriteCommand(0x81);	//设置对比度控制
	OLED_WriteCommand(0xCF);
	OLED_WriteCommand(0xD9);	//设置预充电周期
	OLED_WriteCommand(0xF1);
	OLED_WriteCommand(0xDB);	//设置VCOMH取消选择级别
	OLED_WriteCommand(0x30);
	OLED_WriteCommand(0xA4);	//设置整个显示打开/关闭
	OLED_WriteCommand(0xA6);	//设置正常/倒转显示
	OLED_WriteCommand(0x8D);	//设置充电泵
	OLED_WriteCommand(0x14);
	OLED_WriteCommand(0xAF);	//开启显示		
	OLED_Clear();				//OLED清屏
}
/**
  * @brief  oled显示汉字
  * @param  Line 起始行位置
  * @param  Column 起始列位置
  * @param  num字模库的下标位置 
  * @retval 无
  */
void OLED_ShowChinese(uint8_t Line, uint8_t Column, uint8_t Num)
{
	uint8_t wide = 16;//字宽
	OLED_SetCursor(( Line - 1 ) * 2, ( Column - 1 )* wide);	//参数1:把光标设置在第几行. 参数2:把光标设置在第几列
	for (uint8_t i = 0; i < wide; i++)
	{
		OLED_WriteData(Chinese_16x16_[2*Num][i]);//显示上半部分内容
	}
	OLED_SetCursor(( Line - 1 ) * 2 + 1,( Column - 1) * wide);		
	for (uint8_t i = 0; i < wide ; i++)
	{ 
		OLED_WriteData(Chinese_16x16_[2*Num][i+wide]);//显示下半部分内容
	}
}
/**
  * @brief  绘制一个像素点
  * @param  xy 坐标  x的范围0~127,y的范围0~64  
  * @retval 无
  */
void OLED_PutPixel(uint8_t  x,uint8_t y)
{
	uint8_t data1= 0x01<<(y%8);;  //data1当前点的数据 
	OLED_WriteCommand(0xb0+(y>>3));
	OLED_WriteCommand(((x&0xf0)>>4)|0x10);
	OLED_WriteCommand((x&0x0f)|0x00);
	OLED_WriteData(data1); 	 	
}
/**
  * @brief  绘制一个菱形
  * @param  xy 中心坐标
  * @param  d  端点距离中心的距离
  * @retval 无
  */
void OLED_PutDiamond(uint8_t  x,uint8_t y,uint8_t d)
{
	for(uint8_t i=0;i<=d;i++)
	{
		OLED_PutPixel(x-i,y-d+i);//左上
		OLED_PutPixel(x-d+i,y+i);//左下
		OLED_PutPixel(x+i,y-d+i);//右上
		OLED_PutPixel(x+d-i,y+i);//右下
	}
}
/**
  * @brief  绘制一个长方形
  * @param  xy 中心坐标
  * @param  l长 
  * @param  w宽
  * @retval 无
  */
void OLED_PutRectangle(uint8_t  x,uint8_t y,uint8_t l,uint8_t w)
{
	uint8_t width=w;
	uint8_t length=l;
	if(width>=length) 
	{
		uint8_t t=width;
		width=length;
		length=t;
	}
	for(uint8_t i=0;i<=width;i++)
	{
		OLED_PutPixel(x-length/2,y-width/2+i);
		OLED_PutPixel(x+length/2,y-width/2+i);
	}
	for(uint8_t i=0;i<=length;i++)
	{
		OLED_PutPixel(x-length/2+i,y-width/2);
		OLED_PutPixel(x-length/2+i,y+width/2);
	}
}
/**
  * @brief  绘制一个圆形
  * @param  xy 圆心坐标
  * @param  r半径
  * @retval 无
  */
void OLED_PutCircle(uint8_t x,uint8_t y,uint8_t r) 
{
	double k=(PI/360);//数值不要改动
	for(int i=0;i<=180;i++)
	{
		OLED_PutPixel(x+MyCos(k*i)*r,y+MySin(k*i)*r);//上半圆
		OLED_PutPixel(x+MyCos(k*i)*r,y-MySin(k*i)*r);//上半圆
		OLED_PutPixel(x-MyCos(k*i)*r,y-MySin(k*i)*r);//下半圆
		OLED_PutPixel(x-MyCos(k*i)*r,y+MySin(k*i)*r);//下半圆
	}
	OLED_Delay_ms(5);
}

/**
  * @brief  绘制一条直线
  * @param  x1y1 点坐标
  * @param  x2y2 点坐标
  * @retval 无
  */
void OLED_PutLine(uint8_t x1,uint8_t y1,uint8_t x2,uint8_t y2) 
{
	uint8_t Y1=y1;
	int8_t	deltaX=x2-x1;
	int8_t  deltaY=y2-y1;
	int8_t  k= deltaY/deltaX;
	if(x1>x2){deltaX=-deltaX;}
	if(y1>y2){Y1=y2;deltaY=-deltaY;}
	
	if(x1==x2)
	{
		for(uint8_t i=0;i<=deltaY;i++)
		{
			OLED_PutPixel(x1,Y1+i);
		}
	}
	else 
	{
		for(uint8_t i=0;i<=(int)deltaX;i++)
		{
			OLED_PutPixel(x1+i,(int)(k * i + y1));
		}
	}
}
/**
  * @brief  自动显示浮点数的整数部分和小数部分 并自带符号
  * @param  hang  显示在第几行
  * @param  lie  显示从第几列开始
  * @param	num  数值
  * @param	reserve  需要保留几位小鼠
  * @retval 无
  */
void OLED_ShowFloat (uint8_t hang,uint8_t lie,double num,uint8_t reserve)
{
	int32_t integer=(int)num; 
	uint8_t length=MyJudge(integer);
	float decimal=(num-integer)*MyPow(10,reserve);
	if (num<0){decimal=-decimal;}
	
	OLED_ShowSignedNum(hang,lie,integer);//整数部分
	OLED_ShowString(hang,length+lie+1,"."); //小数点
	OLED_ShowNum(hang,length+lie+2,decimal);//小数部分
}

/*水平滚动*/
/**************************************
*   函 数 名: OLED_vertical_scroll
*   功能说明: 水平滚动
*   形    参:  第二行27 向右   26向左
*   返 回 值: 无
*************************************/
//void OLED_vertical_scroll(void)
//{
//	OLED_WriteCommand(0x2E);        //关闭滚动
//	
//	OLED_WriteCommand(0x26);        //27向右  26向左
//	
//	OLED_WriteCommand(0x00);        //虚拟字节	
//	OLED_WriteCommand(0x00);       	//起始页
//	OLED_WriteCommand(0x07);        //滚动时间间隔 0x07
//	OLED_WriteCommand(0x07);        //终止页 7
//	OLED_WriteCommand(0x00); 		//虚拟字节
//	OLED_WriteCommand(0xFF); 		//虚拟字节
//	OLED_WriteCommand(0x2F);        //开启滚动	
//}






/**
  * @brief  OLED次方函数
  * @retval 返回值等于X的Y次方
  */
int32_t MyPow(int32_t X, int32_t Y)
{
	uint32_t Result = 1;
	while (Y--)  {Result *= X;}
	return Result;
}
/**
  * @brief  求绝对值
  * @retval 绝对值
  */
int32_t MyAbs(int32_t x)
{
    return ((x > 0) ? x : -x);
}
/**
  * @brief  求绝对值
  * @retval 绝对值
  */
float MyFabs(float x)
{
    return ((x > 0.0) ? x : -x);
}
/**
  * @brief  求sin
  * @retval sin
  */
float MySin(float x)
{
    float n,sum,x2,temp;
    int32_t i, m;
    m = (int32_t)(x / 2/PI);
    x = x - 2*PI * m;
    n = x;
    sum = 0.0f;
    i = 1;
    x2 = x * x;
    do
    {
        sum += n;
        i++;
        temp = -n * x2;
        n = temp / (((i << 2) - 6) * i + 2);  // n = temp / (2*i - 1) / (2*i - 2);
    } while (MyFabs(n)>=(1e-3f));

    return sum;
}
/**
  * @brief  求cos
  * @retval cos
  */
float MyCos(float x)
{
    return MySin(PI/2.0f-x);
}
/**
  * @brief  求tan
  * @retval tan
  */
float MyTan(float x)
{
    return MySin(x)/MyCos(x);
}
/**
  * @brief  求最小值
  * @retval min
  */
int32_t MyMin(int32_t x, int32_t y)
{
	return ((x>y)?y:x);
}
/**
  * @brief  求最大值
  * @retval max
  */
int32_t MyMax(int32_t x, int32_t y)
{
	return ((x>y)?x:y);
}


/**
  * @brief  显示正弦波
  * @param  max 最大值
  * @retval 无
  */
void OLED_PutSin(int max)
{
	float sin_arr[OLED_Length+1]; 
	for(uint8_t i =1;i<=OLED_Length;i++)
	{
		sin_arr[i]=(MySin(2*PI*i/OLED_width)*max)/OLED_width*1.5+OLED_width/2;
		OLED_PutPixel(i,sin_arr[i]);
		OLED_Delay_ms(5);
		if(i==OLED_Length-1){OLED_Delay_ms(500);OLED_Clear();}
	}
	
}
/**
  * @brief   显示方波
  * @param   max  min 最大值最小值 
  * @param	 paragraph  要几个周期的波形  (分几段)
  * @retval  无
  * @example OLED_PutSquare(0,256,2);
  */
void OLED_PutSquare(uint16_t min,uint16_t max,uint16_t paragraph)
{
	uint16_t square_arr[OLED_Length]; 
	uint16_t max_min=max-min;
	paragraph=paragraph*2;
	for(uint16_t i=1;i<=paragraph;i++)
	{
		for(uint16_t j =(i-1)*OLED_Length/paragraph;j<=i*OLED_Length/paragraph;j++)
		{
			square_arr[j]=max_min/OLED_width+OLED_width/2+20*MyPow(-1,i-1);
		}
	}
	uint16_t Left;uint16_t Right;
	for(uint16_t i =0;i<=OLED_Length-1;i++)
	{
		OLED_PutPixel(i,square_arr[i]);
		OLED_Delay_ms(10);
		if(i!=0)
		{
			Left=MyMin(square_arr[i],square_arr[i-1]);
			Right=MyMax(square_arr[i],square_arr[i-1]);
			for(uint16_t j=Left;j<=Right;j++){OLED_PutPixel(i,j);}
		}
		if(i==OLED_Length-1){OLED_Clear();}
	}
}

/**
  * @brief   显示三角波
  * @param   max  min 最大值最小值 
  * @param	 paragraph  要几个周期的波形  (分几段)
  * @retval  无
  * @example OLED_triangular_arr(0,256,8);
  */
void OLED_PutTriangular(int min,int max,int paragraph)
{
	float triangular_arr[OLED_Length]; 
	int max_min=max-min;
	int Paragraph=paragraph*2;
	for(int i=1;i<=Paragraph;i++)
	{
		for(int j =(i-1)*OLED_Length/Paragraph;j<=i*OLED_Length/Paragraph;j++)
		{
			if(i%2==1)  		
			{
				triangular_arr[j]=min/OLED_width+max_min/OLED_width*(-j+i*OLED_Length/Paragraph);//偶数段上升
			}
			else
			{
				triangular_arr[j]=max/OLED_width-max_min/OLED_width*(j-(i-1)*OLED_Length/Paragraph);//奇数段下降
			}
		}
	}
		//显示示例
	for(int j =0;j<OLED_Length;j++)
	{
		OLED_PutPixel(j,triangular_arr[j]);
		OLED_Delay_ms(10);
		if(j==OLED_Length-1){OLED_Clear();}
	}
}




void OLED_Delay_us(uint32_t xus)
{
	SysTick->LOAD = 72 * xus;				//设置定时器重装值
	SysTick->VAL = 0x00;					//清空当前计数值
	SysTick->CTRL = 0x00000005;				//设置时钟源为HCLK,启动定时器
	while(!(SysTick->CTRL & 0x00010000));	//等待计数到0
	SysTick->CTRL = 0x00000004;				//关闭定时器
}
void OLED_Delay_ms(uint32_t xms)
{
	while(xms--)
	{
		OLED_Delay_us(1000);
	}
}
void OLED_Delay_s(uint32_t xs)
{
	while(xs--)
	{
		OLED_Delay_ms(1000);
	}
} 
OLED.h
#ifndef __OLED_H
#define __OLED_H
extern const float PI;
/*------------------------------------------------------------------*/
/*OLED尺寸大小定义*/
#define OLED_Length 	128
#define OLED_width  	64
/*------------------------------------------------------------------*/
/*通信协议选择*/
//int SPI=0;		int I2C=1;
#define CP					    1  		//Communication_protocol通信协议	
/*----------------------------I2C引脚配置----------------------------*/
#define I2C_SCL_PIN				GPIO_Pin_12
#define I2C_SCL_PORT			GPIOB
#define I2C_SDA_PIN				GPIO_Pin_13
#define I2C_SDA_PORT			GPIOB
#define I2C_RCC()				RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE)
#define I2C_W_SCL(x)			GPIO_WriteBit(I2C_SCL_PORT,I2C_SCL_PIN, (BitAction)(x))
#define I2C_W_SDA(x)			GPIO_WriteBit(I2C_SDA_PORT,I2C_SDA_PIN, (BitAction)(x))
										
			
/*----------------------------SPI引脚配置----------------------------*/
#define SPI_D0_Pin				GPIO_Pin_12
#define SPI_D0_Port				GPIOB
#define SPI_D1_Pin				GPIO_Pin_13
#define SPI_D1_Port				GPIOB
#define SPI_RES_Pin				GPIO_Pin_14
#define SPI_RES_Port			GPIOB
#define SPI_DC_Pin				GPIO_Pin_15
#define SPI_DC_Port				GPIOB
#define SPI_CS_Pin				GPIO_Pin_8
#define SPI_CS_Port				GPIOA
#define SPI_RCC()				RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);\
								RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
#define SPI_W_D0(x)				GPIO_WriteBit(SPI_D0_Port, SPI_D0_Pin, (BitAction)(x))
#define SPI_W_D1(x)				GPIO_WriteBit(SPI_D1_Port, SPI_D1_Pin, (BitAction)(x))
#define SPI_W_RES(x)			GPIO_WriteBit(SPI_RES_Port,SPI_RES_Pin, (BitAction)(x))
#define SPI_W_DC(x)				GPIO_WriteBit(SPI_DC_Port, SPI_DC_Pin, (BitAction)(x))
#define SPI_W_CS(x)				GPIO_WriteBit(SPI_CS_Port, SPI_CS_Pin, (BitAction)(x))
/*------------------------------------------------------------------*/
/*常用函数*/
void OLED_Init(void);//初始化
void OLED_Clear(void);//清屏
void OLED_Clear_hang(uint8_t hang,uint8_t lie);//清楚某列某行
void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number);//显示数值
void OLED_ShowString(uint8_t Line, uint8_t Column, char *String);//显示字符串
void OLED_ShowChinese(uint8_t Line, uint8_t Column, uint8_t Num);//显示汉字
void OLED_ShowFloat (uint8_t hang,uint8_t lie,double num,uint8_t reserve);//显示浮点数
void OLED_ShowUnsignedNum(uint8_t Line, uint8_t Column, uint32_t Number,uint8_t Length);//限制长度显示
/*------------------------------------------------------------------*/
/*数据传输函数*/
void OLED_I2C_STATE(uint8_t mode);
void OLED_SendByte(uint8_t Byte);
void OLED_WriteData(uint8_t Data);
void OLED_WriteCommand(uint8_t Command);
void OLED_SetCursor(uint8_t Y, uint8_t X);
/*------------------------------------------------------------------*/
void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char);
void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number);
void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length);
void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length);
void OLED_ShowFloat(uint8_t hang,uint8_t lie,double num,uint8_t reserve);
/*------------------------------------------------------------------*/
/*延时函数*/
void OLED_Delay_us(uint32_t xms);
void OLED_Delay_ms(uint32_t xms);
void OLED_Delay_s(uint32_t xs);
/*------------------------------------------------------------------*/
/*数学函数*/
int32_t MyPow(int32_t X, int32_t Y);
int32_t MyJudge(int32_t num);
int32_t MyAbs(int32_t x);
float MyFabs(float x);
float MySin(float x);
float MyCos(float x);
float MyTan(float x);
int32_t MyMin(int32_t x, int32_t y);
int32_t MyMax(int32_t x, int32_t y);
/*------------------------------------------------------------------*/
/*绘图函数*/
void OLED_PutPixel(uint8_t  x,uint8_t y);
void OLED_PutDiamond(uint8_t  x,uint8_t y,uint8_t d);
void OLED_PutRectangle(uint8_t  x,uint8_t y,uint8_t l,uint8_t w);
void OLED_PutCircle(uint8_t x,uint8_t y,uint8_t r) ;
void OLED_PutLine(uint8_t x1,uint8_t y1,uint8_t x2,uint8_t y2) ;
void OLED_PutSin(int max);
void OLED_PutSquare(uint16_t min,uint16_t max,uint16_t paragraph);
void OLED_PutTriangular(int min,int max,int paragraph);
/*------------------------------------------------------------------*/
#endif

汉字库

Font_Library.h
#ifndef __Font_Library_H
#define __Font_Library_H

/*OLED字模库,宽8像素,高16像素*/
const uint8_t ASCALL_8x16[][16]=
{
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//  0
	
	0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1
	
	0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2
	
	0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,
	0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3
	
	0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,
	0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4
	
	0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,
	0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5
	
	0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,
	0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6
	
	0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7
	
	0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,
	0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8
	
	0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,
	0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9
	
	0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,
	0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10
	
	0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,
	0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11
	
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12
	
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13
	
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14
	
	0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,
	0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15
	
	0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
	0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16
	
	0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,
	0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17
	
	0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,
	0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18
	
	0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,
	0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19
	
	0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,
	0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20
	
	0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,
	0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21
	
	0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,
	0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22
	
	0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,
	0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23
	
	0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,
	0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24
	
	0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
	0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25
	
	0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,
	0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26
	
	0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
	0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27
	
	0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,
	0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28
	
	0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
	0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29
	
	0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,
	0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30
	
	0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,
	0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31
	
	0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,
	0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32
	
	0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,
	0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33
	
	0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,
	0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34
	
	0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,
	0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35
	
	0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,
	0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36
	
	0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,
	0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37
	
	0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,
	0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38
	
	0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,
	0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39
	
	0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,
	0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40
	
	0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,
	0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41
	
	0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,
	0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42
	
	0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,
	0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43
	
	0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,
	0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44
	
	0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,
	0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45
	
	0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,
	0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46
	
	0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,
	0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47
	
	0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,
	0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48
	
	0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,
	0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49
	
	0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,
	0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50
	
	0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,
	0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51
	
	0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,
	0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52
	
	0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,
	0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53
	
	0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,
	0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54
	
	0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,
	0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55
	
	0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,
	0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56
	
	0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,
	0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57
	
	0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,
	0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58
	
	0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,
	0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59
	
	0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60
	
	0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,
	0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61
	
	0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62
	
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63
	
	0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64
	
	0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,
	0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65
	
	0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,
	0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66
	
	0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,
	0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67
	
	0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,
	0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68
	
	0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,
	0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69
	
	0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,
	0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70
	
	0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,
	0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71
	
	0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,
	0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72
	
	0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,
	0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73
	
	0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,
	0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74
	
	0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,
	0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75
	
	0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,
	0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76
	
	0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
	0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77
	
	0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,
	0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78
	
	0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,
	0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79
	
	0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,
	0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80
	
	0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,
	0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81
	
	0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,
	0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82
	
	0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,
	0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83
	
	0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,
	0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84
	
	0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,
	0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85
	
	0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,
	0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86
	
	0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,
	0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87
	
	0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,
	0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88
	
	0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,
	0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89
	
	0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
	0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90
	
	0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,
	0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91
	
	0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92
	
	0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,
	0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93
	
	0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94
};



/* (16 X 16 , 宋体 )*/
const uint8_t Chinese_16x16_[][16]=
{
{0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00},//dian
{0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00},//电0
 
{0x10,0x0C,0x44,0x24,0x14,0x84,0x45,0x26,0x44,0x84,0x14,0x24,0x44,0x14,0x0C,0x00},//rong
{0x04,0x04,0x02,0xFE,0x45,0x44,0x44,0x44,0x44,0x44,0x45,0xFE,0x02,0x04,0x04,0x00},/*"容",1*/
  
{0x00,0x00,0xFC,0x04,0xD4,0x54,0x54,0x54,0xD4,0x04,0x7F,0x84,0xC5,0x36,0x04,0x00},//gan
{0x88,0x66,0x01,0x00,0x63,0x82,0x82,0x92,0xAB,0x84,0x82,0xC1,0x02,0x24,0xCF,0x00},/*"感",2*/
  
{0x00,0xFE,0x02,0x22,0xDA,0x06,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00},//zu
{0x00,0xFF,0x08,0x10,0x08,0x47,0x40,0x7F,0x42,0x42,0x42,0x42,0x7F,0x40,0x40,0x00},/*"阻",3*/
  
{0x00,0x00,0xFE,0x02,0x82,0x82,0x82,0x82,0xFA,0x82,0x82,0x82,0x82,0x82,0x02,0x00},//ya
{0x80,0x60,0x1F,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x44,0x58,0x40,0x40,0x00},/*"压",4*/
  
{0x10,0x60,0x02,0x8C,0x00,0x44,0x64,0x54,0x4D,0x46,0x44,0x54,0x64,0xC4,0x04,0x00},//liu
{0x04,0x04,0x7E,0x01,0x80,0x40,0x3E,0x00,0x00,0xFE,0x00,0x00,0x7E,0x80,0xE0,0x00},/*"流",5*/
  
{0x00,0x20,0x18,0xC7,0x44,0x44,0x44,0x44,0xFC,0x44,0x44,0x44,0x44,0x04,0x00,0x00},//nian
{0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00},/*"年",6*/
  
{0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00},//yue
{0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,0x00},/*"月",7*/
  
{0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00},//ri
{0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00},/*"日",8*/
  
{0x00,0xFC,0x84,0x84,0x84,0xFC,0x00,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x00},//shi
{0x00,0x3F,0x10,0x10,0x10,0x3F,0x00,0x00,0x01,0x06,0x40,0x80,0x7F,0x00,0x00,0x00},/*"时",9*/
  
{0x80,0x40,0x20,0x90,0x88,0x86,0x80,0x80,0x80,0x83,0x8C,0x10,0x20,0x40,0x80,0x00},//fen
{0x00,0x80,0x40,0x20,0x18,0x07,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x00,0x00,0x00},/*"分",10*/
  
{0x24,0x24,0xA4,0xFE,0x23,0x22,0x00,0xC0,0x38,0x00,0xFF,0x00,0x08,0x10,0x60,0x00},//miao
{0x08,0x06,0x01,0xFF,0x01,0x06,0x81,0x80,0x40,0x40,0x27,0x10,0x0C,0x03,0x00,0x00},/*"秒",11*/
  
{0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0x82,0x82,0x02,0x00,0x00},//zheng
{0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00},/*"正",12*/
  
{0x00,0x20,0x10,0xE8,0x24,0x27,0x24,0xA4,0x24,0x34,0x2C,0xE0,0x00,0x00,0x00,0x00},//fu
{0x00,0x80,0x80,0x4F,0x40,0x20,0x18,0x07,0x10,0x10,0x20,0x4F,0x80,0x00,0x00,0x00},/*"负",13*/
  
{0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00},//san
{0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00},/*"三",14*/
  
{0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00},//er
{0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00},/*"二",15*/
  
{0x10,0x10,0xD0,0xFF,0x90,0x10,0x02,0x02,0xFE,0x02,0x02,0x62,0x5A,0xC6,0x00,0x00},//ji
{0x04,0x03,0x00,0xFF,0x00,0x43,0x30,0x8F,0x80,0x43,0x2C,0x10,0x2C,0x43,0x80,0x00},/*"极",16*/
  
{0x88,0x64,0x23,0xA2,0xA6,0xAA,0xA2,0xBA,0xA4,0xA3,0xA2,0x26,0x2A,0xA2,0x62,0x00},//guan
{0x00,0x00,0x00,0xFF,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4B,0xF8,0x00,0x00,0x00,0x00},/*"管",17*/
  
{0x00,0x00,0xC0,0x40,0x40,0x40,0x7F,0x48,0x48,0x48,0x48,0xC8,0x08,0x08,0x00,0x00},//dian
{0x80,0x40,0x37,0x04,0x04,0x14,0x64,0x04,0x14,0x64,0x04,0x07,0x10,0xE0,0x00,0x00},/*"点",18*/
  
{0x10,0x10,0x10,0xFF,0x10,0x90,0x08,0xC8,0x49,0x4E,0x48,0xC8,0x08,0x08,0x00,0x00},//kang
{0x04,0x44,0x82,0x7F,0x01,0x80,0x60,0x1F,0x00,0x00,0x00,0x3F,0x40,0x40,0x78,0x00},/*"抗",19*/
  
{0x40,0x7C,0x40,0x7F,0x48,0x48,0x40,0xF2,0x12,0x1A,0xD6,0x12,0x12,0xF2,0x02,0x00},//ping
{0x90,0x8E,0x40,0x4F,0x20,0x1E,0x80,0x4F,0x20,0x18,0x07,0x10,0x20,0x4F,0x80,0x00},/*"频",20*/
  
{0x00,0x14,0xA4,0x44,0x24,0x34,0xAD,0x66,0x24,0x94,0x04,0x44,0xA4,0x14,0x00,0x00},//lv
{0x08,0x09,0x08,0x08,0x09,0x09,0x09,0xFD,0x09,0x09,0x0B,0x08,0x08,0x09,0x08,0x00},/*"率",21*/
  
{0x00,0x00,0xFE,0x82,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x82,0xFE,0x00,0x00,0x00},//zhou
{0x80,0x60,0x1F,0x00,0x00,0x1E,0x12,0x12,0x12,0x1E,0x40,0x80,0x7F,0x00,0x00,0x00},/*"周",22*/
  
{0x00,0x04,0xFF,0x24,0x24,0x24,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00},//qi
{0x88,0x48,0x2F,0x09,0x09,0x19,0xAF,0x48,0x30,0x0F,0x02,0x42,0x82,0x7F,0x00,0x00},/*"期",23*/
  
{0x08,0x08,0x08,0x08,0x88,0x78,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00},//zuo
{0x20,0x10,0x48,0x46,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x40,0x40,0x00},/*"左",24*/
  
{0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00},//zhong
{0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x0F,0x00,0x00,0x00},/*"中",25*/
  
{0x08,0x08,0x08,0x08,0xC8,0x38,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00},//you
{0x08,0x04,0x02,0x01,0xFF,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0xFF,0x00,0x00,0x00},/*"右",26*/
  
{0x08,0x08,0xE8,0x29,0x2E,0x28,0xE8,0x08,0x08,0xC8,0x0C,0x0B,0xE8,0x08,0x08,0x00},//qian
{0x00,0x00,0xFF,0x09,0x49,0x89,0x7F,0x00,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00,0x00},/*"前",27*/
  
{0x00,0x00,0x00,0xFC,0x24,0x24,0x24,0x24,0x22,0x22,0x22,0x23,0x22,0x20,0x20,0x00},//hou
{0x40,0x20,0x18,0x07,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00},/*"后",28*/
  
{0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00},//shang
{0x40,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00},/*"上",29*/
  
{0x02,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x42,0x82,0x02,0x02,0x02,0x02,0x00},//xia
{0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x01,0x06,0x00,0x00,0x00},/*"下",30*/
 
{0x40,0x40,0x42,0xCC,0x00,0x00,0xFF,0x49,0x49,0xC9,0x49,0x49,0x7F,0x80,0x00,0x00},//tui
{0x00,0x40,0x20,0x1F,0x20,0x40,0x5F,0x48,0x44,0x40,0x41,0x42,0x45,0x58,0x40,0x00},/*"退",31*/

{0x40,0x40,0x42,0xCC,0x00,0x80,0x88,0x88,0xFF,0x88,0x88,0xFF,0x88,0x88,0x80,0x00},//jing
{0x00,0x40,0x20,0x1F,0x20,0x40,0x50,0x4C,0x43,0x40,0x40,0x5F,0x40,0x40,0x40,0x00},/*"进",32*/
  
{0x00,0x80,0x60,0xF8,0x07,0x04,0xE4,0xA4,0xA4,0xBF,0xA4,0xA4,0xE4,0x04,0x00,0x00},
{0x01,0x00,0x00,0xFF,0x40,0x40,0x7F,0x4A,0x4A,0x4A,0x4A,0x4A,0x7F,0x40,0x40,0x00},/*"值",33*/
  
{0x80,0x80,0x80,0x80,0xFF,0x80,0x80,0xA0,0x90,0x88,0x84,0x82,0x80,0x80,0x80,0x00},//chang
{0x00,0x00,0x00,0x00,0xFF,0x40,0x21,0x12,0x04,0x08,0x10,0x20,0x20,0x40,0x40,0x00},/*"长",34*/
  
{0x10,0x0C,0x24,0x24,0x24,0x74,0x25,0x26,0x24,0x74,0x24,0x24,0x24,0x14,0x0C,0x00},//kuan
{0x80,0x80,0x80,0x5F,0x41,0x21,0x11,0x0D,0x71,0x81,0x81,0x9F,0x80,0x80,0xE0,0x00},/*"宽",35*/
  
{0x04,0x04,0x04,0x04,0xF4,0x94,0x95,0x96,0x94,0x94,0xF4,0x04,0x04,0x04,0x04,0x00},//gao
{0x00,0xFE,0x02,0x02,0x7A,0x4A,0x4A,0x4A,0x4A,0x4A,0x7A,0x02,0x82,0xFE,0x00,0x00},/*"高",36*/
  
{0x00,0x40,0x42,0x44,0x58,0x40,0xC0,0xFF,0xC0,0x40,0x50,0x48,0x46,0x40,0x00,0x00},//mi
{0x20,0x20,0x10,0x08,0x04,0x03,0x00,0xFF,0x00,0x03,0x04,0x08,0x10,0x20,0x20,0x00},/*"米",37*/
  
{0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00},//wen
{0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00},/*"温",38*/
  
{0x10,0x60,0x02,0x8C,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00},//shi
{0x04,0x04,0x7E,0x01,0x44,0x48,0x50,0x7F,0x40,0x40,0x7F,0x50,0x48,0x44,0x40,0x00},/*"湿",39*/
  
{0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00},//du
{0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00},/*"度",40*/
  
{0x10,0x60,0x02,0x8C,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0xFF,0x00,0x00},//ce
{0x04,0x04,0x7E,0x01,0x80,0x47,0x30,0x0F,0x10,0x27,0x00,0x47,0x80,0x7F,0x00,0x00},/*"测",41*/
  
{0x20,0x20,0x20,0xBE,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xBE,0x20,0x20,0x20,0x00},//liang
{0x00,0x80,0x80,0xAF,0xAA,0xAA,0xAA,0xFF,0xAA,0xAA,0xAA,0xAF,0x80,0x80,0x00,0x00},/*"量",42*/
  
{0x00,0x80,0x60,0xF8,0x07,0x00,0x1C,0xE0,0x01,0x06,0x00,0xE0,0x1E,0x00,0x00,0x00},//yi
{0x01,0x00,0x00,0xFF,0x00,0x80,0x40,0x20,0x13,0x0C,0x13,0x20,0x40,0x80,0x80,0x00},/*"仪",43*/
  
{0x80,0x80,0x9E,0x92,0x92,0x92,0x9E,0xE0,0x80,0x9E,0xB2,0xD2,0x92,0x9E,0x80,0x00},//qi
{0x08,0x08,0xF4,0x94,0x92,0x92,0xF1,0x00,0x01,0xF2,0x92,0x94,0x94,0xF8,0x08,0x00},/*"器",44*/
  
{0x10,0x10,0x10,0xFF,0x90,0x20,0x98,0x48,0x28,0x09,0x0E,0x28,0x48,0xA8,0x18,0x00},//kong
{0x02,0x42,0x81,0x7F,0x00,0x40,0x40,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x40,0x00},/*"控",45*/
  
{0x40,0x50,0x4E,0x48,0x48,0xFF,0x48,0x48,0x48,0x40,0xF8,0x00,0x00,0xFF,0x00,0x00},//zhi
{0x00,0x00,0x3E,0x02,0x02,0xFF,0x12,0x22,0x1E,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00},/*"制",46*/
  
{0x00,0x00,0x00,0x7F,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x7F,0x00,0x00,0x00,0x00},//shi
{0x81,0x41,0x21,0x1D,0x21,0x41,0x81,0xFF,0x89,0x89,0x89,0x89,0x89,0x81,0x81,0x00},/*"是",47*/
  
{0x00,0x02,0x82,0x82,0x42,0x22,0x12,0xFA,0x06,0x22,0x22,0x42,0x42,0x82,0x00,0x00},//fou
{0x01,0x01,0x00,0xFC,0x44,0x44,0x44,0x45,0x44,0x44,0x44,0xFC,0x00,0x00,0x01,0x00},/*"否",48*/
 
{0x00,0x80,0x60,0xF8,0x07,0x00,0xFC,0x84,0x84,0x84,0xFE,0x82,0x83,0x82,0x80,0x00},//di
{0x01,0x00,0x00,0xFF,0x00,0x00,0xFF,0x40,0x20,0x00,0x41,0x8E,0x30,0x40,0xF8,0x00},/*"低",49*/

{0x80,0xFE,0x82,0x82,0xFE,0x80,0xFE,0x82,0x82,0xFE,0x80,0x00,0xF8,0x00,0xFF,0x00},
{0x40,0x3F,0x00,0x20,0xBF,0x40,0x3F,0x40,0x80,0x7F,0x00,0x00,0x4F,0x80,0x7F,0x00},/*"删",50*/
  
{0x00,0xFE,0x22,0x5A,0x86,0x20,0x10,0x28,0x24,0xE3,0x24,0x28,0x10,0x20,0x20,0x00},
{0x00,0xFF,0x04,0x08,0x27,0x11,0x0D,0x41,0x81,0x7F,0x01,0x05,0x09,0x31,0x00,0x00},/*"除",51*/
  
{0x00,0x00,0x22,0x32,0x2A,0xA6,0xA2,0x62,0x21,0x11,0x09,0x81,0x01,0x00,0x00,0x00},
{0x00,0x42,0x22,0x13,0x0B,0x42,0x82,0x7E,0x02,0x02,0x0A,0x12,0x23,0x46,0x00,0x00},/*"系",52*/
  
{0x20,0x30,0xAC,0x63,0x30,0x00,0x88,0xC8,0xA8,0x99,0x8E,0x88,0xA8,0xC8,0x88,0x00},
{0x22,0x67,0x22,0x12,0x12,0x80,0x40,0x30,0x0F,0x00,0x00,0x3F,0x40,0x40,0x71,0x00},/*"统",53*/

{0x20,0x30,0xAC,0x63,0x20,0x18,0x80,0x82,0x42,0x22,0x12,0x1A,0x26,0x42,0x80,0x00},
{0x22,0x67,0x22,0x12,0x12,0x12,0x40,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x40,0x00},/*"经",54*/
  
{0x20,0x30,0xAC,0x63,0x20,0x18,0x00,0x08,0x48,0x48,0xFF,0x48,0x48,0x48,0x08,0x00},
{0x22,0x67,0x22,0x12,0x12,0x12,0x00,0x02,0x02,0x02,0xFF,0x02,0x12,0x22,0x1E,0x00},/*"纬",55*/

{0x00,0x00,0xF8,0x49,0x4A,0x4C,0x48,0xF8,0x48,0x4C,0x4A,0x49,0xF8,0x00,0x00,0x00},
{0x10,0x10,0x13,0x12,0x12,0x12,0x12,0xFF,0x12,0x12,0x12,0x12,0x13,0x10,0x10,0x00},/*"单",56*/
  
{0x00,0x80,0x60,0xF8,0x07,0x40,0x20,0x90,0x0C,0x03,0x0C,0x90,0x20,0x40,0x40,0x00},
{0x01,0x00,0x00,0xFF,0x00,0x80,0x60,0x1F,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00},/*"价",57*/
  
{0x00,0x80,0x40,0x20,0x18,0x06,0x80,0x00,0x07,0x18,0x20,0x40,0x80,0x00,0x00,0x00},
{0x01,0x00,0x20,0x70,0x28,0x26,0x21,0x20,0x20,0x24,0x38,0x60,0x00,0x01,0x01,0x00},/*"公",58*/
  
{0x00,0x00,0xFE,0x20,0x20,0x20,0x00,0xF2,0x12,0x1A,0xD6,0x12,0x12,0xF2,0x02,0x00},
{0x00,0x00,0x1F,0x08,0x04,0x02,0x80,0x4F,0x20,0x18,0x07,0x10,0x20,0x4F,0x80,0x00},/*"顷",59*/
  
{0x20,0x20,0x22,0x22,0x22,0xE2,0x22,0x22,0x22,0xE2,0x22,0x22,0x22,0x20,0x20,0x00},
{0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x78,0x00},/*"元",60*/

{0x40,0x44,0x24,0xA4,0x94,0x8C,0x84,0xFF,0x84,0x8C,0x94,0xA4,0x24,0x44,0x40,0x00},
{0x40,0x40,0x40,0x5F,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x5F,0x40,0x40,0x40,0x00},/*"查",61*/

{0x40,0x40,0x42,0xCC,0x00,0x20,0xD0,0x4C,0x4B,0x48,0xC8,0x08,0x08,0xF8,0x00,0x00},
{0x00,0x00,0x00,0x7F,0x20,0x10,0x1F,0x12,0x12,0x12,0x5F,0x80,0x40,0x3F,0x00,0x00},/*"询",62*/

{0x40,0x40,0x42,0xCC,0x00,0x00,0x00,0x84,0x84,0x84,0x84,0x84,0xFC,0x00,0x00,0x00},
{0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0x3F,0x40,0x40,0x40,0x40,0x41,0x40,0x70,0x00},/*"记",63*/
  
{0x80,0x80,0x82,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0xFE,0x80,0x80,0x80,0x00},
{0x40,0x40,0x22,0x24,0x10,0x48,0x80,0x7F,0x04,0x08,0x18,0x24,0x22,0x40,0x40,0x00},/*"录",64*/

{0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00},
{0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00},/*"大",65*/
  
{0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x20,0x40,0x80,0x00,0x00},
{0x08,0x04,0x03,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x01,0x0E,0x00},/*"小",66*/

{0x10,0x10,0x10,0xFF,0x10,0x90,0x00,0xFE,0x91,0x80,0xFF,0x80,0x92,0xFE,0x00,0x00},
{0x04,0x44,0x82,0x7F,0x01,0x00,0x80,0x82,0x46,0x2A,0x13,0x2A,0x46,0x82,0x80,0x00},/*"搜",67*/
  
{0x80,0x60,0x24,0x24,0x24,0xA4,0x64,0x3F,0x24,0x24,0xA4,0x24,0x24,0xA0,0x60,0x00},
{0x00,0x80,0x48,0x29,0x09,0x4D,0x8D,0x7B,0x0B,0x09,0x28,0x4C,0x98,0x00,0x00,0x00},/*"索",68*/

{0x40,0x40,0x42,0xCC,0x00,0x00,0xFC,0x24,0xA4,0x24,0x22,0x22,0xA3,0x62,0x00,0x00},
{0x00,0x40,0x20,0x1F,0x20,0x58,0x47,0x50,0x48,0x45,0x42,0x45,0x48,0x50,0x40,0x00},/*"返",69*/
  
{0x00,0x00,0xFE,0x02,0x02,0xF2,0x12,0x12,0x12,0xF2,0x02,0x02,0xFE,0x00,0x00,0x00},
{0x00,0x00,0x7F,0x20,0x20,0x27,0x24,0x24,0x24,0x27,0x20,0x20,0x7F,0x00,0x00,0x00},/*"回",70*/
  
{0x00,0x00,0x7C,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0xFC,0x00,0x00,0x00},
{0x00,0x7C,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0xFC,0x00,0x00},/*"出",71*/

{0x00,0x3E,0x22,0xE2,0x22,0x3E,0x00,0xFE,0x22,0x22,0x22,0x22,0x22,0xE2,0x02,0x00},
{0x20,0x3F,0x20,0x1F,0x11,0x11,0x00,0x7F,0x44,0x44,0x44,0x44,0x44,0x47,0x40,0x00},/*"距",72*/
  
{0x04,0x04,0x04,0xF4,0x84,0xD4,0xA5,0xA6,0xA4,0xD4,0x84,0xF4,0x04,0x04,0x04,0x00},
{0x00,0xFE,0x02,0x02,0x12,0x3A,0x16,0x13,0x12,0x1A,0x32,0x42,0x82,0x7E,0x00,0x00},/*"离",73*/

{0x02,0x02,0xE2,0x22,0x22,0xF2,0x2E,0x22,0x22,0xE2,0x22,0x22,0xE2,0x02,0x02,0x00},
{0x00,0x00,0xFF,0x40,0x40,0x7F,0x49,0x49,0x49,0x7F,0x40,0x40,0xFF,0x00,0x00,0x00},/*"面",74*/
  
{0x20,0x24,0x24,0xA4,0xFE,0x23,0x22,0x20,0xFC,0x04,0x04,0x04,0x04,0xFC,0x00,0x00},
{0x10,0x08,0x06,0x01,0xFF,0x01,0x06,0x80,0x63,0x19,0x01,0x01,0x09,0x33,0xC0,0x00},/*"积",75*/

{0x10,0x0C,0x44,0x24,0x14,0x04,0x05,0x06,0x04,0x04,0x14,0x24,0x44,0x14,0x0C,0x00},
{0x00,0x40,0x40,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x40,0x40,0x00,0x00},/*"空",76*/
  
{0x00,0xF8,0x01,0x06,0x00,0xF0,0x12,0x12,0x12,0xF2,0x02,0x02,0x02,0xFE,0x00,0x00},
{0x00,0xFF,0x00,0x00,0x00,0x1F,0x11,0x11,0x11,0x1F,0x00,0x40,0x80,0x7F,0x00,0x00},/*"间",77*/

{0x48,0x4A,0xFA,0x0A,0xFE,0x09,0xF9,0x49,0xA8,0x00,0x00,0xF0,0x00,0x00,0xFF,0x00},
{0x22,0x11,0x0B,0x04,0xFF,0x04,0x09,0x12,0x23,0x00,0x00,0x0F,0x40,0x80,0x7F,0x00},/*"剩",78*/
  
{0x80,0x80,0x40,0x20,0x50,0x48,0x44,0xC3,0x44,0x48,0x50,0x20,0x40,0x80,0x80,0x00},
{0x00,0x40,0x22,0x1A,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x0A,0x12,0x60,0x00,0x00},/*"余",79*/

{0x20,0x22,0xA2,0x7E,0x22,0x22,0xFE,0x22,0x22,0x00,0x7C,0x00,0x00,0xFF,0x00,0x00},
{0x44,0x42,0x49,0x48,0x48,0x48,0x49,0x7E,0x48,0x48,0x48,0x49,0x4A,0x41,0x40,0x00},/*"型",80*/
  
{0x80,0x80,0x80,0xBE,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xBE,0x80,0x80,0x80,0x00},
{0x00,0x00,0x00,0x06,0x05,0x04,0x04,0x04,0x44,0x84,0x44,0x3C,0x00,0x00,0x00,0x00},/*"号",81*/
  
{0x00,0xFE,0x20,0x20,0x3F,0x20,0x00,0xFC,0x24,0xE4,0x24,0x22,0x23,0xE2,0x00,0x00},
{0x80,0x7F,0x01,0x01,0xFF,0x80,0x60,0x1F,0x80,0x41,0x26,0x18,0x26,0x41,0x80,0x00},/*"版",82*/
  
{0x00,0x10,0x10,0x10,0x10,0xD0,0x30,0xFF,0x30,0xD0,0x10,0x10,0x10,0x10,0x00,0x00},
{0x10,0x08,0x04,0x02,0x09,0x08,0x08,0xFF,0x08,0x08,0x09,0x02,0x04,0x08,0x10,0x00},/*"本",83*/

{0x40,0x40,0x42,0xCC,0x00,0x40,0xA0,0x9E,0x82,0x82,0x82,0x9E,0xA0,0x20,0x20,0x00},
{0x00,0x00,0x00,0x3F,0x90,0x88,0x40,0x43,0x2C,0x10,0x28,0x46,0x41,0x80,0x80,0x00},/*"设",84*/
  
{0x20,0x10,0x0C,0xF3,0x12,0x12,0x52,0x92,0x12,0x12,0x12,0xF2,0x02,0x02,0x00,0x00},
{0x01,0x01,0x1F,0x11,0x11,0x11,0x15,0x19,0x51,0x91,0x51,0x3F,0x11,0x11,0x01,0x00},/*"每",85*/
  
{0x10,0x60,0x02,0xCC,0x80,0x80,0xFC,0x40,0x20,0xFF,0x10,0x08,0xF8,0x00,0x00,0x00},
{0x04,0x04,0x7E,0x01,0x00,0x00,0x3F,0x40,0x40,0x4F,0x40,0x44,0x47,0x40,0x78,0x00},/*"池",86*/

{0x08,0x08,0xC8,0x48,0x48,0x48,0x49,0xCE,0x48,0x48,0x48,0x48,0xC8,0x08,0x08,0x00},
{0x00,0x00,0xFF,0x44,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x00},/*"亩",87*/

{0x20,0x20,0xFF,0x20,0x20,0x00,0xF8,0x88,0x88,0x88,0xFF,0x88,0x88,0xA8,0x18,0x00},
{0x10,0x30,0x1F,0x08,0x88,0x60,0x1F,0x80,0x43,0x2C,0x10,0x28,0x46,0x81,0x80,0x00},/*"坡",88*/

{0x20,0x30,0xAC,0x63,0x30,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00},
{0x22,0x67,0x22,0x12,0x12,0x40,0x40,0x7F,0x42,0x42,0x42,0x42,0x7F,0x40,0x40,0x00},/*"组",89*/

{0x20,0x10,0xE8,0x24,0x27,0x24,0x24,0xE4,0x24,0x34,0x2C,0x20,0xE0,0x00,0x00,0x00},
{0x80,0x60,0x1F,0x09,0x09,0x09,0x09,0x7F,0x09,0x09,0x49,0x89,0x7F,0x00,0x00,0x00},/*"角",90*/

{0x00,0x00,0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"°",91*/

{0x10,0x0C,0x24,0x24,0xA4,0x64,0x25,0x26,0x24,0x24,0xA4,0x24,0x24,0x14,0x0C,0x00},
{0x40,0x40,0x48,0x49,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x4B,0x48,0x40,0x40,0x00},/*"室",92*/

{0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00},
{0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00},/*"温",93*/

{0x00,0xF8,0x01,0x22,0x20,0x22,0x2A,0xF2,0x22,0x22,0x22,0x22,0x02,0xFE,0x00,0x00},
{0x00,0xFF,0x00,0x00,0x1F,0x01,0x01,0x7F,0x09,0x11,0x0F,0x40,0x80,0x7F,0x00,0x00},/*"闹",94*/

{0x20,0x10,0x2C,0xE7,0x24,0x24,0x00,0xF0,0x10,0x10,0xFF,0x10,0x10,0xF0,0x00,0x00},
{0x01,0x01,0x01,0x7F,0x21,0x11,0x00,0x07,0x02,0x02,0xFF,0x02,0x02,0x07,0x00,0x00},/*"钟",95*/

{0x10,0x10,0x10,0xFF,0x10,0x10,0xF0,0x00,0x00,0xF8,0x08,0x08,0x08,0xF8,0x00,0x00},
{0x80,0x40,0x30,0x0F,0x40,0x80,0x7F,0x00,0x00,0x7F,0x20,0x20,0x20,0x7F,0x00,0x00},/*"加",96*/

{0x00,0x02,0x0C,0xC0,0x00,0xF8,0x08,0x48,0x48,0x48,0x08,0xFF,0x08,0x09,0x8A,0x00},
{0x02,0x02,0x7F,0x80,0x40,0x3F,0x00,0x1E,0x92,0x5E,0x20,0x17,0x38,0x46,0xF1,0x00},/*"减",97*/

{0x00,0x00,0xFE,0x82,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x82,0xFE,0x00,0x00,0x00},
{0x80,0x60,0x1F,0x00,0x00,0x1E,0x12,0x12,0x12,0x1E,0x40,0x80,0x7F,0x00,0x00,0x00},/*"周",98*/

{0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"一",99*/

{0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00},
{0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00},/*"二",100*/

{0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00},
{0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00},/*"三",101*/

{0x00,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00},
{0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00},/*"四",102*/

{0x00,0x02,0x42,0x42,0x42,0xC2,0x7E,0x42,0x42,0x42,0x42,0xC2,0x02,0x02,0x00,0x00},
{0x40,0x40,0x40,0x40,0x78,0x47,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x00},/*"五",103*/

{0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x2C,0x20,0x20,0x20,0x20,0x20,0x20,0x00},
{0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x01,0x02,0x04,0x18,0x60,0x00,0x00},/*"六",104*/

{0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00},/*"日",105*/

{0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00},
{0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x1F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00},/*"◆",106*/ 

{0x00,0x00,0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"°",107*/

{0x00,0x10,0xE0,0x10,0x10,0xE0,0x10,0x10,0xE0,0x00,0x44,0x62,0x52,0x4C,0x00,0x00},
{0x00,0x00,0x0F,0x00,0x00,0x0F,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"㎡",108*/

{0x00,0x17,0x15,0xD5,0x55,0x57,0x55,0x7D,0x55,0x57,0x55,0xD5,0x15,0x17,0x00,0x00},
{0x40,0x40,0x40,0x7F,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0x40,0x40,0x40,0x00},/*"置",109*/

{0x08,0x08,0xF9,0x4A,0x48,0xC8,0x48,0x20,0xD8,0x17,0x10,0x10,0xF0,0x10,0x10,0x00},
{0x40,0x30,0x0F,0x20,0x40,0x3F,0x80,0x40,0x21,0x16,0x08,0x16,0x21,0x40,0x80,0x00},/*"放",110*/

{0x82,0xBA,0xAA,0xAA,0xBA,0x82,0xBE,0x82,0x20,0x18,0x0F,0xC8,0x08,0x28,0x18,0x00},
{0x00,0x1E,0x12,0x12,0x5E,0x80,0x7F,0x00,0x80,0x60,0x1C,0x03,0x1C,0x60,0x80,0x00},/*"歌",111*/

{0x80,0x80,0xC0,0xC0,0xE0,0xA0,0x90,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00},
{0x00,0x00,0x01,0x01,0x03,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"←",112*/

{0x02,0x02,0xF2,0x92,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x92,0xF2,0x02,0x02,0x00},
{0x80,0x80,0x87,0x4C,0x54,0x24,0x34,0x4F,0x44,0x44,0x84,0x84,0x87,0x80,0x80,0x00},/*"更",113*/

{0x00,0x00,0x10,0x10,0x98,0xA4,0x47,0x44,0xA4,0x54,0x0C,0x04,0x00,0x00,0x00,0x00},
{0x00,0x81,0x89,0x89,0x44,0x44,0x4A,0x31,0x21,0x11,0x09,0x05,0x03,0x00,0x00,0x00},/*"多",114*/

{0x08,0x08,0x08,0xF8,0x08,0x08,0x08,0x10,0x10,0xFF,0x10,0x10,0x10,0xF0,0x00,0x00},
{0x10,0x30,0x10,0x1F,0x08,0x88,0x48,0x30,0x0E,0x01,0x40,0x80,0x40,0x3F,0x00,0x00},/*"功",115*/

{0x08,0xCC,0x4A,0x49,0x48,0x4A,0xCC,0x18,0x00,0x7F,0x88,0x88,0x84,0x82,0xE0,0x00},
{0x00,0xFF,0x12,0x12,0x52,0x92,0x7F,0x00,0x00,0x7E,0x88,0x88,0x84,0x82,0xE0,0x00},/*"能",116*/

{0x00,0x10,0x88,0xC4,0x33,0x40,0x48,0x48,0x48,0x7F,0x48,0xC8,0x48,0x48,0x40,0x00},
{0x02,0x01,0x00,0xFF,0x00,0x02,0x0A,0x32,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x00},/*"待",117*/

{0x80,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x80,0x00},
{0x00,0x80,0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00},/*"开",118*/

{0x00,0x00,0x18,0x16,0x10,0xD0,0xB8,0x97,0x90,0x90,0x90,0x92,0x94,0x10,0x00,0x00},
{0x00,0x20,0x10,0x8C,0x83,0x80,0x41,0x46,0x28,0x10,0x28,0x44,0x43,0x80,0x80,0x00},/*"发",119*/

{0x20,0x18,0x08,0xEA,0xAC,0xA8,0xA8,0xAF,0xA8,0xA8,0xAC,0xEA,0x08,0x28,0x18,0x00},
{0x00,0x00,0x3E,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x12,0x22,0x1E,0x00,0x00,0x00},/*"常",120*/

{0x80,0x88,0x88,0xFF,0x88,0x88,0x80,0xFE,0x02,0x02,0xF2,0x02,0x02,0xFE,0x00,0x00},
{0x40,0x20,0x18,0x07,0x08,0xB0,0x40,0x23,0x18,0x06,0x01,0x7E,0x80,0x83,0xE0,0x00},/*"规",121*/
};	

#endif

串口(蓝牙)部分

代码部分
Myusart1.c
#include "stm32f10x.h"                  // Device header
#include "stdio.h"	
#include "Myusart1.h"

/**
  * @brief  串口
  * @param  无
  * @retval 无
  */
void USART1_Init(long Baudrate)
{
	RCC_APB2PeriphClockCmd(RCC_PORT, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Pin = TX_Pin;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; 
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;	 //TX复用输出
	GPIO_Init(GPIO_PORT, &GPIO_InitStruct);
	GPIO_InitStruct.GPIO_Pin = RX_Pin;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;		//RX浮空输入
	GPIO_Init(GPIO_PORT, &GPIO_InitStruct); 

	USART_InitTypeDef USART_InitStruct;
	USART_InitStruct.USART_BaudRate = Baudrate;  //波特率
	USART_InitStruct.USART_WordLength = USART_WordLength_8b; //8位数据位
	USART_InitStruct.USART_StopBits = USART_StopBits_1;  //1位停止位
	USART_InitStruct.USART_Parity = USART_Parity_No;  //无校验位
	USART_InitStruct.USART_Mode =  USART_Mode_Use;//收发模式
	USART_InitStruct.USART_HardwareFlowControl= USART_HardwareFlowControl_None;//硬件流控制,一般选择none
	USART_Init(USART1, &USART_InitStruct);

	// 允许串口中断
	NVIC_InitTypeDef NVIC_InitStruct;
	NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;//中断通道为串口1
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;//先站优先级
	NVIC_InitStruct.NVIC_IRQChannelSubPriority =1;//从占优先级
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;//使能
	NVIC_Init(&NVIC_InitStruct);
		
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);	// 允许串口接受中断
	USART_Cmd(USART1, ENABLE);// 使能串口
}

//发送字节
void USART1_SendData(uint16_t data)
{
	USART_SendData(USART1,data);//发送一个字节数据到USART
	while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);	//等待发送结束
}
//串口1  发送字符串
#include "Delay.h"
void USART1_SendString(char* str)
{
  while(*str != '\0')//判断字符是否可以输出  // 字符串自带一个结束标志位'\0'
  {
		USART1_SendData(*str);
		str++;
		Delay_ms(10);
  }
}
void USART1_SendNum(u32* num,u8 length)
{
	for(u8 i=0;i<length;i++)
	{
		USART1_SendData(num[i]);
		Delay_ms(10);
	}
	Delay_ms(1000);
}
//重定向  库函数printf到串口,重定向后可使用printf函数  
//fputc  不能改名字
int fputc(int byte_, FILE *f)
{
    USART_SendData(USART1, (uint8_t) byte_);//发送一个字节数据到串口
    while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);		//等待发送完毕
    return (byte_);
}



Myusart1.h
#ifndef __MyUSART1_H
#define __MyUSART1_H

/*-------------------------------------------------------------------------------*/
/*引脚定义*/
//该串口只用于发送数据到另外一个地方,数据来源为 ADC或者单片机采集到的频率数据等等

#define  TX_Pin  			GPIO_Pin_9				//A9  TX
#define  RX_Pin 	 		GPIO_Pin_10				//A10 RX
#define  GPIO_PORT			GPIOA
#define	 RCC_PORT 			RCC_APB2Periph_GPIOA
#define  USART_Mode_Use		USART_Mode_Tx 			//发送模式
/*-------------------------------------------------------------------------------*/

//Baudrate  波特率 比如9600
void USART1_Init(long Baudrate);
void USART1_SendData(uint16_t data);
void USART1_SendString(char* str);
void USART1_SendNum(u32* num,u8 length);

#endif

运行功能部分

代码部分
Function.c
#include "stm32f10x.h"                  // Device header
#include "OLED.h"
#include "DHT11.h"
#include "DS1302.h"
#include "Key.h"
#include "Delay.h"
#include "ADC.h"
#include "BEEP.h"	
#include "music.h"
#include "Myusart1.h"
extern int Base_year,Base_month,Base_day,Base_hour,Base_minute,Base_second,Base_week;
extern int Clock_hour,Clock_minute,Clock_second;
/**
  * @brief  显示温湿度
  * @param  无
  * @retval 无
  */
void Show_TemperatureHumidity(void)
{
	int Row_Tem=4;int Col_Tem=1;
	int Row_Hum=4;int Col_Hum=1;
	DHT11_Delay_ms(1000);
	DHT11_REC_Data(); //接收温度和湿度的数据
	//温度显示
	OLED_ShowUnsignedNum(Row_Tem,Col_Tem,rec_data[2],2); //整数
	OLED_ShowString(Row_Tem,Col_Tem+2,".");
	OLED_ShowUnsignedNum(Row_Tem,Col_Tem+3,rec_data[3],1);//小数
	OLED_ShowChinese(Row_Tem,Col_Tem+2,107);//℃
	OLED_ShowString(Row_Tem,Col_Tem+5,"C");
	//湿度显示
	OLED_ShowUnsignedNum(Row_Hum,Col_Hum+11,rec_data[0],2);
	OLED_ShowString(Row_Hum,Col_Hum+13,"%RH");
}
/**
  * @brief  显示时间
  * @param  无
  * @retval 无
  */
void Show_Time(void) 
{
	DS1302_RealTime();
	int Row_y_m_d=1;int Col_y_m_d=1;
	OLED_ShowUnsignedNum(Row_y_m_d,Col_y_m_d,TimeData.Base_year,4);OLED_ShowString(Row_y_m_d,Col_y_m_d+4,"-");
	OLED_ShowUnsignedNum(Row_y_m_d,Col_y_m_d+5,TimeData.Base_month,2);OLED_ShowString(Row_y_m_d,Col_y_m_d+7,"-");
	OLED_ShowUnsignedNum(Row_y_m_d,Col_y_m_d+8,TimeData.Base_day,2);
	OLED_ShowChinese(Row_y_m_d,Col_y_m_d+6,98);//周
	switch(TimeData.Base_week)
	{
		case 01:OLED_ShowChinese(Row_y_m_d,Col_y_m_d+7,99);break;//周一
		case 02:OLED_ShowChinese(Row_y_m_d,Col_y_m_d+7,100);break;//周二
		case 03:OLED_ShowChinese(Row_y_m_d,Col_y_m_d+7,101);break;//周三
		case 04:OLED_ShowChinese(Row_y_m_d,Col_y_m_d+7,102);break;//周四
		case 05:OLED_ShowChinese(Row_y_m_d,Col_y_m_d+7,103);break;//周五
		case 06:OLED_ShowChinese(Row_y_m_d,Col_y_m_d+7,104);break;//周六
		case 07:OLED_ShowChinese(Row_y_m_d,Col_y_m_d+7,105);break;//周日
	}
	int Row_h_m_s=2;int Col_h_m_s=4;
	OLED_ShowUnsignedNum(Row_h_m_s,Col_h_m_s,TimeData.Base_hour,2);OLED_ShowString(Row_h_m_s,Col_h_m_s+2,":");//时
	OLED_ShowUnsignedNum(Row_h_m_s,Col_h_m_s+3,TimeData.Base_minute,2);OLED_ShowString(Row_h_m_s,Col_h_m_s+5,":");//分
	OLED_ShowUnsignedNum(Row_h_m_s,Col_h_m_s+6,TimeData.Base_second,2);//秒
}

int coordinate=1;
int mode_flag=0;
int set_flag=0;
int clock_flag=7;
void Multi_level_menu(void)
{
	int keynum;
	keynum=KEY_Scan();
	
	if(keynum==6)//下移
	{
		coordinate++;
		if(coordinate>4) coordinate=1;
		OLED_Clear();
	}
	else if(keynum==5)//上移
	{
		coordinate--;
		if(coordinate<1) coordinate=4;
		OLED_Clear();
	}
	else if(keynum==7)//进入配置模式
	{
		mode_flag=1-mode_flag;
		OLED_Clear();
	}
	OLED_ShowChinese(1,1,9);//时钟
	OLED_ShowChinese(1,2,95);
	OLED_ShowChinese(2,1,94);//闹钟
	OLED_ShowChinese(2,2,95);
	OLED_ShowChinese(3,1,110);//放歌	
	OLED_ShowChinese(3,2,111);	
	OLED_ShowChinese(4,1,120);//常规
	OLED_ShowChinese(4,2,121);
	OLED_ShowChinese(coordinate,3,112);
	if(mode_flag==1){OLED_Clear();}
	
	while(mode_flag==1&&coordinate==1)//时钟设置
	{
		OLED_ShowChinese(4,1,84);//设置
		OLED_ShowChinese(4,2,109);
		keynum=KEY_Scan();
		if(keynum==7)	{mode_flag=1-mode_flag; OLED_Clear();}
		else if(keynum==4)
		{
			set_flag++;
			if(set_flag==8) set_flag=1;
			int key_row=4;int key_col=4;
			switch(set_flag)
			{   //年月日时分秒 周
				//OLED_Clear();
				case 1:OLED_ShowChinese(key_row,key_col,6);break;
				case 2:OLED_ShowChinese(key_row,key_col,7);break;
				case 3:OLED_ShowChinese(key_row,key_col,8);break;
				case 4:OLED_ShowChinese(key_row,key_col,9);break;
				case 5:OLED_ShowChinese(key_row,key_col,10);break;
				case 6:OLED_ShowChinese(key_row,key_col,11);break;
				case 7:OLED_ShowChinese(key_row,key_col,22);break;
			}
		}
		else if(keynum==6){Set_decrease(set_flag);}//减
		else if(keynum==5){Set_add(set_flag);}//加
		else if(keynum==0){Show_Time();}
	}
	//闹钟设置
	while(coordinate==2&&mode_flag==1)
	{
		keynum=KEY_Scan();
		if(keynum==7)	{mode_flag=1-mode_flag;coordinate=1;OLED_Clear();}
		else if(keynum==4)
		{
			clock_flag++;
			if(clock_flag==11) clock_flag=8;
			int key_row=4;int key_col=4;
			switch(clock_flag)
			{   
				case 8:OLED_ShowChinese(key_row,key_col,9);break;
				case 9:OLED_ShowChinese(key_row,key_col,10);break;
				case 10:OLED_ShowChinese(key_row,key_col,11);break;
			}
		}
		else if(keynum==6){Set_decrease(clock_flag);}//减
		else if(keynum==5){Set_add(clock_flag);}//加
		else if(keynum==0)
		{
			OLED_ShowChinese(4,1,84);//设置
			OLED_ShowChinese(4,2,109);
			OLED_ShowChinese(2,1,94);
			OLED_ShowChinese(2,2,95);
			OLED_ShowChinese(1,1,122);
			OLED_ShowChinese(1,2,9);
			DS1302_RealTime();
			int Row_h_m_s=1;int Col_h_m_s=6;
			OLED_ShowUnsignedNum(Row_h_m_s,Col_h_m_s,TimeData.Base_hour,2);
			OLED_ShowString(Row_h_m_s,Col_h_m_s+2,":");//时
			OLED_ShowUnsignedNum(Row_h_m_s,Col_h_m_s+3,TimeData.Base_minute,2);
			OLED_ShowString(Row_h_m_s,Col_h_m_s+5,":");//分
			OLED_ShowUnsignedNum(Row_h_m_s,Col_h_m_s+6,TimeData.Base_second,2);//秒
			int Row_clock_h_m_s=2;int Col_clock_h_m_s=6;
			OLED_ShowUnsignedNum(Row_clock_h_m_s,Col_clock_h_m_s,TimeData.Clock_hour,2);
			OLED_ShowString(Row_clock_h_m_s,Col_clock_h_m_s+2,":");//时
			OLED_ShowUnsignedNum(Row_clock_h_m_s,Col_clock_h_m_s+3,TimeData.Clock_minute,2);
			OLED_ShowString(Row_clock_h_m_s,Col_clock_h_m_s+5,":");//分
			OLED_ShowUnsignedNum(Row_clock_h_m_s,Col_clock_h_m_s+6,TimeData.Clock_second,2);//秒
		}		
	}
	while(coordinate==3&&mode_flag==1)//放歌有问题
	{
		TIM2_PWM_Init(100-1,1440-1);
		Music_play();
		keynum=KEY_Scan();
		if(keynum==7)	{mode_flag=1-mode_flag; coordinate=1;OLED_Clear();TIM2_PWM_Init(0,0);}
	}
	while(coordinate==4&&mode_flag==1)
	{
		Show_TemperatureHumidity();
		Show_Time();
		keynum=KEY_Scan();
		if(keynum==7)
		{
			coordinate=1;
			mode_flag=0;
			OLED_Clear();
		}
		while((TimeData.Clock_hour==TimeData.Base_hour)&&
			(TimeData.Clock_minute==TimeData.Base_minute)&&(TimeData.Clock_second==TimeData.Base_second))
		{
			TIM2_PWM_Init(100-1,1440-1);///Music_play();//放歌会卡在放歌循环里  
			Delay_ms(1000);
			TIM2_PWM_Init(0,0);
			Delay_ms(1000);
			keynum=KEY_Scan();
			if(keynum==7) break;
		}
	}
	
}
Function.h
#ifndef __Function_H
#define __Function_H

void Show_TemperatureHumidity(void);
void Show_Time(void) ;
void Show_Key(void);
void Multi_level_menu(void);
#endif

主函数

main.c
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "OLED.h"
#include "ADC.h"
#include "DHT11.h"
#include "DS1302.h"
#include "Key.h"
#include "Function.h"
#include "Myusart1.h"

int main(void)
{
    OLED_Init();
    KEY_Init();
    DS1302_Init();
    DHT11_Start();
	USART1_Init(9600);
    MyADC_Init();
    while (1)
	{
        Multi_level_menu();
    }
}

(更新中,请稍等)

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
方案 该方案基于STM32F103C8T6单片机,使用DHT11传感器测量温湿度。主控芯片采用STM32F103C8T6,该芯片具有高性能、低功耗、丰富的接口资源和强大的扩展能力。传感器采用DHT11数字温湿度传感器,具有高精度、稳定性好、输出信号简单等特点。主控芯片通过GPIO口读取传感器输出的数字信号,计算出温湿度值,并将其显示在OLED屏幕上。 硬件设计 硬件设计如下图所示: ![硬件设计图](https://img-blog.csdn.net/20180522145109382?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2VsaW1pbmF0aW9u/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/) 主要硬件模块包括: - STM32F103C8T6单片机:作为主控芯片,通过GPIO口读取DHT11传感器输出的数字信号,并计算出温湿度值。 - DHT11数字温湿度传感器:通过GPIO口向外输出数字信号,包括温度、湿度等数据。 - OLED显示屏:用于显示温湿度值。 软件设计 软件设计主要包括以下几个方面: - 环境搭建:使用Keil C51 IDE进行开发,使用ST-Link/V2进行下载和调试。 - 串口通信:通过USART1串口与PC机通信,将温湿度值发送给上位机。 - DHT11驱动:通过GPIO口读取DHT11传感器输出的数字信号,并计算出温湿度值。 - OLED驱动:使用I2C总线与OLED屏幕进行通信,将温湿度值显示在屏幕上。 - 系统初始化:进行系统时钟初始化、GPIO口初始化、USART1串口初始化、I2C总线初始化等。 代码实现 代码实现主要包括以下几个部分: - 环境搭建:使用Keil C51 IDE进行开发,使用ST-Link/V2进行下载和调试。 - 串口通信:通过USART1串口与PC机通信,将温湿度值发送给上位机。 - DHT11驱动:通过GPIO口读取DHT11传感器输出的数字信号,并计算出温湿度值。 - OLED驱动:使用I2C总线与OLED屏幕进行通信,将温湿度值显示在屏幕上。 - 系统初始化:进行系统时钟初始化、GPIO口初始化、USART1串口初始化、I2C总线初始化等。 完整代码如下: ```c #include "stm32f10x.h" #include "dht11.h" #include "oled.h" #include "delay.h" int main(void) { float temperature, humidity; char str[20]; SystemInit(); DHT11_Init(); OLED_Init(); USART1_Init(); Delay_Init(); while(1) { DHT11_Read_Data(&temperature, &humidity); sprintf(str, "T:%.1fC H:%.1f%%", temperature, humidity); OLED_ShowString(0, 0, (unsigned char*)str); printf("T:%.1fC H:%.1f%%\r\n", temperature, humidity); Delay_Ms(1000); } } ``` 总结 本方案基于STM32F103C8T6单片机,使用DHT11传感器测量温湿度,并将其显示在OLED屏幕上。主要涉及到硬件设计、软件设计、环境搭建、串口通信、DHT11驱动、OLED驱动、系统初始化等方面。通过本方案的实现,可以更好地理解STM32F103C8T6单片机的工作原理,以及各个模块之间的协作关系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值