NB-IOT计数器系统开发

本文详细介绍了基于STM32L151C8T6芯片,利用NB-IoT技术开发计数器系统的全过程。从审题、思路梳理到具体实现步骤,包括按键响应、数值加减、Flash存储及液晶屏显示等功能。文章还提供了源代码分享链接。
摘要由CSDN通过智能技术生成
  • 本文会介绍如何使用NB-IOT开发板一步步实现[计数器系统开发功能(基于STM32L151C8T6芯片)
  • 一.看题
  • 仔细审题很重要,找出题目最后要我们实现的效果

在这里插入图片描述


  • 二.理清思路

  • 简单来说,最后要实现的功能就是按下KEY2、KEY3能够加减数值,并显示在结果Y中,同时灯亮起一秒后熄灭。

  • 三.解题步骤

  • 首先拿到物联网竞赛工程,对工程进行编译,养成良好的习惯!!


在这里插入图片描述

  • 显示0错误0警告,说明工程没问题

  • 根据题目可知,我们要用到Flash,第一步可以先引入头文件

#include "flash.h"
#include "stm32l1xx_hal_flash_ex.h"
#include "stm32l1xx_hal_flash.h"
#include <stdio.h>

  • 引入这几个头文件即可,我一般喜欢放在一起,就头文件跟头文件放在一起,这样方便找
#include <string.h>
#include "board.h"
#include "hal_key.h"
#include "tim-board.h"
#include "timer_handles.h"

#include "flash.h"
#include "stm32l1xx_hal_flash_ex.h"
#include "stm32l1xx_hal_flash.h"
#include <stdio.h>

  • 接下来进行按键、LED灯的宏定义,便于后续编程,加快速度
#define LED1_ON() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET)
#define LED1_OFF() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_SET)
#define LED2_ON() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)
#define LED2_OFF() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET)

#define KEY2 HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)
#define KEY3 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)
#define KEY4 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5)

  • 按键和灯所对应的引脚为

LED1——>PA3 LED2——>PB8
KEY2——>PC13 KEY3——>PB1 KEY4——>PB5

  • 接下来通过取自模软件得到将中文字转成十六进制数
char ji[]={0x40,0x40,0x42,0xCC,0x00,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x00,
0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00};

char shu[]={0x90,0x52,0x34,0x10,0xFF,0x10,0x34,0x52,0x80,0x70,0x8F,0x08,0x08,0xF8,0x08,0x00,
0x82,0x9A,0x56,0x63,0x22,0x52,0x8E,0x00,0x80,0x40,0x33,0x0C,0x33,0x40,0x80,0x00};

char qi[]={0x80,0x80,0x9E,0x92,0x92,0x92,0x9E,0xE0,0x80,0x9E,0xB2,0xD2,0x92,0x9E,0x80,0x00,
0x08,0x08,0xF4,0x94,0x92,0x92,0xF1,0x00,0x01,0xF2,0x92,0x94,0x94,0xF8,0x08,0x00};

char zhi[]={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};

char jie[]={0x20,0x30,0xAC,0x63,0x20,0x18,0x08,0x48,0x48,0x48,0x7F,0x48,0x48,0x48,0x08,0x00,
0x22,0x67,0x22,0x12,0x12,0x12,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,};

char guo[]={0x00,0x00,0x00,0xFE,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,0x00,
0x44,0x44,0x24,0x25,0x14,0x0C,0x04,0xFF,0x04,0x0C,0x14,0x25,0x24,0x44,0x44,0x00};

  • 开始写函数
  • 在这里插入图片描述
  • 这个函数的主要功能是在液晶屏上显示中文字和程序一启动读到的Flash的值显示出来
void display_dat()
{

   OLED_ShowCHineseArray(32,0,ji);
   OLED_ShowCHineseArray(48,0,shu);
	 OLED_ShowCHineseArray(64,0,qi);
	 OLED_ShowCHineseArray(16,3,shu);
	 OLED_ShowCHineseArray(32,3,zhi);
	 OLED_ShowString(48,3,(uint8_t *)":");
	 OLED_ShowCHineseArray(16,6,jie);
	 OLED_ShowCHineseArray(32,6,guo);
	 OLED_ShowString(48,6,(uint8_t *)":");
	
	 STMFLASH_Read(0x0800f000,&str2[0],1);
	
	 /*str1[3]=(str2[0]>>24) &0xff;
	 str1[2]=(str2[0]>>16) &0xff;*/
	 str1[1]=(str2[0]>>8) &0xff;
	 str1[0]=(str2[0]) &0xff;
	
	 //a=(str1[0]-'0')*1000+(str1[1]-'0')*100+(str1[2]-'0')*10+(str1[3]-'0');
	
	 a = (int)str1[0]*256+(int)str1[1];
	
   sprintf(str3,"%5d",a);
	
	 OLED_ShowString(64,3,(uint8_t *)str3);
	 
	 LED2_OFF();
	 
}

在这里插入图片描述

  • 这个函数的主要功能就是实现对N的值的加和减,并能保存到Flash中
void KEY_Control()
{

   if(KEY2==0)
	 {
	 
	    HAL_Delay(1);
		 
		   if(KEY2==0)
			 {
			 
				   while(KEY2==0);
				 
			    a++;
				 
			 
				  sprintf(str3,"%5d",a); 
				 
			    OLED_ShowString(64,6,(uint8_t *)str3);
				 
			 }
	 
	 }

   if(KEY3==0)
	 {
	 
	    HAL_Delay(1);
		 
		   if(KEY3==0)
			 {
			 
				   while(KEY3==0);
				 
			    a--;
			 
				  sprintf(str3,"%5d",a); 
				 
			    OLED_ShowString(64,6,(uint8_t *)str3);
				 
			 }
	 
	 }
	 
	 if(KEY4==0)
	 {
	 
		   HAL_Delay(1);
		 
		      if(KEY4==0)
					{
					
					   while(KEY4==0);
			
					 // int a3;	
						//int a4;	
					
						/*a1=b/1000;
						a2=(b-(a1*1000))/100;
						a3=(b-(a1*1000)-(a2*100))/10;
						a4=b-(a1*1000)-(a2*100)-(a3*10);		
					
					  str2[0]=((uint8_t)( a4+'0') << 24) + ((uint8_t)(a3+'0') << 16) +((uint8_t) (a2+'0') << 8 )+ (uint8_t)(a1+'0');*/
					
						//a3=a-a1-a2;
						//a4=a-a1-a2-a3-a4;
							
						a1=a/256;
						a2=a-a1*256;
						str2[0]=((uint8_t)(a1)) | ((uint8_t)(a2) << 8) ;
						
					  STMFLASH_Write(0x0800f000,str2,1);
						STMFLASH_Write(0x0800f000,str2,1);
						STMFLASH_Write(0x0800f000,str2,1);
						STMFLASH_Write(0x0800f000,str2,1);
						
						LED2_ON();
						
						HAL_Delay(1000);
						LED2_OFF();
						
					}
	 
	 
	 }
	 

}

  • 最后就是在main函数里调用即可
int main( void )
{
    Init();
    OLED_Init();
	
	  display_dat();

    while( 1 )
    {
			
         KEY_Control();
			
    }
}

  • 四.功能展示

物联网竞赛----NB-IOT计数器系统开发

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Azz_ll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值