当前位置: 首页 > news >正文

建设信用卡申请官方网站网站开发制作

建设信用卡申请官方网站,网站开发制作,青岛seo关键词优化公司,wordpress微信底部导航第十三届蓝桥杯嵌入式省赛题目相对于第十二届较为简单#xff0c;没有那么多串口的数据处理以及判断#xff01; 第十三届省赛主要是制作一个可由串口设置密码的密码锁。本实验中#xff0c;我们将用到LED模块、按键模块、串口模块、定时器的PWM模块以及官方会提供源码的LC…第十三届蓝桥杯嵌入式省赛题目相对于第十二届较为简单没有那么多串口的数据处理以及判断 第十三届省赛主要是制作一个可由串口设置密码的密码锁。本实验中我们将用到LED模块、按键模块、串口模块、定时器的PWM模块以及官方会提供源码的LCD模块。 文末有小编写的代码 一、CubeMX配置 1.使能外部高速时钟 2.配置时钟树 3.GPIO输出 4.GPIO输入 5. TIM定时器 5.1 TIM2输出PWM脉冲 设置默认Pluse为50即占空比为50% 5.2 TIM4实现定时5s 5.3 TIM3定时器实现微妙(us)延迟 6.USART(通信) USART串口接收数据我使用两种方法实现大家选取其中一种即可 1.定长接收数据 2不定长接收数据DMA方式 此种方法的核心是空闲中断 二、代码实现 2.1 main函数实现 int main(void) {/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM2_Init();MX_USART1_UART_Init();MX_TIM3_Init();MX_TIM4_Init();MX_TIM1_Init();/* USER CODE BEGIN 2 */LCD_Init();LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);HAL_TIM_PWM_Start(htim2,TIM_CHANNEL_2);led(1,0);led(2,0);led(3,0);led(4,0);led(5,0);led(6,0);led(7,0);led(8,0);HAL_UART_Receive_IT(huart1, buff, 7);HAL_TIM_Base_Start_IT(htim4);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */Key_handle();lcd();if(key4_count3led_flag0){led(2,1);delay_us(50000);delay_us(50000);led(2,0);delay_us(50000);delay_us(50000);}}/* USER CODE END 3 */ }2.2 lcd函数实现 void lcd() {if(pass_flag1){show_output(); if(systick-PWMTick5000){led(1,0);pwm1();first;first_flag-1;second;second_flag-1;third;third_flag-1;pass_flag0;LCD_Clear(Black);} }if(pass_flag0){show_input(); } }void show_input() {LCD_DisplayStringLine(Line1, PSD );sprintf(B1, B1:%c,first);LCD_DisplayStringLine(Line3,B1);sprintf(B2, B2:%c,second);LCD_DisplayStringLine(Line4,B2);sprintf(B3, B3:%c,third);LCD_DisplayStringLine(Line5,B3); }char pl[50]; char zkb[50]; int c_pl; int c_ARR; int c_zkb; int c_pluse; void show_output() {LCD_DisplayStringLine(Line1, STA );c_ARR__HAL_TIM_GET_AUTORELOAD(htim2);c_pl100000/(c_ARR1);sprintf(pl, F:%dHz,c_pl);LCD_DisplayStringLine(Line3,pl);c_pluse__HAL_TIM_GET_COMPARE(htim2,TIM_CHANNEL_2);c_zkbc_pluse*100/(c_ARR1);sprintf(zkb, S:%d%%,c_zkb);LCD_DisplayStringLine(Line4,zkb); }2.3 按键扫描功能实现 int Keynum() {int key0;if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0)0){HAL_Delay(5);if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0)0){key1;LCD_Clear(Black);}while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0)0);}if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1)0){HAL_Delay(5);if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1)0){key2;LCD_Clear(Black);}while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1)0);}if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2)0){HAL_Delay(5);if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2)0){key3;LCD_Clear(Black);}while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2)0);}if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0)0){HAL_Delay(5);if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0)0){key4;LCD_Clear(Black);}while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0)0);}return key; }char first; int first_flag-1;char second; int second_flag-1;char third; int third_flag-1;char pass11; char pass22; char pass33; int pass_flag0;int lcd_flag0;int ledTick0; void Key_handle() {int keynumKeynum();if(keynum1){first_flag;switch(first_flag%10){case 0:first0;break;case 1:first1;break;case 2:first2;break;case 3:first3;break;case 4:first4;break;case 5:first5;break;case 6:first6;break;case 7:first7;break;case 8:first8;break;case 9:first9;break;}}if(keynum2){second_flag;switch(second_flag%10){case 0:second0;break;case 1:second1;break;case 2:second2;break;case 3:second3;break;case 4:second4;break;case 5:second5;break;case 6:second6;break;case 7:second7;break;case 8:second8;break;case 9:second9;break;}}if(keynum3){third_flag;switch(third_flag%10){case 0:third0;break;case 1:third1;break;case 2:third2;break;case 3:third3;break;case 4:third4;break;case 5:third5;break;case 6:third6;break;case 7:third7;break;case 8:third8;break;case 9:third9;break;}}if(keynum4){led_flag0;key4_count;if(pass1firstpass2secondpass3third){key4_count0;pass_flag1;pwm2();led(1,1);//定时器中断在回调函数中清屏函数不起作用 // __HAL_TIM_CLEAR_FLAG(htim1,TIM_FLAG_UPDATE); // HAL_TIM_Base_Start_IT(htim1);PWMTicksystick; }else{pass_flag0;first;first_flag-1;second;second_flag-1;third;third_flag-1;}if(key4_count3){__HAL_TIM_CLEAR_FLAG(htim4,TIM_FLAG_UPDATE);HAL_TIM_Base_Start_IT(htim4);}} }2.4 PWM脉冲转换 void pwm2() {__HAL_TIM_SET_AUTORELOAD(htim2,50-1);__HAL_TIM_SET_COMPARE(htim2,TIM_CHANNEL_2,5); }//方波 void pwm1() {__HAL_TIM_SET_AUTORELOAD(htim2,100-1);__HAL_TIM_SET_COMPARE(htim2,TIM_CHANNEL_2,50); } 2.5 某种状态持续5s的两种操作方法 1.利用系统滴答计时器 本实验中 实现输出2KHz 10%占空比的脉冲信号持续5秒钟切换为 1KHz 方波信号输出的功能 使用的是系统滴答计时器。 2.TIM定时器定时5s 本实验中实现 指示灯 LD2 以 0.1秒为间隔亮、灭闪烁报警5 秒后熄灭的功能使用的是TIM4定时器定时5s。 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {if(htim-InstanceTIM4){led_flag1;HAL_TIM_Base_Stop_IT(htim4); } }2.6 延迟100ms delay_us函数实现定时微妙us void delay_us(int delay) {HAL_TIM_Base_Start(htim3); // 启动定时器__HAL_TIM_SET_COUNTER(htim3, 0); // 重置计数器while (__HAL_TIM_GET_COUNTER(htim3) delay){}HAL_TIM_Base_Stop(htim3); // 停止定时器 }delay_us(50000)代表延迟50000us即50ms但因为定时器最大计数值为65535如果delay_us(100000)就超过了定时器最大计数值所以可以采取delay_us(50000)两次来实现100ms定时 2.7 USART串口与修改密码 USART串口接收数据我使用两种方法实现大家选取其中一种即可 1.接收固定长度数据 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {if(buff[0]pass1buff[1]pass2buff[2]buff[3]-judge()1){pass1buff[4];pass2buff[5];pass3buff[6];HAL_UART_Transmit(huart1,(unsigned char *)Success\r\n, 9, 50);}else{HAL_UART_Transmit(huart1,(unsigned char *)error\r\n, 7, 50);}HAL_UART_Receive_IT(huart1, buff, 7); }int judge() {for(int i0;i6;i){if((buff[i]0)||(buff[i]9))//接收数据不为阿拉伯数字时不合法return 0;else{return 1;}} }2.接收不定长数据DMA方式 此种方式使用的是空闲中断 串口空闲帧中断定义空闲中断(IDLE)俗称帧中断空闲中断是检测到有数据被接收后总线上在一个字节的时间内没有再接收到数据的时候发生的。当串口发送数据时是将一帧数据中的字符一个一个连续发送出的两个字符间隔时间非常短产生不了空闲正常情况下是第一帧数据接收毕到第二帧数据开始接收期间存在一个空闲状态检测到此空闲状态后产生空闲空暇中断。优点空闲中断的优点在于省去了帧头帧尾的检测进入中断程序即意味着已经接收到一组完整数据需及时对数据处理或将数据转移出缓冲区即可。 在mian函数中while1之前增加两行代码 HAL_UART_Receive_DMA(huart1,rx_buffer,100); // 开启DMA接收__HAL_UART_ENABLE_IT(huart1,UART_IT_IDLE); // 开启串口的空闲中断中断回调函数 我是写在USART1_IRQHandler(void)这个里面也可以直接写在由hal库提供的函数 HAL_UART_IRQHandler(huart1)里面如果写在HAL_UART_IRQHandler(里面的话得找个地方放这个函数所以直接在stm32f4xx_it.c中的这个函数 USART1_IRQHandler(void)里写省事一点 最后,小编在此处附上获取我的源码链接第十三届蓝桥杯嵌入式真题
http://www.tj-hxxt.cn/news/216323.html

