IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32定时器中断和LED -> 正文阅读

[嵌入式]STM32定时器中断和LED

之前实验到串口接收命令数据和发送仪器数据,已经串口模拟仪器和Cache数据库做仪器连接测试。这次实验STM32的定时器中断和显示部分。把串口启动后的LED状态显示由以前死循环方法里移到定时器中断里面,借助定时器中断显示发送给外部十六进制数据。

实现目标:
1.串口状态的LED灯闪烁从以前死循环移入定时器中断,这样串口发送数据时间长时候也不会卡主闪烁。
2.按0,1,2号键在显示器显示按的数字
3.按KEY_UP键时候给串口发送数据,且显示发送的十六进制数据

碰到的坑有:
在定时器中断里面如果调用的方法用了正点原则提供的delay_ms延时函数后会导致其他地方延时失效。因为我定时器中断间隔是2ms。每2ms调用delay_ms方法会使SysTick->LOAD重新加载。发现主函数延迟方法不好使后看他实现分析的。这个delay在中断存在时候基本废了。只能后面看着再实现个并发好使的延迟函数。
在这里插入图片描述

代码如下,没列出来的代码文件和上一个博客一样:
timer.h

#ifndef _TIMER
#define _TIMER
#include "sys.h"
//通用定时器中断初始化
//这里时钟选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数
//2ms定时显示
//这里使用的是定时器3!
//InitTimer3(19, 7199); 
void InitTimer3(u16 arr,u16 psc); 

//测试时钟
void TestTimer3(void);
#endif


timer.c

#include "timer.h"
#include "led.h"
#include "smg.h"

//通用定时器中断初始化
//这里时钟选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数
//2ms定时显示
//这里使用的是定时器3!
//InitTimer3(19, 7199); 
void InitTimer3(u16 arr,u16 psc)
{
		//TIM3时钟使能   
    RCC->APB1ENR|=1<<1;  
	  //设定计数器自动重装值 
		TIM3->ARR=arr;  	
	  //预分频器设置
		TIM3->PSC=psc; 
    //允许更新中断				 	
		TIM3->DIER|=1<<0;   
	  //使能定时器3
		TIM3->CR1|=0x01; 
    //抢占0,子优先级3,组2			
  	MY_NVIC_Init(0,3,TIM3_IRQn,2);
							 
}

//测试时钟
void TestTimer3(void)
{
	//初始化LED灯
	InitLedEnv();
}

//十六进制字符转换为绘制的数据
//c:字符串
u8 GetSMGChar(char c)
{
	if(c=='0')
	{
		return ALL_SMG_CHAR[0];
	}
	else if(c=='1')
	{
		return ALL_SMG_CHAR[1];
	}
	else if(c=='2')
	{
		return ALL_SMG_CHAR[2];
	}
	else if(c=='3')
	{
		return ALL_SMG_CHAR[3];
	}
	else if(c=='4')
	{
		return ALL_SMG_CHAR[4];
	}
	else if(c=='5')
	{
		return ALL_SMG_CHAR[5];
	}
	else if(c=='6')
	{
		return ALL_SMG_CHAR[6];
	}
	else if(c=='7')
	{
		return ALL_SMG_CHAR[7];
	}
	else if(c=='8')
	{
		return ALL_SMG_CHAR[8];
	}
	else if(c=='9')
	{
		return ALL_SMG_CHAR[9];
	}
	else if(c=='A')
	{
		return ALL_SMG_CHAR[10];
	}
	else if(c=='B')
	{
		return ALL_SMG_CHAR[11];
	}
	else if(c=='C')
	{
		return ALL_SMG_CHAR[12];
	}
	else if(c=='D')
	{
		return ALL_SMG_CHAR[13];
	}
	else if(c=='E')
	{
		return ALL_SMG_CHAR[14];
	}
	else if(c=='F')
	{
		return ALL_SMG_CHAR[15];
	}
	return ALL_SMG_CHAR[16];
}

//LED状态
int ledStat = 0;
int times=0;
int curSMGIndex=0;

//时钟三中断实验
void TIM3_IRQHandler(void)
{
	  //溢出中断
    if (TIM3->SR & 0X0001) 
    {
        times++;
				//每50次闪一下灯
				if (times % 100 == 0)
				{
					if (ledStat == 0)
					{
						ledStat = 1;
						GPIOC->ODR &= ~(1 << 0);
					}
					else
					{
						ledStat = 0;
						GPIOC->ODR |= 1 << 0;
					}
				}
				//没有执行锁定缓存时候才执行绘制
				if(SMG_LOCK_BUF==0)
				{
					char oneChar=SMG_SHOW_BUF[curSMGIndex];
					//数码管显示
					SMGWriteData(GetSMGChar(oneChar), curSMGIndex); 
					//刷新显示
					SMGRefresh();
					curSMGIndex++;
					curSMGIndex%=8;
				}
    }
	  //清除中断标志位
    TIM3->SR &= ~(1 << 0); 
}




main.c

#include "delay.h"
#include "led.h"
#include "beep.h"
#include "key.h"
#include "usart.h"
#include "hardware.h"
#include "timer.h"
#include "smg.h"

//测试汇编调入非main方法
int zlzmain(void)
{
	//初始化时钟
	Stm32_Clock_Init(9);
	//初始化延时函数
	delay_init(72);	 
	TestLed();
	return 0;
}

