C语言位移、不同长度赋值操作
移位问题向下函数传入0x00800000和0x00400000分别返回什么? 这还用想,当然返回原值了。然而实际却是返回了0xff800000和0x00400000 为什么0x00800000会返回0xff800000,而0x00400000返回了原值? 先看程序运行过程,首先temp先左移了八位,变成0x80000000,这是没有问题的,再右移八位后却变成了0xff800000。这是因为c语言对无符号类型数据的移位均为空位补零,但是对于有符号类型的右移却根据最高位决定,最高位为1则补1,反之则补零,所以0x00800000变换为0xff800000,而0x00400000返回原数值,但将数据类型改为无符号时则无此规律。 不同类型赋值问题已知cannle为u32,p_Temp为s32 分析下列赋值过程 首先u32和s32长度等长,区别在于最高位是否有符号位,这种赋值二进制数值不变,但是在打印时候按不同类型解析。 其次,将长值赋值给短值,截取低位,然后再赋给短值(即丢弃长值中高于短值最高位的所有值) 其实上述过程只是将int 32类型拆分开存储。发送给上位机后,上位机可将其视为...
IKBC C104加灯
之前买的机械键盘没带背光,无奈盲打不熟练,晚上码字经常出错,果断决定加灯 拆开键盘发现C104的PCB上预留了灯位,就是没焊,也没有限流电阻。特么右上角还有四个空轴位,特么不就是F108的阉割版么?接上示波器发现特么居然还有PWM信号输出,买包LED直接焊上就是了 预留灯位 PWM驱动信号 准备材料如下:LED一包(注意正向压降、导通电流),电池(测试LED)、焊锡、吸锡器、螺丝刀、拔键器、焊锡膏、松香、镊子、斜口钳、烙铁。(其实一半都没用上 工具全家福 注意烙铁选功率较大的或者焊台,敷铜板导热快容易让烙铁温度不够。 拆开,加灯,卡口设计,用卡片撬开。注意焊的时候LED正负极以及引脚短路问题,建议焊一排试一排。 焊完时 焊好装回去就是 装好后效果 背光控制快捷键 Fn+1 全 亮 Fn+2 贪 吃 蛇 Fn+3 按 下 按 键 点 亮 Fn+4 涟 漪 Fn+5 两 侧 律 动 Fn+6 全 键 盘 呼 吸 灯 Fn+7 高亮Esc Q W E R ↑↓←→ Fn+8 高 亮 部 分 键 Fn+↑ 亮 度 + Fn+↓ 亮 度...
MLX90614 红外测温模块使用(待续
非接触式红外测温模块,贵的一批屌照 管脚定义 MLX90614管脚定义 就电源线和IIC一共四根线,接线简单。 RAM和EEPROM32*16bitEEPROM,部分可写入,所有均可读取。0x04可设置物体发射率 即物理发射率取值四舍五入后最接近物体的值,默认为1(即0xFFFF).写入时需要先清零再写入 32*16bitRAM 部分可读,Ta为环境温度,Tobj1为目标温度,Tobj2在部分型号中不支持,值和Ta一致 温度干扰与补偿 只有当传感器在热平衡且恒温状态下测得的温度才是准确的,需要注意旁边是否有热源(电路发热、被测物体过近),而我这里使用的MLX90614DCI可以设置内部测量热梯度并补偿测量的温度,降低干扰。(老老实实远离热源 测温的准确性依赖于VDD,VDD对环境温度和物体温度的典型依赖性为0.6°C / V。 Ta对VDD的依赖性(实际To和Ta一致) 由于出厂时校准时VDD=3V,则为了补偿该误差,我们测量电源电压,并通过应用以下公式补偿结果: 测量角度影响测量温度 几种规格的对应视野角度 MLX90614DCI对应视野的角度...
分析空调遥控器编码
上一步中获取了遥控器的红外数据,接下来就需要解析了 观察这126组数据,显然72组数据后的数据电平时钟不变,时间也是满的(9637us)。说明该遥控器数据位共72位。 开机位接下来用控制变量法获取数据解析,首先是开关机位。分别获得 制冷 25度 自动风 摆风 下的开关机码。建议将打印出来的数据导入excel分析比较方便。将前后电平时间相减,差值小于100的认为是系统误差,大于的认为是数据差。很明显第9位和65位数据差值大于1000 。二者应该只有一个位控制开关机,剩下一个数据区别应该为检验和区别,正常人都会把校验和放在最后,所以大胆预测第九位控制开关机 ,65位及附近数据为检验位。 数据格式上面推算出来了开机位,注意数据格式 大胆猜测 起始信号为4100us的高电平和450us左右的低电平组成 数据信号的第二个电平为0 且时间为450us左右 ,而第一个电平为高电平时间为420us或1550us,对应的应该为数据0 和1 (关于这里的推测,联系上面的开机位,正常人都会把开机设为1,关机设为0),这样大致的数据格式推测出来了,可能有错误,继续用控制变量法获取数据分析,有错再改。...
ESP32配置RMT接收功能
懒癌晚期,一个月没更了(逃 一 什么是RMT?能干啥?RMT(Remote Control)即红外遥控,通过红外传输数据。学单片机的时候,不管是51还是stm32,肯定有个红外遥控。而且做得都是接收数据解析,想要控制空调之类的家电要干的事居多 二 首先是怎么通过红外传输数据数字信号->模拟信号->红外光线->模拟信号->数字信号 主要的工作就是把数字信号调制成红外信号再将红外信号解调成数字信号。最简单的当然是直接把灯亮灭当0/1,但是如何排除干扰项呢?显然这是不行的。一般而言,红外传输是先把数据转化为NEC格式的编码或者PPM编码,之后再将数据加载到载波信号(一般为38KHz)上完成调制过程。 调制过程 三 具体的API调用信号调制过程可以使用定时器+PWM信号完成,本憨批一开始就是这么做的…后来发现乐鑫的ESP32提供了RMT功能的API:官方API参考 初始化通过初始化结构体 rmt_config_t ,再调用函数_rmt_config(_)和_rmt_driver_install()_完成配置,需要注意的是esp32默认的内存块只能存下6...
树莓派部署Wordpress博客
首先安装Apache 1sudo apt install apache2 -y 安装完成可以在localhost打开,如果是无桌面版的,同一局域网的设备直接访问树莓派ip地址。安装成功则可以在浏览器内看到下列内容 接下来是安装数据库,第一个坑来了,很多老教程是装MySQL,不好意思,新树莓派系统木得,需要换成MriaDB 1sudo apt-get install mariadb-server 中间问你装不装,填个y,回车。完成后通过下个命令连接mriaDB 1sudo mysql 出现下图即为成功连接到MariaDB 接着需要给root用户修改密码(自行替换password) 12345use mysql; UPDATE user SET password=password('password') WHERE user='root'; UPDATE user SET plugin='mysql_native_password' WHERE user = 'root'; flush pr...
Proteus制作元件
首先,fuck c**n上的复读机 proteus仿真时,在找74ls183芯片时发现,芯片预览左上角提示没有模型,这样的芯片是没法仿真的,仿真直接报错 作业指名道姓要用proteus,换软件仿真是不可能的了,只能自己造轮,自己来画了。 首先把元件画出来,当然,库里有的但是没有仿真模型的可以跳过这一步。 首先是二维绘图模式画出元件形状,见1。之后在管脚模式添加管脚,和AD一样注意十字对外,引脚有普通引脚(DEFAULT)、低电平有效引脚(INVERT)、上升沿有效的时钟输入引脚(POSCLK)、下降沿有效的时钟输入引脚(NEGCLK)、短引脚(SHORT)、总线(BUS)等6种形式,放上引脚后注意设置 注意设置管脚属性,1:管脚名;2:管脚标号;3管脚是否隐藏,取消勾选隐藏,默认勾选;4选择引脚属性 接下来就是元件入库,大方框覆盖整个绘画的元件,右击选择制作元件,如果是库里面直接拖出来的直接右击元件->制作元件,后方步骤两者完全一样 设置元件名和标号前缀,然后下一步 选择封装,随便选吧,反正我也不画pcb 然后新建,选择MODEFILE,之后一路下一步,完成。...
DS18B20管脚该怎么看?
一说测温模块,首先想到的就是大名鼎鼎的DS18B20,只需两根电源线和一根信号线就行,芯片主要有三种封装:三条腿的TO-92、六腿的TSOC、八条腿的SOIC-8_150mil。 主要的三种封装 后面两种好说,问题在于TO-92,自己焊万用板或PCB库时就要区分引脚,DQ在中间不用说,but,到底哪个是VCC?哪个是GND? 这还不简单?看图说话,曲面对着自己,从左到右依次GND、DQ、VCC。于是我便烧了个18B20祭天了………. 难道datasheet里是错的?紧接着我瞅到了这么个单词 底部视角…… 特么图就不能画成下面这样的吗? 图片来源:TO-92-Wikipedia
树莓派开箱配置
先点亮再说首先需要给树莓派装系统,需要系统镜像和镜像烧录工具。官方镜像下载,官方提供了三个版本的镜像:无桌面版(Lite)、桌面版和全家桶版(逃 版本按需选择。镜像烧录工具我选Etcher,其它的也行 打开Etcher,选择好镜像和磁盘然后点Flash!烧写开始,注意中间弹出的格式化叉掉,否则导致镜像烧入失败 烧写 烧写完成 有屏幕的同学可以直接把tf卡插上树莓派开机了。当然,穷逼我没有屏幕, 只能用ssh代替了,打开tf卡,在boot目录新建文本文件,重命名为ssh(删除文件拓展名,无法修改文件拓展名的请在文件管理中设置显示拓展名) 然后把TF卡插入树莓派,用网线连接路由器,擦腚,楷机,轻松点亮。这时候可以在路由器的管理页面看到树莓派的内网地址了。接下来需要用到ssh连接的工具,我用的是putty,输入ip地址连接。 在弹出的弹窗选择是,输入账号密码登陆(LINUX环境下不显示密码,但是可以回车删除等操作)默认账号:pi 密码:raspberry 登陆成功 接下来就开始树莓派的配置了首先换源,由于某些你懂的原因,国外源又慢又容易断,所以换成国内的镜像源。在换源之前一定...
stm32连接到阿里云——MQTT协议移植
首先勾选MQTTPacket以将包添加至工程 (没有安装的->MDK拓展包下载) 接下来需要封装四个函数 (我用ESP8266实现TCP连接,请酌情更改): int transport_sendPacketBuffer(unsigned char``* buf, int buflen); TCP协议发送数据 int transport_getdata(unsigned char``* buf, int count); 获取TCP接收到的数据(如果不用分析接收到的数据可以不管) int transport_open(``void``); 打开网络接口(建立一个TCP连接) int transport_close(``void``); 关闭网络接口 接下来就是这些函数调用了,库中调用的函数都在MQTTPacket.h文件中 构造连接报文发送函数 构造订阅函数 消息发布函数 接下来在你的主函数中调用这些函数:连接到服务器->发送连接报文->订阅->…… 此时可以看看阿里云物联网控制台有没有显示产品在线,不在线请检查上述步骤 MCU和云连接已经完成了,接下来...