STM32-Environment-Monitor

📅 2026/7/12 2:05:59
STM32-Environment-Monitor
基于 STM32F103C8T6 的综合环境监测站作者柳zh基于 STM32F103C8T6 的综合环境监测项目集成 OLED 显示屏、按键、LED、蜂鸣器及光敏传感器实现环境光照的实时监测与智能自动控制。功能特性OLED 实时显示— 光照状态DARK/BRIGHT、LED 模式、蜂鸣器模式K1 切换 LED 模式— AUTO自动- ON常亮- OFF常灭K2 切换蜂鸣器模式— AUTO自动- OFF关闭自动控制逻辑— 遮光时自动亮灯 蜂鸣器报警有光时自动关闭硬件接线模块STM32 引脚说明LED0PA0低电平亮LED2PA2低电平亮K1PB0上拉输入按下接地K2PB11上拉输入按下接地蜂鸣器PB12低电平响高电平静音光敏传感器PB13上拉输入1遮光0有光OLED SCLPB8I2C 时钟线OLED SDAPB9I2C 数据线VCC3.3V所有模块统一供电GNDGND所有模块共地注意所有模块 VCC 接3.3V切勿接 5V。模块驱动一览模块引脚驱动类型LEDPA0, PA2GPIO 推挽输出蜂鸣器PB12GPIO 推挽输出按键PB0, PB11GPIO 上拉输入光敏传感器PB13GPIO 上拉输入OLEDPB8, PB9模拟 I2C 协议运行效果上电后 OLED 显示Monitor StationLight: BRIGHT (有光时 BRIGHT遮光时 DARK)LED: AUTO (K1 切换 AUTO - ON - OFF)Buz: AUTO (K2 切换 AUTO - OFF)K1:LED K2:Buz (按键操作提示)有光环境- LED 灭蜂鸣器静音遮光环境AUTO 模式- LED 亮蜂鸣器响手动模式K1 切到 ON/OFF- LED 常亮或常灭自动控制不生效完整源代码main.cc#include “stm32f10x.h” // Device header#include “Delay.h”#include “OLED.h”#include “Key.h”#include “LED.h”#include “Buzzer.h”#include “LightSensor.h”//定义常量编号#define LED_MODE_AUTO 0#define LED_MODE_ON 1#define LED_MODE_OFF 2#define BUZZER_MODE_AUTO 0#define BUZZER_MODE_OFF 1//定义全局变量uint8_t LED_Mode LED_MODE_AUTO ;uint8_t Buzzer_Mode BUZZER_MODE_AUTO;//桌面界面初始void Show_HomePage(void){OLED_Clear ();OLED_ShowString(1,1,“Monitor station”);if(LightSensor_Get () 1) OLED_ShowString(3,1,Light : DARK); else OLED_ShowString(3,1,Light:BRIGHT); OLED_ShowString(4,1,LED:); if(LED_Mode LED_MODE_AUTO ) OLED_ShowString (4,6,AUTO); else if(LED_Mode LED_MODE_ON ) OLED_ShowString (4,6,ON); else OLED_ShowString (4,6,OFF); OLED_ShowString (5,1,Buz:); if(Buzzer_Mode BUZZER_MODE_AUTO ) OLED_ShowString (5,6,AUTO); else OLED_ShowString (5,6,OFF); OLED_ShowString (7,1,K1:LED K2:Buz);}void ProcessAutcontrol(void){if(LED_Mode LED_MODE_AUTO ){if(LightSensor_Get () 1){LED0_ON ();}else{LED0_OFF ();}}if(Buzzer_Mode BUZZER_MODE_AUTO ){if(LightSensor_Get () 1){Buzzer_ON();}else{Buzzer_OFF ();}}}int main(void){OLED_Init(); Key_Init(); LED_Init(); Buzzer_Init (); LightSensor_Init (); LED0_OFF (); Buzzer_OFF (); Show_HomePage (); while(1) { uint8_t KeyNum Key_GetNum (); if(KeyNum 1) { LED_Mode; if(LED_Mode LED_MODE_OFF ) LED_Mode LED_MODE_AUTO ; if(LED_Mode LED_MODE_ON ) LED0_ON(); else if (LED_Mode LED_MODE_OFF ) LED0_OFF (); Show_HomePage (); } if(KeyNum 2) { Buzzer_Mode !Buzzer_Mode ; if(Buzzer_Mode BUZZER_MODE_OFF ) Buzzer_OFF (); Show_HomePage (); } ProcessAutcontrol (); Delay_ms(50); }}OLED.cc#include “stm32f10x.h”#include “OLED_Font.h”/引脚配置/#define OLED_W_SCL(x) GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)(x))#define OLED_W_SDA(x) GPIO_WriteBit(GPIOB, GPIO_Pin_9, (BitAction)(x))/引脚初始化/void OLED_I2C_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_OD; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin GPIO_Pin_8; GPIO_Init(GPIOB, GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin GPIO_Pin_9; GPIO_Init(GPIOB, GPIO_InitStructure); OLED_W_SCL(1); OLED_W_SDA(1);}/**brief I2C开始param 无retval 无*/void OLED_I2C_Start(void){OLED_W_SDA(1);OLED_W_SCL(1);OLED_W_SDA(0);OLED_W_SCL(0);}/**brief I2C停止param 无retval 无*/void OLED_I2C_Stop(void){OLED_W_SDA(0);OLED_W_SCL(1);OLED_W_SDA(1);}/**brief I2C发送一个字节param Byte 要发送的一个字节retval 无*/void OLED_I2C_SendByte(uint8_t Byte){uint8_t i;for (i 0; i 8; i){OLED_W_SDA(!!(Byte (0x80 i)));OLED_W_SCL(1);OLED_W_SCL(0);}OLED_W_SCL(1); //额外的一个时钟不处理应答信号OLED_W_SCL(0);}/**brief OLED写命令param Command 要写入的命令retval 无*/void OLED_WriteCommand(uint8_t Command){OLED_I2C_Start();OLED_I2C_SendByte(0x78); //从机地址OLED_I2C_SendByte(0x00); //写命令OLED_I2C_SendByte(Command);OLED_I2C_Stop();}/**brief OLED写数据param Data 要写入的数据retval 无*/void OLED_WriteData(uint8_t Data){OLED_I2C_Start();OLED_I2C_SendByte(0x78); //从机地址OLED_I2C_SendByte(0x40); //写数据OLED_I2C_SendByte(Data);OLED_I2C_Stop();}/**brief OLED设置光标位置param Y 以左上角为原点向下方向的坐标范围0~7param X 以左上角为原点向右方向的坐标范围0~127retval 无*/void OLED_SetCursor(uint8_t Y, uint8_t X){OLED_WriteCommand(0xB0 | Y); //设置Y位置OLED_WriteCommand(0x10 | ((X 0xF0) 4)); //设置X位置高4位OLED_WriteCommand(0x00 | (X 0x0F)); //设置X位置低4位}/**brief OLED清屏param 无retval 无*/void OLED_Clear(void){uint8_t i, j;for (j 0; j 8; j){OLED_SetCursor(j, 0);for(i 0; i 128; i){OLED_WriteData(0x00);}}}/**brief OLED显示一个字符param Line 行位置范围1~4param Column 列位置范围1~16param Char 要显示的一个字符范围ASCII可见字符retval 无*/void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char){uint8_t i;OLED_SetCursor((Line - 1) * 2, (Column - 1) * 8); //设置光标位置在上半部分for (i 0; i 8; i){OLED_WriteData(OLED_F8x16[Char - ’ ][i]); //显示上半部分内容}OLED_SetCursor((Line - 1) * 2 1, (Column - 1) * 8); //设置光标位置在下半部分for (i 0; i 8; i){OLED_WriteData(OLED_F8x16[Char - ’ ][i 8]); //显示下半部分内容}}/**brief OLED显示字符串param Line 起始行位置范围1~4param Column 起始列位置范围1~16param String 要显示的字符串范围ASCII可见字符retval 无*/void OLED_ShowString(uint8_t Line, uint8_t Column, char *String){uint8_t i;for (i 0; String[i] ! ‘\0’; i){OLED_ShowChar(Line, Column i, String[i]);}}/**brief OLED次方函数retval 返回值等于X的Y次方*/uint32_t OLED_Pow(uint32_t X, uint32_t Y){uint32_t Result 1;while (Y–){Result * X;}return Result;}/**brief OLED显示数字十进制正数param Line 起始行位置范围1~4param Column 起始列位置范围1~16param Number 要显示的数字范围0~4294967295param Length 要显示数字的长度范围1~10retval 无*/void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length){uint8_t i;for (i 0; i Length; i){OLED_ShowChar(Line, Column i, Number / OLED_Pow(10, Length - i - 1) % 10 ‘0’);}}/**brief OLED显示数字十进制带符号数param Line 起始行位置范围1~4param Column 起始列位置范围1~16param Number 要显示的数字范围-2147483648~2147483647param Length 要显示数字的长度范围1~10retval 无*/void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length){uint8_t i;uint32_t Number1;if (Number 0){OLED_ShowChar(Line, Column, ‘’);Number1 Number;}else{OLED_ShowChar(Line, Column, ‘-’);Number1 -Number;}for (i 0; i Length; i){OLED_ShowChar(Line, Column i 1, Number1 / OLED_Pow(10, Length - i - 1) % 10 ‘0’);}}/**brief OLED显示数字十六进制正数param Line 起始行位置范围1~4param Column 起始列位置范围1~16param Number 要显示的数字范围0~0xFFFFFFFFparam Length 要显示数字的长度范围1~8retval 无*/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 / OLED_Pow(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~4param Column 起始列位置范围1~16param Number 要显示的数字范围0~1111 1111 1111 1111param Length 要显示数字的长度范围1~16retval 无*/void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length){uint8_t i;for (i 0; i Length; i){OLED_ShowChar(Line, Column i, Number / OLED_Pow(2, Length - i - 1) % 2 ‘0’);}}/**brief OLED初始化param 无retval 无*/void OLED_Init(void){uint32_t i, j;for (i 0; i 1000; i) //上电延时{for (j 0; j 1000; j);}OLED_I2C_Init(); //端口初始化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清屏}OLED.hc#ifndef __OLED_H#define __OLED_Hvoid OLED_Init(void);void OLED_Clear(void);void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char);void OLED_ShowString(uint8_t Line, uint8_t Column, char *String);void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length);void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length);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);#endifOLED_Font.hc#ifndef __OLED_FONT_H#define __OLED_FONT_H/OLED字模库宽8像素高16像素/const uint8_t OLED_F8x16[][16]{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 00x00,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};#endifBuzzer.cc#include “stm32f10x.h” // Device headervoid Buzzer_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin GPIO_Pin_12; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz ; GPIO_Init(GPIOB,GPIO_InitStructure); GPIO_SetBits (GPIOB,GPIO_Pin_12);}void Buzzer_ON(void){GPIO_ResetBits(GPIOB,GPIO_Pin_12);}void Buzzer_OFF(void){GPIO_SetBits (GPIOB,GPIO_Pin_12);}void Buzzer_Turn(void){if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_12) 0){GPIO_SetBits (GPIOB,GPIO_Pin_12);}else{GPIO_ResetBits (GPIOB,GPIO_Pin_12);}}Buzzer.hc#ifndef __BUZZER_H#define __BUZZER_Hvoid Buzzer_Init(void);void Buzzer_ON(void);void Buzzer_OFF(void);void Buzzer_Turn(void);#endifKey.cc#include “stm32f10x.h” // Device header#include “Delay.h”void Key_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Pin GPIO_Pin_1| GPIO_Pin_11; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOB,GPIO_InitStructure);}uint8_t Key_GetNum(void){uint8_t KeyNum 0;if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) 0){Delay_ms(20);while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) 0);Delay_ms(20);KeyNum 1;}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11) 0){Delay_ms(20);while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11) 0);Delay_ms(20);KeyNum 2;}return KeyNum;}Key.hc #ifndef __KEY_H #define __KEY_H void Key_Init(void); uint8_t Key_GetNum(void); #endifLED.cc#include “stm32f10x.h” // Device headervoid LED_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin GPIO_Pin_0 | GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz ; GPIO_Init(GPIOA,GPIO_InitStructure); GPIO_SetBits (GPIOA,GPIO_Pin_0 | GPIO_Pin_2);}void LED0_ON(void){GPIO_ResetBits(GPIOA,GPIO_Pin_0);}void LED0_OFF(void){GPIO_SetBits (GPIOA,GPIO_Pin_0);}void LED0_Turn(void){if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_0) 0){GPIO_SetBits (GPIOA,GPIO_Pin_0);}else{GPIO_ResetBits (GPIOA,GPIO_Pin_0);}}void LED2_ON(void){GPIO_ResetBits(GPIOA,GPIO_Pin_2);}void LED2_OFF(void){GPIO_SetBits (GPIOA,GPIO_Pin_2);}void LED2_Turn(void){if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_2) 0){GPIO_SetBits (GPIOA,GPIO_Pin_2);}else{GPIO_ResetBits (GPIOA,GPIO_Pin_2);}}LED.hc#ifndef __LED_H#define __LED_Hvoid LED_Init(void);void LED0_ON(void);void LED0_OFF(void);void LED2_ON(void);void LED2_OFF(void);void LED0_Turn(void);void LED2_Turn(void);#endifLightSensor.cc#include “stm32f10x.h” // Device headervoid LightSensor_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Pin GPIO_Pin_13; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOB,GPIO_InitStructure);}uint8_t LightSensor_Get(void){return GPIO_ReadInputDataBit (GPIOB,GPIO_Pin_13);}LightSensor.hc#ifndef __LIGHT_SENSOR_H#define __LIGHT_SENSOR_Hvoid LightSensor_Init(void);uint8_t LightSensor_Get(void);#endif编译与下载使用Keil MDK打开 Project.uvprojx在项目树 Hardware 分组下添加 Buzzer.c 和 LightSensor.c按F7编译0 Error连接ST-Link下载器按F8下载到板子作者柳zh