//zlz的stm32学习
int main(void)
{
	//初始化时钟
	Stm32_Clock_Init(9);
	//初始化延时函数
	delay_init(72);	 
	
	//测试LED
	//TestLed();
	
	
	//测试蜂鸣器
	//TestBeep();
	
	//测试按键
	//TestKey();
	
	//测试串口
	//TestUsart(72,9600);
	InitSMG();
	InitTimer3(19, 7199); 
	TestTimer3();
	
	//启动串口命令监测
	StartUsartCmdChl(72,9600);
}




smg.h

#ifndef _SMG
#define _SMG
#include "sys.h"
#include "delay.h"

74HC138操作线
//A0地址线
#define LED_A0 PCout(10) 
//A1地址线
#define LED_A1 PCout(11) 
//A2地址线
#define LED_A2 PCout(12) 

74HC595操作线
//数据线
#define LED_DS		PBout(3) 
//锁存时钟线
#define LED_LCLK	PBout(4) 
//时钟线
#define LED_SCK		PBout(5) 

//每个数字亮灯的数组
//0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F, .,全灭
//        1
//       ---
//    6 |   | 2
//       ---
//    5 | 7 | 3
//       ---  .8
//         4
//b对应3e即0011 1110从8位最高位和1-8顺序控制每个灯管是否点亮
extern u8 ALL_SMG_CHAR[];

//SMG的8个位置对应的字符
extern char SMG_SHOW_BUF[];

//锁定缓存
extern int SMG_LOCK_BUF;

//初始化显示屏
void InitSMG(void);
	
//74HC595驱动
//数码管显示
//duan:显示的段码
//wei:要显示的数码管编号 0-7(共8个数码管)
void SMGWriteData(u8 duan,u8 wei);
	
	
//74HC595驱动
//数码管刷新显示
void SMGRefresh(void);


#endif


smg.c

#include "smg.h"

//每个数字亮灯的数组
//0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F, .,全灭
//        1
//       ---
//    6 |   | 2
//       ---
//    5 | 7 | 3
//       ---  .8
//         4
//b对应3e即0011 1110从8位最高位和1-8顺序控制每个灯管是否点亮
u8 ALL_SMG_CHAR[] = {0xfc, 0x60, 0xda, 0xf2, 0x66, 0xb6, 0xbe, 0xe0, 0xfe, 0xf6, 0xee, 0x3e, 0x9c, 0x7a, 0x9e, 0x8e, 0x01, 0x00};

//SMG的8个位置对应的字符
char SMG_SHOW_BUF[8]={'5','2','5','7','1','3','1','4'};

//锁定缓存
int SMG_LOCK_BUF=0;

//初始化显示屏
void InitSMG(void)
{
	 //使能PORTB时钟	 
	 RCC->APB2ENR|=1<<3;  
   //使能PORTC时钟  
   RCC->APB2ENR|=1<<4; 
   //使能AFIO时钟	
   RCC->APB2ENR|=1<<0;   
   //关闭jtag,使能SWD,可以用SWD模式调试 PB4做普通IO口使用,否则不能当IO使用
   JTAG_Set(SWD_ENABLE);
   //PB3~5推挽输出
   GPIOB->CRL&=0XFF000FFF; 
   GPIOB->CRL|=0X00333000;
   //PC10~12推挽输出 
   GPIOC->CRH&=0XFFF000FF; 
   GPIOC->CRH|=0X00033300; 
    	
   GPIOB->BRR = 1<<3|1<<5;
   GPIOB->BSRR = 1<<4;
   GPIOC->BSRR = 1<<10|1<<11|1<<12;
}

//74HC138驱动
//数码管位选
//num:要显示的数码管编号 0-7(共8个数码管)
void LED_Wei(u8 num)
{
    LED_A0=num&0x01;
		LED_A1=(num&0x02)>>1;
		LED_A2=(num&0x04)>>2;
}


//74HC595驱动
//数码管显示
//duan:显示的段码
//wei:要显示的数码管编号 0-7(共8个数码管)
void SMGWriteData(u8 duan,u8 wei)
{
	u8 i;
	//先送段
	for( i=0;i<8;i++)
	{
		LED_DS=(duan>>i)&0x01;
		LED_SCK=0;
		//delay_us(5);
		LED_SCK=1;
	}
	//后选中位
  LED_Wei(wei);
}


//74HC595驱动
//数码管刷新显示
void SMGRefresh(void)
{
	LED_LCLK=1;
	//delay_us(5);
	LED_LCLK=0;
}





hardware.h

//定义操作硬件的基本方法,供外部调用
//定义宏,防止头文件重复引用
#ifndef __HARDWARE
#define __HARDWARE

//把十六进制字符串转换数组
//c:字符串
int HexToInt(char c);

//把字符串按u8发送
//str:字符串
void U8Send(const char * str);

//启动串口命令通道
//pclk2:pclk2的时钟频率
//bound:波特率
void StartUsartCmdChl(int pclk2, int bound);

//打开LED0
void LED0Open(void);

//关闭LED0
void LED0Close(void);

//打开LED1
void LED1Open(void);

//关闭LED1
void LED1Close(void);

//打开LED2
void LED2Open(void);

//关闭LED2
void LED2Close(void);

//打开LED3
void LED3Open(void);

//关闭LED3
void LED3Close(void);

//打开LED4
void LED4Open(void);

//关闭LED4
void LED4Close(void);