相关文章:

  • 网站开发实训心得800字广东 网站经营性备案
  • 济南外贸网站建设公司排名常州装修网站建设公司
  • 网站搭建h5是什么网络装修平台哪家最好
  • 做国际网站有用网站锚文本的内链建设
  • 安庆网站建设公司简网站推广营销技巧
  • 学校网站建设市场分析最好的网站建设组织
  • 网站常用的优化方法泰安信息平台体温
  • 北京网站开发飞沐网站改版注意事项
  • 网站运营推广该如何做县级网站建设培训会
  • 百度云建站网站建设长治做网站
  • 知乎有趣的网站分析网站建设前期的seo准备工作
  • 县级门户网站建设的报告网站建设销售总结
  • 店铺推广和网站优化一起做东营网站建设seo
  • vs做网站图片明明在文件夹里却找不到wordpress 主题教程 水煮鱼
  • 做k12网站效果图设计费收费标准
  • asp网站建设实验设计企业信息平台网站官网
  • asp网站手机模版金普新区城乡建设局网站
  • 中国建设银行陕西分行官方网站嵌入式软件开发培训班
  • 长春新建火车站企业网站建设的必要性和重要性
  • 网站备案还是域名备案网站版面的图文是怎么做的
  • wordpress和站点中国生态文明建设的意义和目标
  • 旅行社网站开发 论文如何取消危险网站提示
  • 太原seo网站排名杭州网站推广宣传
  • it网站建设方案中卫网站网站建设
  • 礼品网站实例wordpress英文主题适合小白用吗
  • 网站建设规划与管理 试卷太原市建设北路小学网站
  • 乐清网站制作公司招聘校园推广方案经典范文
  • 网站内容建设需要注意哪些问题网站开发图片加载过慢如何优化
  • 培训网站建设多少钱上首页的seo关键词优化
  • 做网站需要的图片大小wordpress下载地址插件