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

蓝桥杯单片机_简化代码

1、按键

注:

static uint count = 0;是int类型,不要char类型

if (count > 2 && count < 100),不要写等于,以免和上面代码冲突

count = 0; 判断完后 再赋值清零

void loop(uchar *key) { static uchar now, last; static uint count = 0; // 核心:增加一个计数器 uchar t = 0; // --- 保持你原有的矩阵扫描逻辑 --- P42=1;P44=1;P3=0xff;P30=0; if(P44==0) t=7; else if(P42==0) t=11; else if(P35==0) t=15; else if(P34==0) t=19; P42=1;P44=1;P3=0xff;P31=0; if(P44==0) t=6; else if(P42==0) t=10; else if(P35==0) t=14; else if(P34==0) t=18; P42=1;P44=1;P3=0xff;P32=0; if(P44==0) t=5; else if(P42==0) t=9; else if(P35==0) t=13; else if(P34==0) t=17; P42=1;P44=1;P3=0xff;P33=0; if(P44==0) t=4; else if(P42==0) t=8; else if(P35==0) t=12; else if(P34==0) t=16; // --- 修改后的逻辑处理 --- last = now; now = t; if (now) // 按键正被按下 { count++; // 只要按着,计数器就一直加 if (count == 100) // 【长按触发】:在还没松开时,如果计数值到了100(约1秒) *key = now + 100; // 给键值加100,用来区分长按。比如长按S4,返回104 } else // now == 0,说明按键松开了 { if (count > 2 && count < 100) // 【短按触发】:松开瞬间,如果计数器此之间(防抖非长按) *key = last; // 返回原始键值,比如短按S4,返回4 count = 0; // 只要松开,计数器一定要清零 } }

2、串口发送

//在main函数中 #include <stdio.h> char putchar(char c) { SBUF=c; while(TI==0); TI=0; return c; } void main() { printf("Temp: %bd,%bd C \n", 25, 5);//注意是%bd Delay500ms(); }

3、超声波

开始之前记得清0

TL1 = 0; //设置定时初始值
TH1 = 0; //设置定时初始值

void Send_Wave(void) { unsigned char i; for(i = 0; i < 8; i++) // 发送8个脉冲 { TX = 1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX = 0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } } while(1) { Delay500ms(); TL1 = 0; //设置定时初始值 TH1 = 0; //设置定时初始值 Send_Wave(); TR1=1; while(TF1==0 && RX==1); TR1=0; if(TF1) { TF1=0; juli=999; } else { juli=(TH1<<8)|TL1;juli*=0.017; TH1=0;TL1=0; } buff[0]=juli/100; buff[1]=juli/10%10; buff[2]=juli%10; }

4、ADC_DAC

实现ADC的采集和DAC的输出

unsigned char ADC_DAC(char chan,char dac) { unsigned char adc=0; EA=0; I2CStart(); I2CSendByte(0x90);I2CWaitAck(); I2CSendByte(0x40+chan);I2CWaitAck(); I2CSendByte(dac);I2CWaitAck(); I2CStop(); I2CStart(); I2CSendByte(0x91);I2CWaitAck(); adc=I2CReceiveByte(); I2CSendAck(1); I2CStop(); EA=1; return adc; }
http://www.jsqmd.com/news/596004/

相关文章:

  • Qwen3-ASR-1.7B镜像部署:容器健康检查与自动重启机制配置指南
  • 纯本地运行!LiuJuan Z-Image Generator隐私安全,生成速度实测
  • 本地语音合成技术全解析:从架构设计到行业落地
  • 2026长沙普拉提机构评测,精选优质机构分享,行业内比较好的普拉提推荐推荐企业引领行业技术新高度 - 品牌推荐师
  • 手柄映射工具完全指南:解决跨平台控制器兼容性难题
  • Wallpaper Engine创意工坊下载器:告别复杂命令行,轻松获取精美动态壁纸
  • 终极SQL检查指南:如何用sql-lint避免99%的SQL错误
  • OFA视觉蕴含模型保姆级教程:自定义置信度阈值滑块
  • Qwen3-ForcedAligner-0.6B效果展示:电话通话录音→说话人分离+时间戳标注
  • REFramework:RE引擎游戏的终极模组框架和VR支持解决方案
  • Topit:重新定义macOS窗口管理,解锁多任务处理新维度
  • RVC训练避坑指南:logs与weights目录文件结构深度解析
  • REFramework:破解RE引擎游戏限制的终极解决方案
  • coze-loop实际作品:AI生成的优化说明比资深工程师Code Review更详尽
  • Qwen-Image-2512-Pixel-Art-LoRA 实现MCP(Model Context Protocol)服务端
  • Matlab绘图小技巧:如何用sgtitle为深色背景的subplot添加醒目总标题
  • leetcode刷题-2026-3-38
  • SQL处理复杂分组逻辑的替代方案_使用CTE分步计算
  • Qwen1.5-1.8B GPTQ从零开始:C语言基础之指针概念讲解
  • D3keyHelper终极指南:5分钟学会暗黑3技能宏配置,刷图效率翻倍!
  • WorkshopDL:跨平台创意内容获取3大突破,游戏玩家的平台壁垒解决方案
  • 6个强力控制技巧:AlienFX Tools让你完全掌控Alienware设备
  • Blender USDZ插件完整指南:3个策略让您的AR模型达到商业级质量
  • OFA-Image-Caption模型解析:从卷积神经网络到跨模态理解的架构揭秘
  • CSS如何用Flex布局模拟表格的外观
  • 1 4.4 调整文件资源管理器的打开界面(快速访问 → 此电脑;Win+E 生效)
  • YOLOv11损失函数原理与源码解读:从调参血泪史到源码级优化
  • Spring AI Alibaba实战:5分钟搞定通义千问流式API接入(附完整代码)
  • 次氯酸钠发生器怎么选?2026年定制厂家横向评测,市面上次氯酸钠发生器怎么选择永兴致远满足多元需求 - 品牌推荐师
  • 一键开启千问3.5-9B视觉能力:快速体验图片上传提问,简单实用