//打开LED5
void LED5Open(void);

//关闭LED5
void LED5Close(void);

//打开LED6
void LED6Open(void);

//关闭LED6
void LED6Close(void);

//打开LED7
void LED7Open(void);

//关闭LED7
void LED7Close(void);

//打开fengmingq
void BeepOpen(void);

//关闭蜂鸣器
void BeepClose(void);

//显示十六进制串
//str:要显示的十六进制串
void ShowHexStr(const char * str);

//显示十六进制串
//c:要显示的十六进制字符
void ShowHexChar(const char c);

#endif


hardware.c

#include "sys.h"
#include "delay.h"
#include "stdio.h"	
#include "led.h"
#include "beep.h"
#include "key.h"
#include "usart.h"
#include "smg.h"
#include "hardware.h"
#include "string.h"


//启动串口命令通道
//pclk2:pclk2的时钟频率
//bound:波特率
void StartUsartCmdChl(int pclk2, int bound)
{
	//初始化串口
	InitUsart(pclk2, bound);
	//初始化LED灯
	InitLedEnv();
	//初始化按键
	InitKeyEnv();
	//初始化蜂鸣器
	InitBeepEnv();
	//命令开始
	u8 ENQ = 0x05;
	//命令结束
	u8 EOT = 0x04;
	//循环次数
	u16 times = 0;
	//命令约定从Asscii码15开始
	u8 Key0OpenCmd = 0x0F;
	u8 Key0CloseCmd = 0x10;
	u8 Key1OpenCmd = 0x11;
	u8 Key1CloseCmd = 0x12;
	u8 Key2OpenCmd = 0x13;
	u8 Key2CloseCmd = 0x14;
	u8 Key3OpenCmd = 0x15;
	u8 Key3CloseCmd = 0x16;
	u8 Key4OpenCmd = 0x17;
	u8 Key4CloseCmd = 0x18;
	u8 Key5OpenCmd = 0x19;
	u8 Key5CloseCmd = 0x1A;
	u8 Key6OpenCmd = 0x1B;
	u8 Key6CloseCmd = 0x1C;
	u8 Key7OpenCmd = 0x1D;
	u8 Key7CloseCmd = 0x1E;
	u8 BeepOpenCmd = 0x1F;
	u8 BeepCloseCmd = 0x20;
	
	//检验仪器数据
	const char* machData="02 30 36 30 33 32 0D FF 20 52 45 53 55 4C 54 20 20 0D 21 20 30 31 31 2E 39 53 68 20 20 20 0D 22 20 30 32 2E 37 31 53 20 20 20 20 0D 23 20 30 32 32 2E 38 53 20 20 20 20 0D 24 20 30 30 2E 34 35 53 20 20 20 20 0D 25 20 30 30 33 2E 38 53 20 20 20 20 0D 28 20 30 38 2E 34 35 53 48 20 20 20 0D 29 20 30 37 31 2E 30 53 20 20 20 20 0D 2A 20 30 30 2E 31 33 53 20 20 20 20 0D 2B 20 30 30 31 2E 31 53 20 20 20 20 0D 2C 20 30 30 2E 31 35 53 20 20 20 20 0D 2D 20 30 30 31 2E 33 53 20 20 20 20 0D 2E 20 30 30 2E 30 34 53 20 20 20 20 0D 2F 20 30 30 30 2E 33 53 20 20 20 20 0D 30 20 30 30 2E 30 34 53 20 20 20 20 0D 31 20 30 30 30 2E 33 53 20 20 20 20 0D 32 20 30 34 2E 35 36 20 20 20 20 20 0D 33 20 30 31 33 2E 31 20 20 20 20 20 0D 34 20 30 33 39 2E 38 20 20 20 20 20 0D 35 20 30 30 30 38 37 20 20 20 20 20 0D 36 20 30 32 38 2E 37 20 20 20 20 20 0D 37 20 30 33 33 2E 30 20 20 20 20 20 0D 38 20 30 31 36 2E 31 20 68 20 20 20 0D 3A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0D 40 20 30 30 32 36 33 20 20 20 20 20 0D 41 20 30 30 37 2E 39 20 20 20 20 20 0D 42 20 30 2E 32 30 39 20 20 20 20 20 0D 43 20 30 31 32 2E 35 20 20 20 20 20 0D 50 20 20 20 20 20 20 20 20 20 20 20 20 20 0D 51 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0D 52 20 20 20 20 20 0D 53 20 20 20 20 20 20 20 0D 54 20 4E 45 55 2B 0D 55 20 0D 56 20 0D 57 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 3D 66 AE F0 FF E5 B7 89 75 6B 64 60 5E 60 5E 5E 5F 5D 51 43 3B 35 33 31 2F 2D 2C 2A 29 28 27 26 26 25 25 25 24 24 24 23 23 23 23 23 22 21 21 21 21 21 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0D 58 20 20 20 20 20 20 20 20 20 20 20 20 21 20 20 20 20 20 20 20 20 20 21 24 29 30 3D 4B 5F 7C 98 B2 CD DF F2 FB FD FF F8 E9 DA CA B5 9D 8B 80 73 67 5B 51 4C 47 41 3B 38 34 2F 2D 2D 2A 27 26 24 23 22 22 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0D 59 20 20 20 20 20 20 20 20 20 20 20 26 34 48 63 7E A0 C2 E3 F8 FF FF FF F8 F1 EA E3 D6 CF C8 BB B4 A7 A0 92 8C 85 7E 77 77 71 6A 63 63 5C 56 56 4F 4F 48 3B 3B 34 34 2D 2D 26 26 26 26 26 26 26 26 26 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0D 5A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25 3D 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 3F 38 35 32 31 30 2E 2C 2A 2B 29 27 27 26 26 26 25 27 23 25 24 23 24 24 23 22 23 21 22 22 22 21 22 21 21 22 21 21 20 20 21 20 21 20 20 21 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 0D 5B 20 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 32 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 34 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 36 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 32 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 38 30 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 31 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 34 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 34 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 36 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 30 30 30 30 30 32 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 38 30 30 30 30 30 30 30 30 30 30 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 30 30 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 34 30 30 30 30 30 30 30 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 32 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 32 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 34 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 34 30 30 30 30 30 30 32 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 32 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 32 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 34 30 34 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 42 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 32 30 31 31 34 31 30 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 36 30 30 30 30 34 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 36 31 30 30 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 42 32 38 38 38 30 30 30 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 38 35 34 46 43 31 30 30 30 30 30 30 30 30 30 30 38 30 30 30 30 30 30 30 30 30 30 30 30 30 31 31 41 44 35 35 38 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 31 31 35 31 46 31 32 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 34 33 42 46 33 46 33 30 30 30 30 30 30 30 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 44 46 36 38 34 30 38 30 30 30 30 30 30 30 30 34 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 30 38 42 43 45 39 30 30 34 30 30 30 30 30 32 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 32 31 45 42 46 46 45 41 30 30 30 32 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 43 37 46 46 46 46 34 30 32 30 30 30 31 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 32 38 37 46 46 46 39 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 36 37 46 46 46 46 44 32 30 30 30 30 30 30 30 30 30 30 33 30 30 30 30 30 30 30 30 30 30 30 30 31 35 46 44 46 46 46 44 41 34 30 38 30 30 34 30 30 30 30 31 30 30 30 30 30 30 30 30 30 30 30 30 32 33 46 46 46 46 46 44 32 30 30 30 30 30 30 30 32 30 38 30 30 30 30 30 30 30 30 30 32 30 30 30 31 42 46 46 46 46 46 44 34 34 32 34 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 32 46 46 46 46 46 42 45 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 35 46 46 46 46 44 41 30 30 30 30 30 30 30 30 30 30 32 30 30 30 30 30 30 30 30 30 30 30 30 35 41 46 46 46 46 45 46 31 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 34 30 30 30 30 30 30 44 46 46 46 46 46 34 45 38 30 30 30 30 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 31 46 46 46 46 46 45 33 30 30 30 38 34 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 46 46 46 46 46 46 39 31 34 30 32 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 42 46 46 46 46 46 38 30 30 30 32 30 30 30 32 31 38 30 30 30 30 30 30 30 30 30 30 30 30 30 32 37 46 46 46 46 46 46 41 36 38 30 30 30 34 30 30 31 30 30 30 30 30 30 30 30 30 31 30 30 30 30 31 42 36 46 46 46 46 44 41 43 43 30 32 30 30 30 30 30 30 30 30 31 30 30 30 30 30 30 30 30 30 30 30 37 46 46 46 46 46 45 30 30 32 30 38 30 30 30 38 31 30 30 38 30 30 30 30 30 30 30 30 30 30 30 30 37 46 46 46 46 46 44 36 30 30 30 32 30 30 30 30 34 30 30 30 30 30 30 30 30 30 31 30 30 30 30 33 37 46 46 46 46 46 46 38 34 30 30 30 30 30 38 30 30 43 34 30 31 30 30 30 30 30 30 38 30 30 30 31 33 46 46 46 46 46 42 43 30 30 30 30 34 30 30 38 30 34 30 30 30 30 30 30 30 30 30 30 30 30 30 32 46 46 46 46 46 46 46 41 34 30 30 30 34 30 30 30 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 39 46 46 46 46 46 46 45 30 37 46 30 32 30 30 30 33 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 42 46 46 46 46 46 44 43 34 39 36 30 30 30 30 32 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 46 46 46 46 46 43 39 30 30 30 30 32 41 41 30 30 30 30 30 30 32 30 30 30 30 30 30 30 30 30 30 33 46 46 46 46 46 43 43 41 30 34 34 43 36 31 30 32 31 30 30 34 30 30 30 30 30 30 30 30 30 30 32 31 46 46 46 46 46 35 39 39 31 32 34 31 30 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 46 46 46 46 43 37 34 30 39 31 41 35 34 30 30 30 34 30 30 30 31 30 30 30 30 30 30 30 30 30 30 30 46 44 46 42 46 46 39 36 32 31 36 31 33 31 32 31 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 32 46 45 46 45 46 45 36 43 44 42 35 32 32 34 41 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 45 36 46 44 45 45 39 36 32 42 46 32 38 34 31 30 30 38 30 30 30 30 30 30 30 30 30 30 30 30 30 32 41 33 37 46 33 45 34 45 35 46 31 37 45 34 32 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 34 32 32 34 42 41 35 32 46 45 35 44 43 34 41 41 34 30 30 30 30 30 30 30 30 30 30 30 30 30 30 32 37 32 30 42 37 44 31 37 39 31 45 45 38 45 36 30 38 30 30 30 30 30 30 31 30 30 30 30 30 30 31 30 30 39 44 45 37 41 43 46 37 39 34 43 36 33 30 32 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 36 32 37 45 36 45 37 36 45 35 39 37 35 33 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 33 32 46 37 37 45 46 45 38 46 43 39 34 36 30 31 30 31 34 30 30 30 30 30 30 30 30 30 30 30 32 33 37 46 46 46 46 46 36 45 42 45 33 35 31 31 38 30 30 32 30 30 30 30 30 31 30 30 30 30 30 32 31 31 46 46 46 46 46 46 44 44 46 34 43 34 32 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 38 33 46 46 46 46 46 46 44 45 41 34 30 30 34 30 30 30 30 30 38 30 31 30 30 30 30 30 30 30 30 30 33 46 37 46 46 46 46 46 41 35 44 30 30 30 34 30 30 32 30 30 30 30 30 30 30 30 30 30 30 30 30 30 34 46 46 46 46 46 46 46 45 38 36 34 31 30 32 31 30 32 30 30 38 30 30 30 30 30 30 30 30 30 30 30 39 42 46 46 46 46 46 46 36 38 44 30 32 38 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 35 46 46 46 46 46 46 32 36 39 30 30 30 30 30 30 30 34 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 42 46 46 46 44 44 42 30 45 30 30 31 30 32 30 30 30 30 30 30 30 30 30 30 31 30 30 30 30 30 31 34 44 46 37 46 46 46 33 30 38 30 30 30 30 31 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 37 46 42 46 46 31 43 30 34 30 31 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 33 35 30 33 46 39 37 31 32 33 31 30 34 30 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 33 30 30 34 31 31 41 34 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 38 31 38 36 36 42 32 30 41 30 30 30 34 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 33 30 30 38 30 42 43 34 30 33 39 42 34 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 41 32 38 30 34 32 31 35 38 34 31 30 30 30 34 30 30 31 30 30 30 30 38 30 30 30 30 30 30 30 30 30 30 30 31 30 30 38 30 30 30 30 31 30 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 0D 5D 20 30 31 32 20 30 36 37 20 31 32 30 20 30 30 30 20 30 30 30 0D 5E 20 30 32 34 20 30 34 39 0D 5F 20 30 39 38 0D 60 20 30 31 32 20 30 36 37 20 31 32 30 0D 61 20 30 32 34 20 30 32 37 20 30 35 30 20 30 33 35 20 31 31 38 20 30 33 31 20 30 37 32 20 30 37 33 20 31 30 30 20 30 37 32 20 31 30 30 20 31 31 38 20 30 32 37 20 30 36 37 20 30 35 31 20 30 30 32 20 30 30 32 20 30 30 32 0D 66 20 20 20 20 20 4C 6D 6E 65 2D 20 20 20 20 20 0D 70 20 30 31 0D 71 20 31 39 2F 31 31 2F 31 34 20 31 30 68 33 39 6D 6E 34 39 73 0D 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0D 73 20 30 30 30 30 0D 75 20 31 30 32 20 20 20 20 20 20 20 20 20 20 20 20 20 0D 76 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0D 77 20 20 20 20 20 20 20 20 20 0D 78 20 20 20 20 0D 79 20 30 0D 7B 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0D 7C 20 20 20 20 20 20 20 20 20 20 20 0D 7D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0D 7F 20 41 42 58 20 20 20 20 20 20 20 20 20 20 20 20 20 0D 80 20 42 0D 83 20 41 42 58 0D 8B 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0D 90 20 30 31 33 38 32 20 30 31 33 30 37 20 30 31 33 39 36 20 30 31 33 37 37 20 30 31 34 32 31 20 30 31 34 36 33 20 30 31 33 31 38 20 30 31 33 39 33 20 30 31 33 37 37 20 30 31 33 39 39 20 30 31 34 34 34 20 30 31 33 34 35 20 30 38 33 34 37 20 30 38 32 37 37 0D 91 20 30 33 35 34 37 20 30 33 35 33 38 20 30 33 36 36 36 20 30 33 36 30 33 20 30 33 36 34 34 20 30 33 35 39 33 20 30 33 36 34 35 20 30 33 37 32 30 20 30 33 36 31 31 20 30 33 35 36 32 20 30 33 35 32 32 20 30 33 35 37 39 20 32 31 35 39 32 20 32 31 36 34 30 0D 92 20 30 32 30 31 35 20 30 32 30 31 35 20 30 32 30 31 35 20 30 30 30 30 30 20 30 30 30 30 30 20 30 30 30 30 30 20 30 30 30 30 30 20 30 30 30 30 30 20 30 30 30 30 30 20 30 30 30 30 30 20 30 30 30 30 30 20 30 30 30 30 30 20 30 32 30 31 35 20 30 33 36 33 36 0D 93 20 30 32 37 37 39 31 32 20 30 32 37 37 34 37 35 20 30 32 38 35 34 31 35 20 30 32 37 37 34 33 36 20 30 32 38 30 39 36 34 20 30 32 37 36 39 34 31 20 30 32 38 30 34 34 32 20 30 32 38 34 34 35 30 20 30 32 37 39 31 31 36 20 30 32 37 33 33 35 33 20 30 32 36 39 38 36 32 20 30 32 37 35 32 31 39 20 31 36 37 36 31 34 34 20 31 36 36 32 34 34 33 0D 94 20 30 32 36 31 31 20 30 32 36 36 37 20 30 32 37 31 38 20 30 32 36 34 30 20 30 32 36 36 37 20 30 32 35 39 31 20 30 32 36 32 33 20 30 32 36 36 34 20 30 32 36 30 34 20 30 32 35 39 31 20 30 32 36 32 31 20 30 32 36 34 34 20 31 35 38 39 35 20 31 35 37 34 38 0D 95 20 30 31 33 38 32 20 30 31 33 30 37 20 30 31 33 39 36 20 30 31 33 37 37 20 30 31 34 32 31 20 30 31 34 36 33 20 30 31 33 31 38 20 30 31 33 39 33 20 30 31 33 37 37 20 30 31 33 39 39 20 30 31 34 34 34 20 30 31 33 34 35 20 30 38 33 34 37 20 30 38 32 37 37 0D 96 20 30 36 30 33 38 20 30 30 30 39 33 0D A3 20 56 0D A4 20 31 0D A5 20 31 0D A6 20 31 0D A7 20 31 0D FD 20 38 38 62 38 0D 03\r\n";
	//死循环监听串口消息
	while (1)
	{
		//数据已经读取完到缓冲区了
		if (USART_RX_BUF_HASDATA == 1)
		{
			//得到此次接收到的数据长度
			u8 len = USART_RX_BUF_CUTINDEX;
			//printf("\r\nzlz-stm32:您发送的消息为:\r\n\r\n");
			//是否开始命令
			int cmdStart = 0;
			//开始命令的为
			int cmdStartIndex = 0;
			//当前命令
			u8 cmd;
			//循环发生数据
			for (u8 t = 0; t < len; t++)
			{
				//ENQ开始命令
				if (USART_RX_BUF[t] == ENQ)
				{
					cmdStart = 1;
					cmdStartIndex = t;
					continue;
				}
				//第2位命令
				if (cmdStart == 1)
				{
					cmd = USART_RX_BUF[t];
					cmdStart = 0;
				}
				//EOT开始命令
				if (USART_RX_BUF[t] == EOT && (t - cmdStartIndex) == 2)
				{
					//执行命令
					//开启LED0
					if (cmd == Key0OpenCmd)
					{
						LED0Open();
					}
					//关闭LED0
					else if (cmd == Key0CloseCmd)
					{
						LED0Close();
					}
					//开启LED1
					else if (cmd == Key1OpenCmd)
					{
						LED1Open();
					}
					//关闭LED1
					else if (cmd == Key1CloseCmd)
					{
						LED1Close();
					}
					//开启LED2
					else if (cmd == Key2OpenCmd)
					{
						LED2Open();
					}
					//关闭LED2
					else if (cmd == Key2CloseCmd)
					{
						LED2Close();
					}
					//开启LED3
					else if (cmd == Key3OpenCmd)
					{
						LED3Open();
					}
					//关闭LED3
					else if (cmd == Key3CloseCmd)
					{
						LED3Close();
					}
					//开启LED4
					else if (cmd == Key4OpenCmd)
					{
						LED4Open();
					}
					//关闭LED4
					else if (cmd == Key4CloseCmd)
					{
						LED4Close();
					}
					//开启LED5
					else if (cmd == Key5OpenCmd)
					{
						LED5Open();
					}
					//关闭LED5
					else if (cmd == Key5CloseCmd)
					{
						LED5Close();
					}
					//开启LED6
					else if (cmd == Key6OpenCmd)
					{
						LED6Open();
					}
					//关闭LED6
					else if (cmd == Key6CloseCmd)
					{
						LED6Close();
					}
					//开启LED7
					else if (cmd == Key7OpenCmd)
					{
						LED7Open();
					}
					//关闭LED7
					else if (cmd == Key7CloseCmd)
					{
						LED7Close();
					}
					//开启蜂鸣器
					else if (cmd == BeepOpenCmd)
					{
						BeepOpen();
					}
					//关闭蜂鸣器
					else if (cmd == BeepCloseCmd)
					{
						BeepClose();
					}
					printf("收到命令:");
					USART1->DR = cmd;
					//等待发送结束
					while ((USART1->SR & 0X40) == 0);
					printf("\r\n");
				}
			}
			//设置为读取完成状态
			USART_RX_BUF_HASDATA = 0;
		}
		//得到按键值
		int key = GetPressKey(0);
		//按了KEY
		if (key >= 0)
		{
			if (key == 0)
			{
				ShowHexChar('0');
				printf("KEY0\r\n");
			}
			else if (key == 1)
			{
				ShowHexChar('1');
				printf("KEY1\r\n");
			}
			else if (key == 2)
			{
				ShowHexChar('2');
				printf("KEY2\r\n");
			}
			else if (key == 3)
			{
				GPIOC->ODR |= 1 << 0;
				//响一声
				BeepOpen();
				//延迟
				delay_ms(100);
				BeepClose();
				//用用u8格式发送字符串
				U8Send(machData);
				delay_ms(10);
				//发送仪器数据
				//printf(machData);
				printf("zlz\r\n");
			}
		}
		times++;
		//延迟
		delay_ms(10);
	}
}

