0
点赞
收藏
分享

微信扫一扫

记录11-24的32笔记

任务一

# 任务1
int main(void){
	uint8_t letter;
	usart1_init();
	while(1){
		for(letter = 'a';letter <= 'z';letter++){
			while(!(USART1->SR & USART_SR_TXE)); // while - uart fason wanchen , juxu next
			// while(!USART_GetFlagStatus(USART1,USART_FLAG_TXE)); // and yes
			// delay();
			USART_SendData(USART1,letter);		
		}
	}
}


任务二

//任务2
//int main(void){
//	usart1_init();
//	while(1){
//		  while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE) == RESET); // stm32的标志位(寄存器)没有接收到数据的时候置零,一直等待数据的到来(while循环)
//		  uint8_t ch = USART_ReceiveData(USART1); // 接受的字符
//			// 判断
//			if(ch>=97 && ch<=122)
//			{
//		  		ch -= 32;
//				USART_SendData(USART1,ch);		
//			}
//			else{USART_SendData(USART1,ch);}
//	}
//}



任务三

解题思路:

/*
首先接收一个字符,然后判断这个字符是否为数字字符。
如果是数字字符,则执行主功能模块;
如果不是数字字符,则直接将该字符发送回给上位机。
在主功能模块中,当接收到三个数字字符时,计算它们的整数值,
并将这个整数值转换为字符数组,最后将字符数组发送回给上位机。
*/

解答代码:

int  arr_int[3] = {0,0,0};					// 存储一位一位的整数(int数组)
char arr_char[4] = {'a','b','c','\0'};  // 存储接收到的字符整数(char数组)
int  num , count , flag = 0;			
// num存储返回和计算和的整数值,count记录存储了多少个整数或者说几次(为3就赋值为0),flag来判断接收了字符整数没

int main(void){
	usart1_init(); // 串口1初始化函数
	while(1){
		while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE) == RESET);  // 等待接收数据,标志位置0还是置1。
		uint8_t ch = USART_ReceiveData(USART1); // 接受的字符
		// 判断接收的字符是不是字符整数,如果是的话就执行主功能,不是则直接输出该字符回给上位机
		if(ch<=48 || ch>=57){		
			USART_SendData(USART1, ch);
		}
		else{ // 主功能模块
			flag = 1; // flag=1代表接收到了字符整数,为下面count==3时做铺垫。
			if(count == 3 ){
				count = 0; // 置0
				num = arr_int[2]*10*10 + arr_int[1]*10 + arr_int[0] + 55; // 计算返回的整数值,因为接收的数据和正常的是相反的,所以这里数组也是。
				USART_SendData(USART1,1);
				arr_char[0] = (char)num/100;     // 百位
				arr_char[1] = (char)(num%10)/10; // 十位
				arr_char[2] = (char)num%10;      // 个位
				for(int i =0;i<3;i++) USART_SendData(USART1,arr_char[i]); // 依次返回字符整数数据给上位机显示。
				if(flag == 1){
					// 这里和上面的flag=1相呼应,因为先判断了count==3的情况,万一这个时候也输入了一个整数呢?所以就在这里加上个判断来赋值
					arr_int[count] = ch - '0'; // 每一位都减去字符0就可以从字符转为十进制本身数值.
					count ++; // count次数加一	
				}
			}
			else{
				arr_int[count] = (int)ch - '0'; // 每一位都减去字符0就可以从字符转为十进制本身数值.
				count ++; // count次数加一	
			}
		}
	}
}

有问题:



举报

相关推荐

0 条评论