基于STM32单片机的智能婴儿床设计_第1页
基于STM32单片机的智能婴儿床设计_第2页
基于STM32单片机的智能婴儿床设计_第3页
基于STM32单片机的智能婴儿床设计_第4页
基于STM32单片机的智能婴儿床设计_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

河北理工大学信息学院 摘要 图4.6中断程序逻辑流程图4.3本章小结本章介绍了单片机软件设计流程,包括主程序流程设计、按键程序流程设计、处理程序流程设计、显示程序流程设计、中断程序流程设计。毕业设计5系统的测试5实物制作与运行调试5.1实物制作实物制作环节也是非常重要的环节,首先要对需要焊接的元器件进行采购,同时要注意元器件的型号、参数,方便后期焊接工作,主要元器件如表5-1所示。表STYLEREF1\s5-SEQ表\*ARABIC\s11主要元器件型号元件名称数量STM32F103单片机核心板1ESP8266WIFI模块1ULN2003步进电机驱动芯片1OLED显示屏110K电阻41K电阻7DS18B20温度传感器1水位滴液传感器1104无极性电容1LED指示灯4DY-SV17F语音模块1BEEP蜂鸣器1其他-若干在焊接工作之前先要对各元器件使用万用表来测量,确保是否完好能够使用,避免后期出现不必要的问题;准备好电烙铁、锡丝、松香、万用表等工具,根据原理图进行电路焊接,烙铁先加热,加热至适宜温度后才可以与焊件接触,将电烙铁插入松香中,确保松香均匀且薄薄地覆盖在烙头表面,在需要焊接的部位轻轻移动电烙铁,直到松香被熔化并且均匀地覆盖在焊接部位上。在期间要专注格外小心,防止出现硬件烧坏等情况出现。图5.1焊接过程在完成焊接后需要使用万用表的蜂鸣器档位去进行测试,观察是否存在短路,断路等明显的问题,将万用表的红黑表笔分别接在待测线路的两端,会蜂鸣是通路,不会蜂鸣则线路中间存在断路,并清理焊接残留物,确保电路板表面清洁。5.2软件调试软件程序的调试在整个过程中是必不可少的,在搭建了硬件平台之后,程序需要下载到单片机中,以确定各个软件的功能是否已经达到预期效果。本次智能婴儿床设计,是建立在Keil平台并采用C语言完成软件程序开发的,其调试流程如下:(1)启用Keil平台,完成每个模块的c语言代码,除了满足基本语法要求外,程序还需要获取关于内部计时器、注册表配置等的信息来实现目标功能。图5.2程序编写界面在完成了c语言的初始代码后,它往往无法实现预期的结果,除非它之前测试过的程序,基本上面临着各种各样的问题:在模块的所有软件功能成功之后,它需要对每个功能进行单独的问题审查和调试。(3)在处理了几个明显的软件和功能语法问题后,可以通过Keil在线调试功能进行调试,平台和用户可以运行程序的每一行每一步,也可通过观察窗口观察寄存器的值,或者查询某个变量的变化在不同的阶段。(4)将编写好的程序生成HEX文件,并通过Keil软件进行下载,下载到单片机后进行测试与调试,如有问题继续进行更改修正。经过一系列的调试工作,成功解决了软件程序中存在的语法错误、逻辑错误和运行错误等问题。同时,也对硬件模块进行了全面的测试和检测,确保了系统的稳定性和可靠性。目前,婴儿床控制系统软件已经能够正常运行,并实现了预期的功能。在后续的工作中,将继续关注系统的运行情况,并进行必要的优化和改进。5.3实物运行演示经过了仔细的软件和硬件的调试,下面本智能婴儿床控制系统将进行上电测试,实物如图5.3所示:图5.3智能婴儿床控制系统实物图上图中OLED分别显示的是控制模式,温度值,是否尿床提示,是否听到哭声提示。下图为手机APP默认显示界面,连接无线以后就可以进行设备的连接。如图5.4所示:图5.4APP默认界面对于声音检测哄睡模式的演示,需要模拟哭声,当传感器检测到就会进行报警,同时还可以通过按键进行音乐安抚和摇床功能的控制。如图5.5所示。图5.5哄睡模式如图5.5所示,现在本智能婴儿床控制系统监测到了婴儿的哭声,系统自动开启了摇晃婴儿床以及播放音乐安抚的功能。当滴液传感器检测到湿度值超过阈值就会进行报警,同时还可以通过按键打开加热功能的控制。如图5.6所示。图5.6检测到尿床如图5.7所示,现在本智能婴儿床控制系统正处于常规检测模式下,当温度值超过阈值时就会进行报警,同时还可以通过按键打开风扇开关的控制。图5.7检测到温度过高图5.8实物运行图在OLED液晶显示器中实时显示婴儿状态信息数据,通过温度传感器和湿度传感器来检测是否温度过高、尿床,通过声音传感器检测是否哭泣,播放音乐来安抚婴儿,通过直流电机来实现对婴儿床的摇摆。如图5.8所示。5.3本章小结本章首先介绍了系统硬件电路的焊接,给硬件电路上电以后展示硬件电路工作情况,并且在APP软件上演示了传感器检测到的效果,可以在APP上看到当前温湿度数据,还能看到婴儿有没有哭闹、有没有尿床、等情况,还可以在APP上选择是否开始摇晃,加热以及风扇开关。结论结论结论本设计旨在设计一款智能婴儿床,作为一种利用智能技术来实现婴儿护理的设备,它可以根据婴儿的不同需求,更可靠、方便、安全的进行对婴儿的看管和照顾。本文的主要研究内容是设计并实现一个智能婴儿床控制系统,该设计可以实时监测婴儿床的环境从而保障婴儿的安全和舒适,同时可以通过无线模块连接至手机进行远程操作。设计包括单片机模块、温度传感器模块、滴液传感器模块、无线模块、显示模块、步进电机模块,构成了一个完整的硬件系统,通过Keil5软件开发平台,使用C语言编写了相应的软件程序,实现了系统的功能和性能。经过软件硬件调试和实物展示,验证了系统的可行性和有效性,达到了设计要求。设计通过无线模块(如Wi-Fi、蓝牙等)将监测数据实时传输至家长手机端,家长可以查看实时数据并远程调节床的摇晃、音乐播放等。同时还可以设置报警阈值,在出现异常时系统会自动发送警报信息。通过对软硬件的设计以及调试后,最终本设计实现了以下功能,通过液滴传感器检测婴儿是否尿床,如果检测到尿床则会发出报警提示;通过声音传感器检测婴儿的哭声,当检测到婴儿哭闹时通过步进电机进行摇床安抚,同时通过语音模块播放童谣;实时检测婴儿床的温度,通过继电器可启动加热功能,当检测到温度过高时,可以通过继电器启动风扇降温功能;通过OLED显示模块显示系统的工作状态,包括温度、尿床、哄睡等信息。通过ESP8266无线模块连接至手机,实现远程控制和监测。毕业设计参考文献参考文献[1]杜宝强,朱传奇,武涛.基于物联网的智能婴儿床远程监控系统[J].物联网技术,2023,13(2):4.[2]钱意佐,郑志伟.一种智能婴儿床:,CN115299743A[P].2022.[3]吴冬雨.基于ATmega328P单片机的智能婴儿床系统设计[J].数字技术与应用,2021.[4]穆壹澜,李芷薇,谭瑶,等.婴儿床智能风扇[J].物联网技术,2019(2):3.[5]陈栋.改良型智能婴儿床:,CN205285726U[P].2016.[6]高南孙晨曦钟承宏.一种智能看护婴儿床的设计[J].电子产品世界,2022,29(11):28-32.[7]张开心,张梦瑶,刘梦然,等.基于嵌入式平台的智能婴儿床设计与实现[J].河南科技,2022(008):041.[8]多泽华,王明申,赵宇,等.基于树莓派的婴儿床智能监护系统设计与实现[J].计算机应用文摘,2022(006):038.[9]罗聪,李辉,彭旺,等.基于STM32的智能安全监护系统设计[J].仪表技术,2022(5):5.[10]谢成豪,贾卓男,董淑婧,等.一种基于物联网的智能婴儿床:,CN215650209U[P].2022.[11]孔德因.温度传感器DS18B20简介[J].家电维修,2023(2):1.[12]冯乔春,陈武,杨子力,等.一种DS18B20数字温度传感器快速测温的方法:,CN115237474A[P].2022.[13]王同珍,黄明炜,黄宏安,等.基于GA-BP神经网络的温度传感器校准系统[J].2021.[14]祝加雄.基于ESP8266主控器的智慧实验室的监控设计[J].电子制作,2023,31(2):4.[15]文丹.基于Android的智能家居交互系统设计与开发[J].电子制作,2023,31(1):5.[16]郑燕红.一种采用ESP8266为核心单元的无线节能开关:,CN216389129U[P].2022.[17]赵志鹏,王猛,欧为军.C3级列控系统无线通信协议引起的无线通信超时优化建议[J].中国铁路,2023(1):6.[18]于宝珠.无线通信系统时延和可靠性分析与保障研究[D].吉林大学,2022.[19]左旭涛.地铁信号系统无线通讯传输的抗干扰措施[J].运输经理世界,2022(7):3.[20]金志虎,汪澜,唐佛南,等.一种对无线通讯产品样机测试写值的方法和系统:,CN107426719B[P].2020.[21]侯丽红.基于STM32的智能婴儿床系统设计[J].科学技术创新,2023(25):225-228.[22]杨千慧,唐浩煜,邹枫奕,等.基于STM32单片机的智能家居设计[J].电子制作,2023,31(14):59-63.[23]谢福,王振省,李俊,等.基于STM32单片机的智能书桌设计与实现[J].电子产品世界,2022,29(1):82-85.[24]李文杰,脱慧.基于STM32的教室智能照明系统设计[J].中国设备工程,2022(13):3.[25]王勋,康荣显,王玥,等.基于STM32单片机的智能鱼缸设计[J].赤峰学院学报:自然科学版,2022,38(5):5.附录A谢辞致谢历经半年,本次的毕业设计即将到达结尾,由于平时缺乏对实践的重视,本次设计过程也出现了经验不足的情况,感谢我的指导老师,她在本设计的选题、设计、实现、撰写等方面给予了我很多的指导和建议,从开题准备到最终答辩,老师在每个环节都给予了我很多帮助,她的专业知识和严谨态度让我受益匪浅,她的耐心和细心让我感动和敬佩。感谢我的家人和朋友,他们在本文的实验、调试、修改等过程中给予了我很多的帮助和支持,是他们在背后默默支持和鼓励我,给予我无尽的关心和帮助,让我能够专心致志地完成毕业论文,他们的合作和鼓励让我克服了很多的困难和压力。在今后的道路中我将不断弥补和完善自身的不足之处,提高自己的综合能力。最后,我要感谢所有在本次设计中给予我帮助和支持的人,虽然不能一一列举,但你们的每一点帮助都是我前进路上的宝贵资产,祝福一切顺利、身体健康、万事如意。附录B附录A毕业设计附录B主程序:uint8_tkey_num,flag_display; //按键与显示变量uint16_ttime_1ms,time_500ms;//计时变量1ms,500msuint8_tMotor_Status; //步进电机状态变量uint16_tMotor_Num; //步进电机计数变量uint16_tMotor_Time; //步进电机计时变量uint8_tconstMotor_Buf[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//步进电机步数数组uint8_tflag_moto; //标志位uint16_tbody_temp; //体温uint16_tadc_value,humi; //ADC值湿度变量uint8_tmode,hot_flag,fan_flag;uint8_tcrib_flag;//婴儿床标志位uint8_tbeep_temp,beep_humi;uint16_ttime_1,flag_1,time_2,flag_2;//计时变量//按键设置函数voidKey_function(void){ key_num=Chiclet_Keyboard_Scan(); //按键扫描 if(key_num!=0) //有按键按下 { switch(key_num) { case1: //按键1切换模式mode==0?mode=1:(mode=0); break; case2: //按键2手动控制是否加热mode=1;hot_flag==0?hot_flag=1:(hot_flag=0); break; case3: //按键3手动控制是否打开风扇Èmode=1;fan_flag==0?fan_flag=1:(fan_flag=0); break; } }}//监测函数voidMonitor_function(void){uint16_ttemp_init; if(time_500ms==1) { time_500ms=0;if(body_temp<1000)temp_init=body_temp; body_temp=Ds18b20_Read_Temp();if(body_temp>1000)body_temp=temp_init;//单通道数据获取HAL_ADC_Start(&hadc1); if(HAL_ADC_PollForConversion(&hadc1,999)==HAL_OK) adc_value=HAL_ADC_GetValue(&hadc1); HAL_ADC_Stop(&hadc1); humi=(adc_value/4095.00)*100; //获取值 } if(flag_1==1) //给阿里云发送数据 { flag_1=0;Ali_MQTT_Publish_1(); } if(flag_2==1) //给阿里云发送数据 { flag_2=0;Ali_MQTT_Publish_2(); }if(voice==0||(crib_flag==1&&mode==1))//手动控制或检测到哭声的标志位为1,婴儿床自动摇晃{if((Motor_Status&0x01)==0x00){if(flag_moto==0){flag_moto=1;if((Motor_Status&0x01)==0x00) { Motor_Status|=0x81;}}}}if(voice==0)//检测到哭声播放摇篮曲lullabuy(0);elselullabuy(1);if(humi>20)//湿度值大于20为尿床beep_humi=1;elsebeep_humi=0;if(mode==0)//自动模式{if(body_temp<35*10)//体温小于35进行加热{hot_flag=1;fan_flag=0;beep_temp=0;}else//ÌåδóÓÚµÈÓÚ35{hot_flag=0;if(body_temp>37*10&&body_temp<=38*10)//{fan_flag=1;beep_temp=0;}if(body_temp>38*10)//体温大于38进行报警{fan_flag=0;beep_temp=1;}}}else{beep_temp=0;}if(beep_humi==1||beep_temp==1)alarm(1);elsealarm(0);relay_fan(fan_flag);relay_hot(hot_flag);}//显示函数voidDisplay_function(void) //显示体温模式是否听到哭声是否尿床{ Oled_ShowCHinese(0,0,(uint8_t*)"模式"); Oled_ShowString(32,0,(uint8_t*)":"); if(mode==0) Oled_ShowCHinese(40,0,(uint8_t*)"自动"); else Oled_ShowCHinese(40,0,(uint8_t*)"手动"); Oled_ShowCHinese(0,2,(uint8_t*)"体温"); Oled_ShowString(32,2,(uint8_t*)":"); OLED_Show_Temp(40,2,body_temp); Oled_ShowCHinese(0,4,(uint8_t*)"是否尿床"); Oled_ShowString(64,4,(uint8_t*)":"); if(beep_humi==1) Oled_ShowCHinese(72,4,(uint8_t*)"是"); else Oled_ShowCHinese(72,4,(uint8_t*)"否"); OLED_ShowNum(96,4,humi,3); Oled_ShowCHinese(0,6,(uint8_t*)"是否听到哭声"); Oled_ShowString(96,6,(uint8_t*)":"); if(voice==0) Oled_ShowCHinese(104,6,(uint8_t*)"是"); else Oled_ShowCHinese(104,6,(uint8_t*)"否");}通信程序:#include"./HAL/AliESP8266/AliESP8266.h"unsignedcharESP8266_buf[1024];unsignedshortESP8266_cnt,ESP8266_cntPre;unsignedcharUSARTWIFI_TX_BUF[1024];unsignedcharuartwifi_value; //串口2接收缓存变量#defineuwifi_printf(...)HAL_UART_Transmit(&Huart_wifi,USARTWIFI_TX_BUF,sprintf((char*)USARTWIFI_TX_BUF,__VA_ARGS__),0xffff)//串口数据发送voidUsart_SendString(unsignedchar*str,unsignedshortlen){ unsignedshortcount=0; for(;count<len;count++) { HAL_UART_Transmit(&Huart_wifi,str++,1,999); }}//清空缓存voidESP8266_Clear(void){ memset(ESP8266_buf,0,sizeof(ESP8266_buf)); ESP8266_cnt=0;}//等待接收完成_BoolESP8266_WaitRecive(void){ if(ESP8266_cnt==0) //如果接收计数为0则说明没有处于接受数据中,所以直接跳出,结束函数 returnREV_WAIT; if(ESP8266_cnt==ESP8266_cntPre) //如果上一次的值和这次相同,则说明接收完毕Ï { ESP8266_cnt=0; //清0接受计数 returnREV_OK; //返回接受完成标志 } ESP8266_cntPre=ESP8266_cnt; //置位相同 returnREV_WAIT; //返回接受未完成标志}//发送命令_BoolESP8266_SendCmd(char*cmd,char*res){ unsignedshorttimeOut=200; Usart_SendString((unsignedchar*)cmd,strlen((constchar*)cmd)); while(timeOut--) { if(ESP8266_WaitRecive()==REV_OK) //如果收到数据 { if(strstr((constchar*)ESP8266_buf,res)!=NULL) //如果检索到关键词 { ESP8266_Clear(); //清空缓存 return0; } } DelayXms(10); } return1;}//连接网络和设置格式voidESP8266LinkAp(void){charWIFI_buf[50]; while(ESP8266_SendCmd("AT+RESTORE\r\n",""))DelayXms(1000);while(ESP8266_SendCmd("AT+CIPSNTPCFG=1,8,\"\"\r\n","OK"))DelayXms(1000);while(ESP8266_SendCmd("AT+CWMODE=1\r\n","OK"))DelayXms(1000);while(ESP8266_SendCmd("AT+CIPSNTPCFG=1,8,\"\"\r\n","OK"))DelayXms(1000);sprintf(WIFI_buf,"AT+CWJAP=\"%s\",\"%s\"\r\n",SSID,PASS); //发送客户端ID、用户名、密码while(ESP8266_SendCmd(WIFI_buf,"WIFIGOTIP"))DelayXms(1000);while(ESP8266_SendCmd("ATE0\r\n","OK"))DelayXms(1000);//连接阿里云voidESP8266LinkloT(void){charsend_buf[512];//发送客户端ID、用户名、密码sprintf(send_buf,"AT+MQTTUSERCFG=0,1,\"NULL\",\"%s&%s\",\"%s\",0,0,\"\"\r\n",DeviceName,ProductKey,Password); while(ESP8266_SendCmd(send_buf,"OK")) DelayXms(500);//发送客户端IDsprintf(send_buf,"AT+MQTTCLIENTID=0,\"%s\"\r\n",ClientId); while(ESP8266_SendCmd(send_buf,"OK")) DelayXms(500);//连接阿里云服务器 sprintf(send_buf,"AT+MQTTCONN=0,\"%s\",%s,1\r\n",mqttHostUrl,port); while(ESP8266_SendCmd(send_buf,"OK")) DelayXms(500); //订阅主题 sprintf(send_buf,"AT+MQTTSUB=0,\"/sys/%s/%s/thing/service/property/set\",1\r\n",ProductKey,DeviceName); while(ESP8266_SendCmd(send_buf,"OK")) DelayXms(500); }//向阿里云发布消息externuint8_tmode,hot_flag,fan_flag;externuint8_tcrib_flag;//婴儿床标志位externuint8_tbeep_temp,beep_humi;//externuint8_trelay_o;voidAli_MQTT_Publish_1(void){ charbuf[200]; chartxt[512]; memset(txt,0,sizeoftxt); /*数据点整合*/ sprintf(buf,"AT+MQTTPUB=0,\"/sys/%s/%s/thing/event/property/post\",",ProductKey,DeviceName); strcat(txt,buf); strcat(txt,"\"{\\\"method\\\":\\\"perty.set\\\"\\,\\\"id\\\":\\\"2012934115\\\"\\,\\\"params\\\":{");sprintf(buf,"\\\"mode\\\":%d\\,",mode); strcat(txt,buf);sprintf(buf,"\\\"hot_flag\\\":%d\\,",hot_flag); strcat(txt,buf);sprintf(buf,"\\\"fan_flag\\\":%d",fan_flag); strcat(txt,buf); strcat(txt,"}\\,\\\"version\\\":\\\"1.0.0\\\"}\",1,0\r\n"); //发送数据 uwifi_printf("%s",txt);}voidAli_MQTT_Publish_2(void){ charbuf[200]; chartxt[512]; memset(txt,0,sizeoftxt); /*数据点整合*/ sprintf(buf,"AT+MQTTPUB=0,\"/sys/%s/%s/thing/event/property/post\",",ProductKey,DeviceName); strcat(txt,buf); strcat(txt,"\"{\\\"method\\\":\\\"perty.set\\\"\\,\\\"id\\\":\\\"2012934115\\\"\\,\\\"params\\\":{");sprintf(buf,"\\\"crib_flag\\\":%d\\,",crib_flag); strcat(txt,buf);sprintf(buf,"\\\"beep_temp\\\":%d\\,",beep_temp); strcat(txt,buf);sprintf(buf,"\\\"voice\\\":%d\\,",voice); strcat(txt,buf);sprintf(buf,"\\\"beep_humi\\\":%d",beep_humi); strcat(txt,buf); strcat(txt,"}\\,\\\"version\\\":\\\"1.0.0\\\"}\",1,0\r\n"); //发送数据 uwifi_printf("%s",txt);}//接受阿里云下发的消息voidAli_MQTT_Recevie(void){char*Start;Start=strstr((char*)ESP8266_buf,"crib_flag");if(Start!=NULL){Start=strstr(Start,":")+1;crib_flag=atoi((constchar*)Start);ESP8266_Clear();}Start=strstr((char*)ESP8266_buf,"mode");if(Start!=NULL){Start=strstr(Start,":")+1;mode=atoi((constchar*)Start);ESP8266_Clear();}Start=strstr((char*)ESP8266_buf,"hot_flag");if(Start!=NULL){Start=strstr(Start,":")+1;hot_flag=atoi((constchar*)Start);ESP8266_Clear();}Start=strstr((char*)ESP8266_buf,"fan_flag");if(Start!=NULL){Start=strstr(Start,":")+1;fan_flag=atoi((constchar*)Start);ESP8266_Clear();}}OLED程序:#include"./HAL/OLED/OLED_NEW.H"#include"./HAL/OLED/OLED_TAB.H"voidOLED_GPIO_Init(void){GPIO_InitTypeDefGPIO_InitStruct;//引脚时钟功能OLED_SCL_GPIO_CLK_ENABLE();OLED_SDA_GPIO_CL_ENABLE();/*GPIO引脚配置以及初始化*/GPIO_InitStruct.Pin=OLED_SDA_PIN;GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull=GPIO_PULLUP; GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(OLED_SDA_PORT,&GPIO_InitStruct);GPIO_InitStruct.Pin=OLED_SCL_PIN;GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull=GPIO_PULLUP; GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(OLED_SCL_PORT,&GPIO_InitStruct);}voidys(unsignedinti){while(i--);}//OLEDIIC开始函数voidOLED_IIC_Start(){scl(1);ys(4);sda(1);ys(4);sda(0);ys(4);scl(0);}//IICSTOPvoidOLED_IIC_Stop(){sda(0);ys(4);scl(1);ys(4);sda(1);}//IICWritebyteunsignedcharOLED_Write_IIC_Byte(unsignedcharIIC_Byte){ unsignedchari; unsignedcharAck_Bit;//应答信号 for(i=0;i<8;i++) { if(IIC_Byte&0x80) {sda(1);} else { sda(0); } ys(4); scl(1); ys(4); scl(0); ys(4); IIC_Byte<<=1; //loop } sda(1); // 释放IICSDA总线为主器件接受从器件产生应答信号 ys(4); scl(1);//第9个时钟周期 ys(4); Ack_Bit=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_13); //读取应答信号 scl(0); returnAck_Bit; }voidOLED_write_iic_com(unsignedcharIIC_Command){OLED_IIC_Start();OLED_Write_IIC_Byte(0x78);//Slaveaddre.ss,SA0=0OLED_Write_IIC_Byte(0x00); //writecommandOLED_Write_IIC_Byte(IIC_Command);OLED_IIC_Stop();}voidOLED_write_iic_dat(unsignedcharIIC_Data){OLED_IIC_Start();OLED_Write_IIC_Byte(0x78); OLED_Write_IIC_Byte(0x40); //writedataOLED_Write_IIC_Byte(IIC_Data);OLED_IIC_Stop();}voidOLED_Set_Pos(unsignedcharx,unsignedchary){ OLED_write_iic_com(0xb0+y); OLED_write_iic_com(((x&0xf0)>>4)|0x10); OLED_write_iic_com((x&0x0f)|0x01);}voidOLED_Clear(void){ unsignedchari,n; for(i=0;i<8;i++) { OLED_write_iic_com(0xb0+i); OLED_write_iic_com(0x00); OLED_write_iic_com(0x10); for(n=0;n<128;n++)OLED_write_iic_dat(0); }}voidOLED_Init(void){ OLED_GPIO_Init();//引脚初始化 OLED_write_iic_com(0xae);//--turnoffoledpanel OLED_write_iic_com(0x00);//setlowcolumnaddress OLED_write_iic_com(0x10);//sethighcolumnaddress OLED_write_iic_com(0x40);//--setstartlineaddressSetMappingRAMDisplayStartLine(0x00~0x3F) OLED_write_iic_com(0x81);//--setcontrastcontrolregister OLED_write_iic_com(0xCF);//SetSEGOutputCurrentBrightness OLED_write_iic_com(0xa1);//--SetSEG/ColumnMapping0xa0左右反置0xa1正常 OLED_write_iic_com(0xc8);//SetCOM/RowScanDirection0xc0上下反置0xc8正常 OLED_write_iic_com(0xa6);//--setnormaldisplay OLED_write_iic_com(0xa8);//--setmultiplexratio(1to64) OLED_write_iic_com(0x3f);//--1/64duty OLED_write_iic_com(0xd3);//-setdisplayoffset ShiftMappingRAMCounter(0x00~0x3F) OLED_write_iic_com(0x00);//-notoffset OLED_write_iic_com(0xd5);//--setdisplayclockdivideratio/oscillatorfrequency OLED_write_iic_com(0x80);//--setdivideratio,SetClockas100Frames/Sec OLED_write_iic_com(0xd9);//--setpre-chargeperiod OLED_write_iic_com(0xf1);//SetPre-Chargeas15Clocks&Dischargeas1Clock OLED_write_iic_com(0xda);//--setcompinshardwareconfiguration OLED_write_iic_com(0x12); OLED_write_iic_com(0xdb);//--setvcomh OLED_write_iic_com(0x40);//SetVCOMDeselectLevel OLED_write_iic_com(0x20);//-SetPageAddressingMode(0x00/0x01/0x02) OLED_write_iic_com(0x02);// OLED_write_iic_com(0x8d);//--setChargePumpenable/disable OLED_write_iic_com(0x14);//--set(0x10)disable OLED_write_iic_com(0xa4);//DisableEntireDisplayOn(0xa4/0xa5) OLED_write_iic_com(0xa6);//DisableInverseDisplayOn(0xa6/a7) OLED_write_iic_com(0xaf);//--turnonoledpanel OLED_Set_Pos(0,0);}voidOLED_Clear2(void){ unsignedchari,n; for(i=4;i<8;i++) { OLED_write_iic_com(0xb0+i); OLED_write_iic_com(0x02); OLED_write_iic_com(0x10); for(n=0;n<128;n++)OLED_write_iic_dat(0); }}//OLED显示单个字符函数voidOled_ShowChar(unsignedcharx,unsignedchary,unsignedintchr){ unsignedintc=0,i=0; c=chr-''; OLED_Set_Pos(x,y); for(i=0;i<8;i++) OLED_write_iic_dat(F8X16[c*16+i]); OLED_Set_Pos(x,y+1); for(i=0;i<8;i++) OLED_write_iic_dat(F8X16[c*16+i+8]);}//OLED显示字符串函数voidOled_ShowString(unsignedcharx,unsignedchary,unsignedchar*chr){ unsignedintj=0; while(chr[j]!='\0') { Oled_ShowChar(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论