//把字符串按u8发送
//str:字符串
void U8Send(const char * str)
{
	int len=strlen(str);
	for(int i=0;i<len;i+=3)
	{
		if(i+1<len)
		{
			char one=str[i];
			char tow=str[i+1];
			u8 oneHex=HexToInt(one)*16+HexToInt(tow);
			USART1->DR = oneHex;
			//等待发送结束
			while ((USART1->SR & 0X40) == 0);
			ShowHexChar(one);
			ShowHexChar(tow);
			delay_ms(5);
		}
	}
}

//把十六进制字符串转换数组
//c:字符串
int HexToInt(char c)
{
	if(c=='0')
	{
		return 0;
	}
	else if(c=='1')
	{
		return 1;
	}
	else if(c=='2')
	{
		return 2;
	}
	else if(c=='3')
	{
		return 3;
	}
	else if(c=='4')
	{
		return 4;
	}
	else if(c=='5')
	{
		return 5;
	}
	else if(c=='6')
	{
		return 6;
	}
	else if(c=='7')
	{
		return 7;
	}
	else if(c=='8')
	{
		return 8;
	}
	else if(c=='9')
	{
		return 9;
	}
	else if(c=='A')
	{
		return 10;
	}
	else if(c=='B')
	{
		return 11;
	}
	else if(c=='C')
	{
		return 12;
	}
	else if(c=='D')
	{
		return 13;
	}
	else if(c=='E')
	{
		return 14;
	}
	else if(c=='F')
	{
		return 15;
	}
	return 16;
}


//是否已经初始化LED
int LED_IS_INIT = 0;

//是否已经初始化蜂鸣器
int BEEP_IS_INIT = 0;

//是否已经初始化显示器
int SMG_IS_INIT = 0;

//打开LED0
void LED0Open(void)
{
	//检查并初始化
	if (LED_IS_INIT == 0)
	{
		//初始化LED灯
		InitLedEnv();
		LED_IS_INIT = 1;
	}
	//1左移当前索引位数后取非再做且运算就是把当前位数的电平设置低位。比如i=2即LED2,00000100取非之后为11111011再和ODR的值与运算
	//第3位电平设置低,其他不变
	GPIOC->ODR &= ~(1 << 0);
}

//关闭LED0
void LED0Close(void)
{
	//检查并初始化
	if (LED_IS_INIT == 0)
	{
		//初始化LED灯
		InitLedEnv();
		LED_IS_INIT = 1;
	}
	//1左移当前索引位数再做或运算就是把当前位数的电平设置高位。比如i=2即LED2,ODR寄存器值和00000100或运算
	//第3位电平设置高,其他不变
	GPIOC->ODR |= 1 << 0;
}

//打开LED1
void LED1Open(void)
{
	//检查并初始化
	if (LED_IS_INIT == 0)
	{
		//初始化LED灯
		InitLedEnv();
		LED_IS_INIT = 1;
	}
	//1左移当前索引位数后取非再做且运算就是把当前位数的电平设置低位。比如i=2即LED2,00000100取非之后为11111011再和ODR的值与运算
	//第3位电平设置低,其他不变
	GPIOC->ODR &= ~(1 << 1);
}

//关闭LED1
void LED1Close(void)
{
	//检查并初始化
	if (LED_IS_INIT == 0)
	{
		//初始化LED灯
		InitLedEnv();
		LED_IS_INIT = 1;
	}
	//1左移当前索引位数再做或运算就是把当前位数的电平设置高位。比如i=2即LED2,ODR寄存器值和00000100或运算
	//第3位电平设置高,其他不变
	GPIOC->ODR |= 1 << 1;
}

//打开LED2
void LED2Open(void)
{
	//检查并初始化
	if (LED_IS_INIT == 0)
	{
		//初始化LED灯
		InitLedEnv();
		LED_IS_INIT = 1;
	}
	//1左移当前索引位数后取非再做且运算就是把当前位数的电平设置低位。比如i=2即LED2,00000100取非之后为11111011再和ODR的值与运算
	//第3位电平设置低,其他不变
	GPIOC->ODR &= ~(1 << 2);
}

//关闭LED2
void LED2Close(void)
{
	//检查并初始化
	if (LED_IS_INIT == 0)
	{
		//初始化LED灯
		InitLedEnv();
		LED_IS_INIT = 1;
	}
	//1左移当前索引位数再做或运算就是把当前位数的电平设置高位。比如i=2即LED2,ODR寄存器值和00000100或运算
	//第3位电平设置高,其他不变
	GPIOC->ODR |= 1 << 2;
}

//打开LED3
void LED3Open(void)
{
	//检查并初始化
	if (LED_IS_INIT == 0)
	{
		//初始化LED灯
		InitLedEnv();
		LED_IS_INIT = 1;
	}
	//1左移当前索引位数后取非再做且运算就是把当前位数的电平设置低位。比如i=2即LED2,00000100取非之后为11111011再和ODR的值与运算
	//第3位电平设置低,其他不变
	GPIOC->ODR &= ~(1 << 3);
}

//关闭LED3
void LED3Close(void)
{
	//检查并初始化
	if (LED_IS_INIT == 0)
	{
		//初始化LED灯
		InitLedEnv();
		LED_IS_INIT = 1;
	}
	//1左移当前索引位数再做或运算就是把当前位数的电平设置高位。比如i=2即LED2,ODR寄存器值和00000100或运算
	//第3位电平设置高,其他不变
	GPIOC->ODR |= 1 << 3;
}

//打开LED4
void LED4Open(void)
{
	//检查并初始化
	if (LED_IS_INIT == 0)
	{
		//初始化LED灯
		InitLedEnv();
		LED_IS_INIT = 1;
	}
	//1左移当前索引位数后取非再做且运算就是把当前位数的电平设置低位。比如i=2即LED2,00000100取非之后为11111011再和ODR的值与运算
	//第3位电平设置低,其他不变
	GPIOC->ODR &= ~(1 << 4);
}

//关闭LED4
void LED4Close(void)
{
	//检查并初始化
	if (LED_IS_INIT == 0)
	{
		//初始化LED灯
		InitLedEnv();
		LED_IS_INIT = 1;
	}
	//1左移当前索引位数再做或运算就是把当前位数的电平设置高位。比如i=2即LED2,ODR寄存器值和00000100或运算
	//第3位电平设置高,其他不变
	GPIOC->ODR |= 1 << 4;
}

//打开LED5
void LED5Open(void)
{
	//检查并初始化
	if (LED_IS_INIT == 0)
	{
		//初始化LED灯
		InitLedEnv();
		LED_IS_INIT = 1;
	}
	//1左移当前索引位数后取非再做且运算就是把当前位数的电平设置低位。比如i=2即LED2,00000100取非之后为11111011再和ODR的值与运算
	//第3位电平设置低,其他不变
	GPIOC->ODR &= ~(1 << 5);
}

//关闭LED5
void LED5Close(void)
{
	//检查并初始化
	if (LED_IS_INIT == 0)
	{
		//初始化LED灯
		InitLedEnv();
		LED_IS_INIT = 1;
	}
	//1左移当前索引位数再做或运算就是把当前位数的电平设置高位。比如i=2即LED2,ODR寄存器值和00000100或运算
	//第3位电平设置高,其他不变
	GPIOC->ODR |= 1 << 5;
}

//打开LED6
void LED6Open(void)
{
	//检查并初始化
	if (LED_IS_INIT == 0)
	{
		//初始化LED灯
		InitLedEnv();
		LED_IS_INIT = 1;
	}
	//1左移当前索引位数后取非再做且运算就是把当前位数的电平设置低位。比如i=2即LED2,00000100取非之后为11111011再和ODR的值与运算
	//第3位电平设置低,其他不变
	GPIOC->ODR &= ~(1 << 6);
}

//关闭LED6
void LED6Close(void)
{
	//检查并初始化
	if (LED_IS_INIT == 0)
	{
		//初始化LED灯
		InitLedEnv();
		LED_IS_INIT = 1;
	}
	//1左移当前索引位数再做或运算就是把当前位数的电平设置高位。比如i=2即LED2,ODR寄存器值和00000100或运算
	//第3位电平设置高,其他不变
	GPIOC->ODR |= 1 << 6;
}

//打开LED7
void LED7Open(void)
{
	//检查并初始化
	if (LED_IS_INIT == 0)
	{
		//初始化LED灯
		InitLedEnv();
		LED_IS_INIT = 1;
	}
	//1左移当前索引位数后取非再做且运算就是把当前位数的电平设置低位。比如i=2即LED2,00000100取非之后为11111011再和ODR的值与运算
	//第3位电平设置低,其他不变
	GPIOC->ODR &= ~(1 << 7);
}

//关闭LED7
void LED7Close(void)
{
	//检查并初始化
	if (LED_IS_INIT == 0)
	{
		//初始化LED灯
		InitLedEnv();
		LED_IS_INIT = 1;
	}
	//1左移当前索引位数再做或运算就是把当前位数的电平设置高位。比如i=2即LED2,ODR寄存器值和00000100或运算
	//第3位电平设置高,其他不变
	GPIOC->ODR |= 1 << 7;
}

//打开fengmingq
void BeepOpen(void)
{
	//检查并初始化
	if (BEEP_IS_INIT == 0)
	{
		//初始化蜂鸣器
		InitBeepEnv();
		BEEP_IS_INIT = 1;
	}
	//通过操作ODR寄存器设置9位置为0即低电平,响
	GPIOB->ODR &= ~(1 << 8);
}

//关闭蜂鸣器
void BeepClose(void)
{
	//检查并初始化
	if (BEEP_IS_INIT == 0)
	{
		//初始化蜂鸣器
		InitBeepEnv();
		BEEP_IS_INIT = 1;
	}
	//通过操作ODR寄存器设置9位置为1即高电平,不响
	GPIOB->ODR |= 1 << 8;
}

//显示十六进制串
//str:要显示的十六进制串
void ShowHexStr(const char * str)
{
	//检查并初始化
	if (SMG_IS_INIT == 0)
	{
		//初始化显示屏
		InitSMG();
		SMG_IS_INIT = 1;
	}
	int len=strlen(str);
	for(int i=0;i<len;i++)
	{
		char one=str[i];
		ShowHexChar(one);
		delay_ms(50); 
	}
}

//显示十六进制串
//c:要显示的十六进制字符
void ShowHexChar(const char c)
{
	//锁定缓存,锁定缓存时候先不绘制
	SMG_LOCK_BUF=1;
	for(int i=0;i<7;i++)
	{
		SMG_SHOW_BUF[i]=SMG_SHOW_BUF[i+1];
	}
	SMG_SHOW_BUF[7]=c;
	//释放缓存锁
	SMG_LOCK_BUF=0;
}






在这里插入图片描述

工程一点点庞大了,哈哈

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-04-15 00:16:35  更:2022-04-15 00:19:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:54:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码