分类目录:摩登3官网注册

摩登3注册网站_你曾是少年,直到拿起“电烙铁”……

图1 手工焊接贴片元件所用到常用工具 1. 电烙铁 手工焊接元件,这个肯定是不可少了。在这里向大家推荐烙铁头比较尖的那种,因为在焊接管脚密集的贴片芯片的时候,能够准确方便的对某一个或某几个管脚进行焊接(PS:早期我以为是这样的,后来熟了之后发现刀头的更好使!)。 一把可调恒温电烙铁就是你的不二选择,最好可以带个数显(可调温且能稳定温度,有单手柄调温型和焊台两种)。 需要说明的是,上面的内热式和外热式通常是没有电源开关,插上电就加热,需要冷却就要断电才可以。 俗话说,好马得配好鞍。那么烙铁头就是这匹马(烙铁)的鞍了。 烙铁头的选用是要根据被焊接物体的接触面来定。 比如说,对于普通插件元件,我们多选用马蹄头(接触面大);贴片小元件可用尖头或弯尖头(密集类元件焊接);对常规芯片可采用刀头(方便拖焊)。 当然,更高级的DIY玩法就是根据自己的需要打磨出专属于自己的独特形状的烙铁头了。 新买的烙铁呢,我们还不能拿来就用,要先对新烙铁进行第一次上锡处理。 2. 焊锡丝 好的焊锡丝对贴片焊接也很重要,如果条件允许,在焊接贴片元件的时候,尽可能的使用细的焊锡丝,这样容易控制给锡量,从而不用浪费焊锡和吸锡的麻烦。 中文名称:焊锡丝、焊锡线、锡线、锡丝,英文名称:solderwire,焊锡丝是由锡合金和助剂两部分组成,合金成份分为锡铅、无铅助剂均匀灌注到锡合金中间部位。 焊锡丝种类不同助剂也就不同,助剂部分是提高焊锡丝在焊接过程中的辅热传导,去除氧化,降低被焊接材质表面张力,去除被焊接材质表面油污,增大焊接面积。焊锡丝的特质是具有一定的长度与直径的锡合金丝,在电子原器件的焊接中可与电烙铁或激光配合使用。    焊锡丝有铅和无铅的区别: 1、焊锡丝含铅和不含铅的区别只是含量的区别。 2、含铅的焊锡丝需人为的加入铅,目前已知的焊锡最佳配比为锡铅焊锡丝(国标:锡含量63%,铅含量37%)。 3、无铅焊锡丝也含极少的铅,目前没有完全纯净的金属产品。通常不含铅的焊锡丝称为无铅焊锡丝,无铅不是指完全不含铅,无铅是指铅含量比较低,可大致视为无铅,欧盟定义无铅的标准为:铅含量<1000PPm。考虑焊接及后工续有进一步污染的可能,为确保客户成品符合欧盟标准,一般焊锡丝铅含量会远低于这个标准。 4、含铅和不含铅的焊锡丝都会腐蚀烙铁头,因为无铅焊接温度比有铅的焊锡丝要高,加之合金成份不一样,无铅的焊锡丝更易腐蚀烙铁,出于无铅要求和腐蚀性,焊接无铅锡丝时建议使用无铅专用电烙铁。 3. 镊子 镊子的主要作用在于方便夹起和放置贴片元件,例如焊接贴片电阻的时候,就可用镊子夹住电阻放到电路板上进行焊接。镊子要求前端尖且平,以便于夹元件。另外,对于一些需要防止静电的芯片,需要用到防静电镊子。 防静电镊子又叫半导体镊子,导静电镊子,能防静电,采用碳纤与特殊塑料混合而成,具有弹性良好。 使用轻便而且经久耐用,不掉灰,耐酸碱,耐高温,可避免传统防静电镊子因含碳黑而污染产品,适用于半导体,IC等精密电子元件生产使用,及其特殊使用。 防静电镊子是由特殊导电塑胶材料制成的,具有弹性良好,使用轻便和泄放静电的特性,适用于对静电敏感的元器件加工和安装。 表面电阻:1000KΩ—100000MΩ。防静电镊子适合精密电子元件生产,半导体及电脑磁头等行业。 如果你采用碳纤与特殊塑料混合而成的防静电镊子,不掉灰,耐酸碱,耐高温,可避免传统防静电镊子因含碳黑而污染产品。 4. 吸锡带 焊接贴片元件时,很容易出现上锡过多的情况。 特别在焊密集多管脚贴片芯片时,很容易导致芯片相邻的两脚甚至多脚被焊锡短路。此时,传统的吸锡器是不管用的,这时候就需要编织的吸锡带。 5. 松香 松香是焊接时最常用的助焊剂了,因为它能析出焊锡中的氧化物,保护焊锡不被氧化,增加焊锡的流动性。 在焊接直插元件时,如果元件生锈要先刮亮,放到松香上用烙铁烫一下,再上锡。而在焊接贴片元件时,松香除了助焊作用外还可以配合铜丝可以作为吸锡带用。 6. 焊锡膏 在焊接难上锡的铁件等物品时,可以用到焊锡膏,它可以除去金属表面的氧化物,其具有腐蚀性。 在焊接贴片元件时,有时可以利用其来“吃”焊锡,让焊点亮泽与牢固。 7. 热风枪 热风枪是利用其枪芯吹出的热风来对元件进行焊接与拆卸的工具。其使用的工艺要求相对较高。 从取下或安装小元件到大片的集成电路都可以用到热风枪。在不同的场合,对热风枪的温度和风量等有特殊要求,温度过低会造成元件虚焊,温度过高会损坏元件及线路板。风量过大会吹跑小元件。对于普通的贴片焊接,可以不用到热风枪,在此不做详细叙述。 8. 放大镜 对于一些管脚特别细小密集的贴片芯片,焊接完毕之后需要检查管脚是否焊接正常、有无短路现象,此时用人眼是很费力的,因此可以用到放大镜,从而方便可靠的查看每个管脚的焊接情况。 9. 酒精 在使用松香作为助焊剂时,很容易在电路板上留下多余的松香。为了美观,这时可以用酒精棉球将电路板上有残留松香的地方擦干净 10.  其他贴片焊接所需的常用工具除了上述所说的之外,还有一些如海绵、洗板水、硬毛刷、胶水等。 贴片元件的手工焊接步骤(电烙铁) 在了解了贴片焊接工具以后,现在对焊接步骤进行详细说明。 1. 清洁和固定PCB( 印刷电路板) 在焊接前应对要焊的PCB 进行检查,确保其干净(见图2)。对其上面的表面油性的手印以及氧化物之类的要进行清除,从而不影响上锡。 手工焊接PCB 时,如果条件允许,可以用焊台之类的固定好从而方便焊接,一般情况下用手固定就好,值得注意的是避免手指接触PCB 上的焊盘影响上锡。 图2 一块干净的PCB 2. 固定贴片元件 贴片元件的固定是非常重要的。根据贴片元件的管脚多少,其固定方法大体上可以分为两种——单脚固定法和多脚固定法。 对于管脚数目少(一般为2-5 个)的贴片元件如电阻、电容、二极管、三极管等,一般采用单脚固定法。即先在板上对其的一个焊盘上锡(见图3)。 图3 对于管脚少的元件应先单脚上锡 然后左手拿镊子夹持元件放到安装位置并轻抵住电路板,右手拿烙铁靠近已镀锡焊盘熔化焊锡将该引脚焊好(见图4)。 焊好一个焊盘后元件已不会移动,此时镊子可以松开。而对于管脚多而且多面分布的贴片芯片,单脚是难以将芯片固定好的,这时就需要多脚固定,一般可以采用对脚固定的方法(见图5)。 即焊接固定一个管脚后又对该管脚所对面的管脚进行焊接固定,从而达到整个芯片被固定好的目的。需要注意的是,管脚多且密集的贴片芯片,精准的管脚对齐焊盘尤其重要,应仔细检查核对,因为焊接的好坏都是由这个前提决定的。 图4 对管脚少的元件进行固定焊接 图5 对管脚较多的元件进行对脚或多脚固定焊接 值得强调说明的是,芯片的管脚一定要判断正确。 举例来说,有时候我们小心翼翼的把芯片固定好甚至焊接完成了,检查的时候发现管脚对应错误——把不是第一脚的管脚当做第一脚来焊了!追悔莫及!因此这些细致的前期工作一定不能马虎。 3. 焊接剩下的管脚 元件固定好之后,应对剩下的管脚进行焊接。对于管脚少的元件,可左手拿焊锡,右手拿烙铁,依次点焊即可。 对于管脚多而且密集的芯片,除了点焊外,可以采取拖焊,即在一侧的管脚上足锡然后利用烙铁将焊锡熔化往该侧剩余的管脚上抹去(见图6),熔化的焊锡可以流动,因此有时也可以将板子合适的倾斜,从而将多余的焊锡弄掉。 值得注意的是,不论点焊还是拖焊,都很容易造成相邻的管脚被锡短路(见图7)。这点不用担心,因为可以弄到,需要关心的是所有的引脚都与焊盘很好的连接在一起,没有虚焊。 图6 对管脚较多的贴片芯片进行拖焊 图7 不用担心焊接时所造成的管脚短路 4. 清除多余焊锡 在步骤3 中提到焊接时所造成的管脚短路现象,现在来说下如何处理掉这多余的焊锡。 一般而言,可以拿前文所说的吸锡带将多余的焊锡吸掉。吸锡带的使用方法很简单,向吸锡带加入适量助焊剂(如松香)然后紧贴焊盘,用干净的烙铁头放在吸锡带上,待吸锡带被加热到要吸附焊盘上的焊锡融化后,慢慢的从焊盘的一端向另一端轻压拖拉,焊锡即被吸入带中。 应当注意的是吸锡结束后,应将烙铁头与吸上了锡的吸锡带同时撤离焊盘,此时如果吸锡带粘在焊盘上,千万不要用力拉吸锡带,而是再向吸锡带上加助焊剂或重新用烙铁头加热后再轻拉吸锡带使其顺利脱离焊盘并且要防止烫坏周围元器件。 如果没有市场上所卖的专用吸锡带,可以采用电线中的细铜丝来自制吸锡带(见图8)。 自制的方法如下:将电线的外皮剥去之后,露出其里面的细铜丝,此时用烙铁熔化一些松香在铜丝上就可以了。 清除多余的焊锡之后的效果见图9。此外,如果对焊接结果不满意,可以重复使用吸锡带清除焊锡,再次焊接元件。 图8 用自制的吸锡带吸去芯片管脚上多余的焊锡 图9 清除芯片管脚上多余的焊锡后效果图 5. 清洗焊接的地方 焊接和清除多余的焊锡之后,芯片基本上就算焊接好了。但是由于使用松香助焊和吸锡带吸锡的缘故,板上芯片管脚的周围残留了一些松香(见图9)。虽然并不影响芯片工作和正常使用,但不美观, 而且有可能造成检查时不方便。 因为有必要对这些残余物进行清理。常用的清理方法可以用洗板水,在这里,采用了酒精清洗,清洗工具可以用棉签,也可以用镊子夹着卫生纸之类进行(见图10)。 清洗擦除时应该注意的是酒精要适量,其浓度最好较高,以快速溶解松香之类的残留物。 其次,擦除的力道要控制好,不能太大,以免擦伤阻焊层以及伤到芯片管脚等。 清洗完毕的效果见图11。此时可以用烙铁或者热风枪对酒精擦洗位置进行适当加热以让残余酒精快速挥发。至此,芯片的焊接就算结束了。 图10 用酒精清除掉焊接时所残留的松香 图11 用酒精清洗焊接位置后的效果图 贴片元件的手工焊接步骤 一、准备工作 1、打开热风枪,把风量,温度调到适当位置:用手感觉风筒风量与温度;观察风筒有无风量用温度不稳定现象。…

摩登3登录网站_尴尬!因软件Bug ,美国数百名囚犯释放后无法出狱

近日,一位来自美国亚利桑那州监狱部门的负责人向新闻网站 KJZZ 举报,其所在监狱的囚犯管理软件存在 Bug ,导致数百名符合释放条件的囚犯被继续关押。实际上,该负责人于一年前就在监狱部门的内部指出该 Bug,但至今没有人采取行动来修复该软件的 Bug。 01 据了解,这款囚犯管理软件名为 ACIS,是监狱部门投入了 2400 万美元雇佣北美的一家 IT 商业&决策公司开发的,ACIS 应用程序中有一个软件计算囚犯释放日期的模块,但经过多次应用,无法对 2019 年通过的 1310 号修正案进行解释。 该修正案允许部分非暴力囚犯通过学习或者劳动教育能获得额外的积分,即他们在监狱中完成编程等职业教育课程或拿到高中文凭,最终当积分达到一定要求后,他们可以被提前释放出来。 不过,据监狱有关部门的消息人士表示,这款 ACIS 软件无法识别符合 SB 1310 修正案条件的囚犯,也无法在他们完成编程课程后计算新的释放日期。 举报者说: “从第一天起,我们就知道这行不通……当他们批准这条法案时,我们看着它说 ‘oh,sh*t’”。 在反复发出内部警告之后,这名员工在 2020 年 10 月向部门领导发送了一份报告,其中详细介绍了软件错误。 领导知道后并未努力修复软件漏洞,而是试图通过人工来识别符合条件的囚犯。还命令他和其他员工“一句话也别说……我们花了太多钱在这套软件上,现在没法回头了。” 02 据举报者称,自 2019 年 11 月以来,整个 ACIS 囚犯管理软件程序已遇到超过 14,000 个错误。其它几个同类程序也未能正常运行,包括跟踪囚犯医疗情况、财产情况、宗教信仰、安全分类和帮派关系的等模块。 ©照片:档案照片(AP) 亚利桑那州佛罗伦萨州立监狱 媒体报道后,监狱发言人回应道,刑满释放的囚犯被继续关押的说法是错误的,但 ACIS 软件系统确实“没有根据参议院 SB 1310 法案计算出正确的释放日期”。  刑事司法记者 Jimmy Jenkins 发推文说,亚利桑那州惩教局已阻止所有员工访问 KJZZ 网站。 针对这样的 Bug,谁又将为其“背锅”? 参考链接: https://kjzz.org/content/1660988/whistleblowers-software-bug-keeping-hundreds-inmates-arizona-prisons-beyond-release https://www.msn.com/en-us/news/technology/software-bug-keeps-arizona-prisoners-behind-bars-past-release-dates/ar-BB1dUHqw END 来源:CSDN,整理:李磊 呵,你会51单片机的精确延时吗? 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3官网注册_Nordic助力具GPS功能资产追踪器监控车辆、儿童和宠物的位置

挪威奥斯陆 – 2021年2月25日 – Nordic Semiconductor宣布位于美国密歇根州迪凯特的科技初创企业Cube Tracker在其 “C7004 Cube GPS” 跟踪设备中使用了带有集成LTE-M/NB-IoT调制解调器和GPS的nRF9160低功耗系统级封装(SiP)器件。Cube GPS可让用户通过广泛且成熟的蜂窝基础设施来远程监视重要物品或个人的位置。 Cube GPS是具有IP67等级防水性能并可连接的便携式跟踪设备,主要用于监视车辆、儿童,宠物和其他贵重物品的位置。在美国全国范围的覆盖率之下,跟踪器能够以30米以内的精度来监视物品或佩戴者的位置。 通过nRF9160 SiP的LTE-M连接功能和GPS支持,以及跟踪器的内置Wi-Fi功能 (用于室内和室外跟踪) 和低功耗蓝牙 (Bluetooth Low Energy (Bluetooth LE)) 连接功能 (用于近距离监视)的辅助,这款产品利用蜂窝网络定期将所跟踪物品/个人的位置信息发送到云端;而用户可以通过智能手机上的iOS和Android版本Cube Tracker应用程序实现安全、可靠和 “实时” 的监控。另外,用户可以通过应用程序查看物品的位置历史记录,以及设置 “接近时响” (ring when close) 和地理围栏警报。 nRF9160 SiP的64 MHz Arm® Cortex®-M33处理器提供了充足的计算能力,不仅可以运行LTE-M蜂窝连接,还可以运行其他所有的产品功能。1MB闪存和256KB RAM支持复杂的应用程序软件,并且能够快速响应位置请求。Cube GPS利用nRF9160的紧凑尺寸 (10 X 16 X 1mm),整合了SiP、Wi-Fi /低功耗蓝牙芯片组;Wi-Fi和蜂窝天线;一个可充电500mAh电池;一个电池和蜂窝状态LED指示器,以及用于紧急警报或自定义功能的按钮,而设备的尺寸仅约70 x 40 x 16mm。这款跟踪器可视乎可调节的GPS更新间隔而定,实现10至60天的电池使用寿命,这在一定程度上要归功于Nordic SiP的超低功耗特性。nRF9160 SiP针对低功耗运行进行了优化,支持PSM和eDRX节能模式。例如在PSM模式下每12小时上传1 KB数据,平均电流为5.5 uA。 nRF9160 SiP已通过全球蜂窝物联网应用认证,在紧凑型封装中包含了专用应用处理器和存储器;带集成RF前端 (RF front end, RFFE) 的多模式LTE-M/NB-IoT调制解调器,GPS以及电源管理。这款SiP集成了Arm M33处理器;闪存和RAM;一系列模拟和数字外设;自动化电源和时钟管理;用于可信执行的ArmTrustZone®和用于应用程序层安全性的Arm CryptoCell™ 310。该处理器通过BSD安全套接API与LTE调制解调器进行通信,并支持应用程序层协议 (例如CoAP、MQTT或LWM2M) 和应用程序本身。nRF9160 SiP的LTE调制解调器同时支持SIM和eSIM,并提供700至2200 MHz的LTE频段支持;23 dBm的输出功率以及单针50Ω天线和UICC接口。LTE堆栈层L1-L3、IPv4/IPv6、TCP/UDP、TLS/DTLS是调制解调器固件的一部分。 相关产品包括预认证单板开发套件nRF9160 DK和软件开发套件nRF Connect SDK,其中包含作为预认证和预编译下载提供的应用层协议、应用示例和LTE调制解调器固件。 Cube Tracker销售经理Chris Schaap表示:“由于Nordic的nRF9160 SiP具备紧凑的尺寸和低功耗,因此我们选择其用于Cube GPS,而可靠的Nordic SDK帮助我们迅速开始开发工作。” “Nordic高效的工作团队为销售、市场营销和研发提供了强大的支持,该公司的快速响应和全面帮助给我们留下了深刻的印象。”

摩登三1960_电阻、电容、电感、二极管、三极管、mos管超详细知识总结

电阻 1概念 电阻元件的电阻值大小一般与温度,材料,长度,还有横截面积有关,衡量电阻受温度影响大小的物理量是温度系数,其定义为温度每升高1℃时电阻值发生变化的百分数。 导体的电阻通常用字母R表示,电阻的单位是欧姆(ohm),简称欧,符号是Ω(希腊字母,读作Omega),1Ω=1V/A。比较大的单位有千欧(kΩ)、兆欧(MΩ)(兆=百万,即100万)。 1TΩ=1000GΩ;1GΩ=1000MΩ;1MΩ=1000KΩ;1KΩ=1000Ω(也就是一千进率) 串联:R=R1+R2+...+Rn 定义式:R=U/I 电阻元件的电阻值大小一般与温度有关,还与导体长度、横截面积、材料有关。衡量电阻受温度影响大小的物理量是温度系数,其定义为温度每升高1℃时电阻值发生变化的百分数。多数(金属)的电阻随温度的升高而升高,一些半导体却相反。 如:玻璃,碳在温度一定的情况下,有公式R=ρl/s其中的ρ就是电阻率,l为材料的长度,单位为m,s为面积,单位为平方米。可以看出,材料的电阻大小正比于材料的长度,而反比于其面积。 2电阻应用 电阻通常分为三大类:固定电阻,可变电阻,特种电阻。 RX型线绕电阻,近年来还广泛应用的片状电阻。 按照功率可以分为小功率电阻和大功率电阻。大功率电阻通常是金属电阻,实际上应该是在金属外面加一个金属(铝材料)散热器,所以可以有10W以上的功率;在电子配套市场上专门卖电阻的市场上可以很容易地看到。  电阻在电路中起到限流、分压等作用。通常1/8W电阻已经完全可以满足使用。但是,在作为7段LED中,要考虑到LED的压降和供电电压之差,再考虑LED的最大电流,通常是20mA(超高亮度的LED),如果是2×6(2排6个串联),则电流是40mA。 电位器又分单圈和多圈电位器。单圈的电位器通常为灰白色,面上有一个十字可调的旋纽,出厂前放在一个固定的位置上,不在2头;多圈电位器通常为蓝色,调节的旋纽为一字,一字小改锥可调;多圈电位器又分成顶调和侧调2种,主要是电路板调试起来方便。  排电阻 ,光敏电阻 ,使用光敏电阻可以检测光强的变化。  电阻的封装有表面贴和轴向的封装。轴向封装有:axial0.4、axial0.6、axial0.8等等;axial在英语中就是轴的意思;表面贴电阻的封装最常用的就是0805;当然还有更大的;但是更大的电阻不是很常用的。 电阻作为限流应该是最常用的应用之一,对于单片机外围设计来说,电阻的应用非常重要,在很多时候,我们必须在单片机的I/O端口上连接一个限流电阻,保证外围电路不会应用短路、过载等原因烧坏单片机的I/O端口,甚至整个单片机。 面对这些问题,恐怕很多人都是知其然不知其所以然,完全凭靠经验获取,并没有完全按照电路的要求计算取值。为此,在这里提出这些问题,并不想教大家怎么去计算这些值,知道欧姆定律的人都应该知道该怎么计算吧,所以,只是希望大家在选择之前,先了解单片机的这些参数,然后,根据参数进行计算。在计算时一定要留一定的预留空间。 在看一些元器件的DATASHEET文件时,经常会碰到元器件的参数,IOL,IOH,IIL,IIH,我也知道他们指的是输入输出高低电平时的最大最小电流,但在连接时他们之间的匹配问题一直很模糊,如:IOL=1.5MA;     IOH=-300UA IIL=-100UA;    IIH=10UA; 参考答案: IOL和IOH表示输出为低、高电平时的电流值,同样-号表示从器件流出的电流。 4上下拉电阻 上拉是对器件输入电流,下拉是输出电流;强弱只是上拉电阻的阻值不同,没有什么严格区分;对于非集电极(或漏极)开路输出型电路(如普通门电路)提升电流和电压的能力是有限的,上拉电阻的功能主要是为集电极开路输出型电路输出电流通道。 ►►3 为增强输出引脚的驱动能力,有的单片机管脚上也常使用上拉电阻。 ►►5 芯片的管脚加上拉电阻来提高输出电平,从而提高芯片输入信号的噪声容限,增强抗干扰能力。 ►►7 长线传输中电阻不匹配容易引起反射波干扰,加上、下拉电阻是电阻匹配,有效的抑制反射波干扰。 就是从电源高电平引出的电阻接到输出端 ►►2 如果输出电流比较大,输出的电平就会降低(电路中已经有了一个上拉电阻,但是电阻太大,压降太高),就可以用上拉电阻提供电流分量, 把电平“拉高”。(就是并一个电阻在IC内部的上拉电阻上,这时总电阻减小,总电流增大)。当然管子按需要工作在线性范围的上拉电阻不能太小。当然也会用这个方式来实现门电路电平的匹配。 一般作单键触发使用时,如果IC本身没有内接电阻,为了使单键维持在不被触发的状态或是触发后回到原状态,必须在IC外部另接一电阻。 一般说的是I/O端口,有的可以设置,有的不可以设置,有的是内置,有的是需要外接,I/O端口的输出类似于一个三极管的C,当C接通过一个电阻和电源连接在一起的时候,该电阻成为上拉电阻,也就是说,该端口正常时为高电平;C通过一个电阻和地连接在一起的时候,该电阻称为下拉电阻。 5典型应用 在外设没有收到控制时,我们需要把某一外设或单片机I/O端口固定在某一固定电平上时,需要根据需要接上下拉电阻,例如:上图中,对于按键输入来说,在没有按下按键时,如果没有上拉电阻的存在,单片机端口将处于悬乎状态,没有确定电平,当然如果有内部上拉电阻的单片机除外,加上上拉电阻会,在没有按键时,单片机端口保持高电平,有按键时,单片机端口将输入低电平。 而对于蜂鸣器来说,由于和按键有同样的效果,不加上拉电阻,无法区别在没有单片机控制时,三极管的工作状态,所以,必须加上上拉电阻以保障无单片机控制时,三极管截止,蜂鸣器不工作。 有时候由于器件自身设计的原因,如果不接外部上下拉电阻,设备无法正常实现高低电平的转换。例如,对于开漏输出的I2C总线来说,如果不接上拉电阻,其只能输出低电平,无法实现高电平输出,加上上拉电阻,保证在没有控制信号时,通过上拉电阻实现高电平。 电容 1概念 电容(或称电容量)是表现电容器容纳电荷本领的物理量。 电容从物理学上讲,它是一种静态电荷存储介质,可能电荷会永久存在,这是它的特征,它的用途较广,它是电子、电力领域中不可缺少的电子元件。主要用于电源滤波、信号滤波、信号耦合、谐振、滤波、补偿、充放电、储能、隔直流等电路中。 电容的符号是C。在国际单位制里,电容的单位是法拉,简称法,符号是F,由于法拉这个单位太大,所以常用的电容单位有毫法(mF)、微法(μF)、纳法(nF)和皮法(pF)等,换算关系是: 1微法(μF)= 1000纳法(nF)= 1000000皮法(pF)。 1伏安时=1瓦时=3600焦耳 一个电容器,如果带1库的电量时两级间的电势差是1伏,这个电容器的电容就是1法,即:C=Q/U 但电容的大小不是由Q(带电量)或U(电压)决定的,即:C=εS/4πkd 。其中,ε是一个常数,S为电容极板的正对面积,d为电容极板的距离,k则是静电力常量。常见的平行板电容器,电容为C=εS/d(ε为极板间介质的介电常数,S为极板面积,d为极板间的距离)。 定义式:C=Q/U 多电容器并联计算公式:C=C1+C2+C3+…+Cn 三电容器串联:C=(C1*C2*C3)/(C1*C2+C2*C3+C1*C3) 2电容的应用 ►►1  按照结构分三大类:固定电容器、可变电容器和微调电容器; ►►3 按用途分有:高频旁路、低频旁路、滤波、调谐、高频耦合、低频耦合、小型电容器; ►►5 低频旁路:纸介电容器、陶瓷电容器、铝电解电容器、涤纶电容器; ►►7 调谐:陶瓷电容器、云母电容器、玻璃膜电容器、聚苯乙烯电容器; ►►9 低耦合:纸介电容器、陶瓷电容器、铝电解电容器、涤纶电容器、固体钽电容器; 电容作用 耦合电容:用在耦合电路中的电容称为耦合电容,在阻容耦合放大器和其他电容耦合电路中大量使用这种电容电路,起隔直流通交流作用。 退耦电容:用在退耦电路中的电容器称为退耦电容,在多级放大器的直流电压供给电路中使用这种电容电路,退耦电容消除每级放大器之间的有害低频交连。 谐振电容:用在LC谐振电路中的电容器称为谐振电容,LC并联和串联谐振电路中都需这种电容电路。 中和电容:用在中和电路中的电容器称为中和电容。在收音机高频和中频放大器,电视机高频放大器中,采用这种中和电容电路,以消除自激。 积分电容:用在积分电路中的电容器称为积分电容。在电势场扫描的同步分离电路中,采用这种积分电容电路,可以从场复合同步信号中取出场同步信号。 补偿电容:用在补偿电路中的电容器称为补偿电容,在卡座的低音补偿电路中,使用这种低频补偿电容电路,以提升放音信号中的低频信号,此外,还有高频补偿电容电路。 分频电容:在分频电路中的电容器称为分频电容,在音箱的扬声器分频电路中,使用分频电容电路,以使高频扬声器工作在高频段,中频扬声器工作在中频段,低频扬声器工作在低频段。 调谐电容:连接在谐振电路的振荡线圈两端,起到选择振荡频率的作用。 中和电容:并接在三极管放大器的基极与发射极之间,构成负反馈网络,以抑制三极管极间电容造成的自激振荡。 定时电容:在RC时间常数电路中与电阻R串联,共同决定充放电时间长短的电容。 缩短电容:在UHF高频头电路中,为了缩短振荡电感器长度而串联的电容。 锡拉电容:在电容三点式振荡电路中,与电感振荡线圈两端并联的电容,起到消除晶体管结电容的影响,使振荡器在高频端容易起振。 预加重电容:为了避免音频调制信号在处理过程中造成对分频量衰减和丢失,而设置的RC高频分量提升网络电容。 移相电容:用于改变交流信号相位的电容。 降压限流电容:串联在交流回路中,利用电容对交流电的容抗特性,对交流电进行限流,从而构成分压电路。 S校正电容:串接在偏转线圈回路中,用于校正显像管边缘的延伸线性失真。 消亮点电容:设置在视放电路中,用于关机时消除显像管上残余亮点的电容。 启动电容:串接在单相电动机的副绕组上,为电动机提供启动移相交流电压,在电动机正常运转后与副绕组断开。 3去耦电容 电容的阻抗为1/(2π*f*C),频率越高,阻抗应该越小。在结构上,小容量的电容器在高的频率处,而大容量的电容器则在较低的频率处,电容的阻抗变得最低。因此,在电源上并联一个小容量电容和一个大容量电容是很有必要的,这样在很宽的频率范围降低电源对地的阻抗。 小容量的电容器是在高频情况下降低阻抗的,所以如果不配置在电路附近,则电容器的引线增长,由于引线本身的阻抗,电源的阻抗不能降低。使用在使用小电容时,一定将尽量靠近器件的电源输入脚,否则就算添加了这个电容也没有任何意义。大容量电容器由于其低频特性,在布局时可以适当离器件远些也没有问题。在低频电路上即使没有小电容C1,电路也能正常工作。但是在高频电路中,比起大电容C2来说,C1起着更为重要的作用。 从习惯上来说,旁路电容也有大小两个电容,形成两条通路,也保证电路的可靠性。 4耦合电容 电容耦合的作用是将交流信号从前一级传到下一级。耦合的方法还有直接耦合和变压器耦合的方法。直接耦合效率最高,信号又不失真,但是,前后两级工作点的调整比较复杂,相互牵连。为了使后一级的工作点不受前一级的影响,就需要在直流方面把前一级和后一级分开。 同时,又能使交流信号从前一级顺利的传递到后一级,同时能完成这一任务的方法就是采用电容传输或者变压器传输来实现。他们都能传递交流信号和隔断直流,使前后级的工作点互不牵连。但不同的是,用电容传输时,信号的相位要延迟一些,用变压器传输时,信号的高频成分要损失一些。一般情况下,小信号传输时,常用电容作为耦合元件,大信号或者强信号传输时,常用变压器作为耦合元件。 在AD于DA电路上,我们需要把数字信号和模拟信号进行相互转换,为保障数字喜欢与模拟喜欢的互不干涉,我们往往需要在单片机的输入端或输出端串联一个电容,对电路进行耦合。 用于振荡回路中,与电感或电阻配合,决定振荡频率(时间)的电容称之为振荡电容。 Fx = F0(1+C1/(C0+CL))^(1/2); 具体公式不用细想,我们可以从中得知负载电容的减小可以使实际频率Fx变大, 原有电路使用的是33pF的两个电容,则并联起来是16.5pF,我们的贴片电容只有27pF,33pF,39pF,所以我们选用了27pF和39pF并联,则电容为15.95pF。电容焊好后,测量比原来大了200多赫兹,落在了设计范围内。 对于这电容来说,大家应该再熟悉不过了,基本上,没有一个带有微处理器的电路都至少有一个带有起振电容的电路。虽然,大多是情况下,我们都是按照经验选择这两个电容。实际上,这样不科学,有的时候晶振并不会工作。所以,选择合适是起振电容还是很有必要的。实际上,不同的晶振,起需要的起振电容是不同的,在购买晶振时应该选择合适的晶振,一般来说在晶振的数据手册上也提供了选择起振电容的依据。 6复位电容 随着+5V直流电压的充电,Al的①脚上的电压达到了一定值,集成电路Al内部所有电路均可建立起初始状态,复位工作完成,CPU进入初始的正常工作状态。这一复位电路的目的:使集成电路Al的复位引脚①脚上直流电压的建立滞后于集成电路Al的+5V直流工作电压规定的时间,如图5-69所示的电压波形可以说明这一问题。 电感 1.电感作为一种能够改变电流的特殊器件,在数字电路中应用相对比较少,一般都应用在与电源相关的部分。 电感(inductance of an ideal inductor)是闭合回路的一种属性。当线圈通过电流后,在线圈中形成磁场感应,感应磁场又会产生感应电流来抵制通过线圈中的电流。这种电流与线圈的相互作用关系称为电的感抗,也就是电感,单位是“亨利(H)”。 自感,互感电感符号:L 1H=10^3mH=10^6μH=10^9nH。 除此外还有一般电感和精密电感之分…

摩登3平台登录_赢创推出用于锂电池负极的新型硅碳复合材料 Siridion® Black

• 新型高性能硅碳粉末可用于锂电池负极 • 有效提高锂电池能量密度和容量 • 已实现工业级规模生产 全球领先的特种化学品公司赢创推出全新锂电池硅碳复合型负极材料Siridion® Black ,可有效提高电池的能量密度,提升快充容量和能效,从而使锂电池性能更强大。 “Siridion® Black 的上市是我们产品组合战略发展中的重要里程碑。”赢创硅烷业务线全球负责人 Peter Friesenhahn 说,“作为客户的创新伙伴,我们正在扩充面向具有吸引力、技术导向型增长市场的解决方案。” 全新高性能材料 Siridion® Black 进一步完善了赢创电池材料产品组合。目前,赢创电池材料解决方案包括正极活性材料和用于隔膜涂料的气相金属氧化物。 “石墨是目前常用的锂电池负极材料。然而,随着人们对电池容量、充电时间提出更高的要求,开发新型负极材料势在必行。”赢创硅烷业务线电池市场负责人 Björn Borup 博士说,“作为一种添加剂,我们的解决方案适用于现有的负极材料和生产工艺,也可用于其他类型的电池材料。” Siridion® Black 硅碳粉末采用气相合成法制成,由上百个纳米级分离非烧结球形颗粒组成。在这种无定形结构颗粒中,碳浓度从内向外递增,从而实现卓越的稳定性。“此外,这一材料具有更高的表面碳含量,可增强氧化保护,且更易于加工。” Siridion® Black 产品开发和商业化负责人Julia Lyubina 博士说道。 Siridion® Black 高性能负极材料由赢创研发创新部和硅烷业务线联合开发,并被纳入了赢创与杜伊斯堡-埃森大学的锂电池储能联合研究项目中。该项目已获得德国联邦经济与能源部的资助。 “Siridion® Black 可根据客户要求进行定制,帮助电池负极制造商及其客户实现灵活的电池配置。” Lyubina 博士补充。这一定制服务尤其可以满足可穿戴设备或移动设备制造商对设计自由度的需求。 目前,赢创已实现 Siridion® Black 碳包覆型硅粉末的工业级规模生产。 在 3 月 19 日至 21 日于中国深圳举办的第十四届中国电池展(CIBF2021)上,赢创将展出这一产品。

摩登3娱乐怎么样?_C语言实现MD5加密,竟如此简单!

本文详细讲解视频已经上传到B站: https://www.bilibili.com/video/BV1uy4y1p7on/ 公众号后台回复【md5】即可获得本文所有源码。 一、摘要算法 摘要算法又称哈希算法。 它表示输入任意长度的数据,输出固定长度的数据,它的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密。 目前可以被解密逆向的只有CRC32算法,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。 消息摘要算法不存在密钥的管理与分发问题,适合于分布式网络上使用。由于其加密计算的工作量相当巨大,所以以前的这种算法通常只用于数据量有限的情况下的加密。 消息摘要算法分为三类: MD(Message Digest):消息摘要 SHA(Secure Hash Algorithm):安全散列 MAC(Message Authentication Code):消息认证码 这三类算法的主要作用:验证数据的完整性 二、MD5简介 MD5即Message-Digest Algorithm 5(信息-摘要算法)。 属于摘要算法,是一个不可逆过程,就是无论多大数据,经过算法运算后都是生成固定长度的数据,结果使用16进制进行显示的128bit的二进制串。通常表示为32个十六进制数连成的字符串。 MD5有什么用? 用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。更多用在文档校验上,用来生成密钥检测文档是否被篡改。 三、在线MD5加密 有很多在线进行MD5加密的网站,如下: http://www.metools.info/code/c26.html 举例: 给字符串 12334567 加密成。 如图结果为: 32135A337F8DC8E2BB9A9B80D86BDFD0 四、C语言实现MD5算法 源文件如下:md5.h #ifndef MD5_H#define MD5_H typedef struct{    unsigned int count[2];    unsigned int state[4];    unsigned char buffer[64];   }MD5_CTX;                          #define F(x,y,z) ((x & y) | (~x & z))#define G(x,y,z) ((x & z) | (y & ~z))#define H(x,y,z) (x^y^z)#define I(x,y,z) (y ^ (x | ~z))#define ROTATE_LEFT(x,n) ((x << n) | (x >> (32-n)))#define FF(a,b,c,d,x,s,ac) \          { \          a += F(b,c,d) + x + ac; \          a = ROTATE_LEFT(a,s); \          a += b; \          }#define GG(a,b,c,d,x,s,ac) \          { \          a += G(b,c,d) + x + ac; \          a = ROTATE_LEFT(a,s); \          a += b; \          }#define HH(a,b,c,d,x,s,ac) \          { \          a += H(b,c,d) + x + ac; \          a = ROTATE_LEFT(a,s); \          a += b; \          }#define II(a,b,c,d,x,s,ac) \          { \          a += I(b,c,d) + x + ac; \          a = ROTATE_LEFT(a,s); \          a += b; \          }                                            void MD5Init(MD5_CTX *context);void MD5Update(MD5_CTX *context,unsigned char *input,unsigned int inputlen);void MD5Final(MD5_CTX *context,unsigned char digest[16]);void MD5Transform(unsigned int state[4],unsigned char block[64]);void MD5Encode(unsigned char *output,unsigned int *input,unsigned int len);void MD5Decode(unsigned int *output,unsigned char *input,unsigned int len); #endif md5.c #include  #include "md5.h" unsigned char PADDING[]={0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,                         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,                         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,                         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};                         void MD5Init(MD5_CTX *context){     context->count[0] = 0;     context->count[1] = 0;     context->state[0] = 0x67452301;     context->state[1] = 0xEFCDAB89;     context->state[2] = 0x98BADCFE;     context->state[3] = 0x10325476;}void MD5Update(MD5_CTX *context,unsigned char *input,unsigned int inputlen){    unsigned int i = 0,index = 0,partlen = 0;    index = (context->count[0] >> 3) & 0x3F;    partlen = 64 - index;    context->count[0] += inputlen << 3;    if(context->count[0] < (inputlen << 3))       context->count[1]++;    context->count[1] += inputlen >> 29;        if(inputlen >= partlen)    {       memcpy(&context->buffer[index],input,partlen);       MD5Transform(context->state,context->buffer);       for(i = partlen;i+64 <= inputlen;i+=64)           MD5Transform(context->state,&input[i]);       index = 0;            }      else    {        i = 0;    }    memcpy(&context->buffer[index],&input[i],inputlen-i);}void MD5Final(MD5_CTX *context,unsigned char digest[16]){    unsigned int index = 0,padlen = 0;    unsigned char bits[8];    index = (context->count[0] >> 3) & 0x3F;    padlen = (index < 56)?(56-index):(120-index);    MD5Encode(bits,context->count,8);    MD5Update(context,PADDING,padlen);    MD5Update(context,bits,8);    MD5Encode(digest,context->state,16);}void MD5Encode(unsigned char *output,unsigned int *input,unsigned int len){    unsigned int i = 0,j = 0;    while(j < len)    {         output[j] = input[i] & 0xFF;           output[j+1] = (input[i] >> 8) & 0xFF;         output[j+2] = (input[i] >> 16) & 0xFF;         output[j+3] = (input[i] >> 24) & 0xFF;         i++;         j+=4;    }}void MD5Decode(unsigned int *output,unsigned char *input,unsigned int len){     unsigned int i = 0,j = 0;     while(j < len)     {           output[i] = (input[j]) |                       (input[j+1] << 8) |                       (input[j+2] << 16) |                       (input[j+3] << 24);           i++;           j+=4;      }}void MD5Transform(unsigned int state[4],unsigned char block[64]){     unsigned int a = state[0];     unsigned int b = state[1];     unsigned int c = state[2];     unsigned int d = state[3];     unsigned int x[64];     MD5Decode(x,block,64);     FF(a, b, c, d, x[ 0], 7, 0xd76aa478); /* 1 */ FF(d, a, b, c, x[ 1], 12, 0xe8c7b756); /* 2 */ FF(c, d, a, b, x[ 2], 17, 0x242070db); /* 3 */ FF(b, c, d, a, x[ 3], 22, 0xc1bdceee); /* 4 */ FF(a, b, c, d, x[ 4], 7, 0xf57c0faf); /* 5 */ FF(d, a, b, c, x[ 5], 12, 0x4787c62a); /* 6 */ FF(c, d, a, b, x[ 6], 17, 0xa8304613); /* 7 */ FF(b, c, d, a, x[ 7], 22, 0xfd469501); /* 8 */ FF(a, b, c, d, x[ 8], 7, 0x698098d8); /* 9 */ FF(d, a, b, c, x[ 9], 12, 0x8b44f7af); /* 10 */ FF(c, d, a, b, x[10], 17, 0xffff5bb1); /* 11 */ FF(b, c, d, a, x[11], 22, 0x895cd7be); /* 12 */ FF(a, b, c, d, x[12], 7, 0x6b901122); /* 13 */ FF(d, a, b, c, x[13], 12, 0xfd987193); /* 14 */ FF(c, d, a, b, x[14], 17, 0xa679438e); /* 15 */ FF(b, c, d, a, x[15], 22, 0x49b40821); /* 16 */  /* Round 2 */ GG(a, b, c, d, x[ 1], 5, 0xf61e2562); /* 17 */ GG(d, a, b, c, x[ 6], 9, 0xc040b340); /* 18 */ GG(c, d, a, b, x[11], 14, 0x265e5a51); /* 19 */ GG(b, c, d, a, x[ 0], 20, 0xe9b6c7aa); /* 20 */ GG(a, b, c, d, x[ 5], 5, 0xd62f105d); /* 21 */ GG(d, a, b, c, x[10], 9,  0x2441453); /* 22 */ GG(c, d, a, b, x[15], 14, 0xd8a1e681); /* 23 */ GG(b, c, d, a, x[ 4], 20, 0xe7d3fbc8); /* 24 */ GG(a, b, c, d, x[ 9], 5, 0x21e1cde6); /* 25 */ GG(d, a, b, c, x[14], 9, 0xc33707d6); /* 26 */ GG(c, d, a, b, x[ 3], 14, 0xf4d50d87); /* 27 */ GG(b, c, d, a, x[ 8], 20, 0x455a14ed); /* 28 */ GG(a, b, c, d, x[13], 5, 0xa9e3e905); /* 29 */ GG(d, a, b, c, x[ 2], 9, 0xfcefa3f8); /* 30 */ GG(c, d, a, b, x[ 7], 14, 0x676f02d9); /* 31 */ GG(b, c, d, a, x[12], 20, 0x8d2a4c8a); /* 32 */  /* Round 3 */ HH(a, b, c, d, x[ 5], 4, 0xfffa3942); /* 33 */ HH(d, a, b, c, x[ 8], 11, 0x8771f681); /* 34 */ HH(c, d, a, b, x[11], 16, 0x6d9d6122); /* 35 */ HH(b, c, d, a, x[14], 23, 0xfde5380c); /* 36 */ HH(a, b, c, d, x[ 1], 4, 0xa4beea44); /* 37 */ HH(d, a, b, c, x[ 4], 11, 0x4bdecfa9); /* 38 */ HH(c, d, a, b, x[ 7], 16, 0xf6bb4b60); /* 39 */ HH(b, c, d, a, x[10], 23, 0xbebfbc70); /* 40 */ HH(a, b, c, d, x[13], 4, 0x289b7ec6); /* 41 */ HH(d, a, b, c, x[ 0], 11, 0xeaa127fa); /* 42 */ HH(c, d, a, b, x[ 3], 16, 0xd4ef3085); /* 43 */ HH(b, c, d, a, x[ 6], 23,  0x4881d05); /* 44 */ HH(a, b, c, d, x[ 9], 4, 0xd9d4d039); /* 45 */ HH(d, a, b, c, x[12], 11, 0xe6db99e5); /* 46 */ HH(c, d, a, b, x[15], 16, 0x1fa27cf8); /* 47 */ HH(b, c, d, a, x[ 2], 23, 0xc4ac5665); /* 48 */  /* Round 4 */ II(a, b, c, d, x[ 0], 6, 0xf4292244); /* 49 */ II(d, a, b, c, x[ 7], 10, 0x432aff97); /* 50 */ II(c, d, a, b, x[14], 15, 0xab9423a7); /* 51 */ II(b, c, d, a, x[ 5], 21, 0xfc93a039); /* 52 */ II(a, b, c, d, x[12], 6, 0x655b59c3); /* 53 */ II(d, a, b, c, x[ 3], 10, 0x8f0ccc92); /* 54 */ II(c, d, a, b, x[10], 15, 0xffeff47d); /* 55 */ II(b, c, d, a, x[ 1], 21, 0x85845dd1); /* 56 */ II(a, b, c, d, x[ 8], 6, 0x6fa87e4f); /* 57 */ II(d, a, b, c, x[15], 10, 0xfe2ce6e0); /* 58 */ II(c, d, a, b, x[ 6], 15, 0xa3014314); /* 59 */ II(b, c, d, a, x[13], 21, 0x4e0811a1); /* 60 */ II(a, b, c, d, x[ 4], 6, 0xf7537e82); /* 61 */ II(d, a, b, c, x[11], 10, 0xbd3af235); /* 62 */ II(c, d, a, b, x[ 2], 15, 0x2ad7d2bb); /* 63 */ II(b, c, d, a, x[ 9], 21, 0xeb86d391); /* 64 */     state[0] += a;     state[1] += b;     state[2] += c;     state[3] += d;} 五、MD5加密实例 MD5加密步骤如下: 定义 MD5_CTX md5c;  初始化 /********************************************************* 名    称: MD5Init()* 功    能: 初始化MD5结构体* 入口参数:    context:要初始化的MD5结构体 * 出口参数: 无*********************************************************/MD5Init(MD5_CTX *context); MD5值计算 实现MD5值的计算及结构体的更新: /********************************************************** 名    称: MD5Update()* 功    能: 将要加密的信息传递给初始化过的MD5结构体,无返回值* 入口参数:    context:初始化过了的MD5结构体     input:需要加密的信息,可以任意长度    inputLen:指定input的长度* 出口参数: 无*********************************************************/MD5Update(MD5_CTX *context,(unsigned char *)input,inputLen);  输出转换 /********************************************************** 名    称: MD5Update()* 功    能: 将加密结果存储到,无返回值* 入口参数:    context:初始化过了的MD5结构体     digest :加密过的结果* 出口参数: 无*********************************************************/MD5Final(MD5_CTX *context,unsigned char digest[16]); 格式整理 转换成32位的16进制字符串。 实例1 字符串加密 对字符串进行加密:   1 #include    2 #include    3 #include "md5.h"  4 #include    5 #include    6 #include    7 #include    8   9 void main( void )  10 {  11     int read_len; 12     int i ; 13     char temp[8]={0}; 14     unsigned char digest[16]; //存放结果  15     char hexbuf[128]="12334567"; 16     unsigned char decrypt[16]={0};   17     unsigned char decrypt32[64]={0};     18  19     MD5_CTX md5c;  20  21     MD5Init(&md5c); //初始化 22     read_len = strlen(hexbuf); 23     MD5Update(&md5c,(unsigned char *)hexbuf,read_len);   24  25     MD5Final(&md5c,decrypt);  26     strcpy((char *)decrypt32,""); 27  28     for(i=0;i<16;i++) 29     { 30         sprintf(temp,"%02x",decrypt[i]); 31         strcat((char *)decrypt32,temp); 32     } 33     printf("md5:%s\n",decrypt32); 34      35     return; 36 } 执行结果如下: 本例对字符串12334567进行加密,结果和在线加密结果一致。 实例2 文件加密 对文件进行加密 #include  #include  #include "md5.h"#include  #include  #include  #include  #define FORWORD_FW "123.c"int calc_md5(char*filename,char*dest){ int i; int filelen = 0; int read_len; char temp[8]={0};  char hexbuf[128]={0}; unsigned char decrypt[16]={0};   unsigned char decrypt32[64]={0}; MD5_CTX md5; char fw_path[128]; int fdf;  fdf = open(filename,O_RDWR); if(fdf<0) {  printf("%s not exist\n",FORWORD_FW);  return -1; }  MD5Init(&md5);   while(1) {  read_len = read(fdf, hexbuf,sizeof(hexbuf));   if (read_len <0) {     close(fdf);      return -1;  }  if(read_len==0)  {   break;  }  filelen += read_len;  MD5Update(&md5,(unsigned char *)hexbuf,read_len);  }  MD5Final(&md5,decrypt);  strcpy((char *)decrypt32,"");  for(i=0;i<16;i++) {  sprintf(temp,"%02x",decrypt[i]);  strcat((char *)decrypt32,temp); } strcpy(dest,decrypt32); printf("md5:%s len=%d\n",dest,filelen); close(fdf); return filelen;}int main(int argc, char *argv[]){ int ret; int filelen; char md5_str[64]={0}; char cmd[256]={0};  filelen = calc_md5(FORWORD_FW,md5_str); if(filelen<0) {  printf("calc_md5 fail\n");  return -1; } return 0;} 运行结果: 在线验证结果对比: http://www.metools.info/other/o21.html 结果 END 来源:一口Linux,作者:土豆居士 呵,你会51单片机的精确延时吗? 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3注册开户_为什么要使用Makefile工具,怎么使用?

为什么要使用Makefile工具? 当源码文件比较多的时候,不适合直接gcc命令来编译,这时候需要一个自动化编译工具来编译。Make 一般说是GNU Make 是一个软件,用于将源码文件编译器为可执行的二进制文件,make工具主要用于完整自动化编译,make编译的时候需要Makefile文件提供编译文件。 1、引入Makefile a.c------>***.s------>***.ob.c------>xxx.s------>xxx.oxxx.o + ***.o ------>test 缺点:修改任一个文件所有.c都要重新编译,文件更多时可想而知,时间耗不起! 改进:应该分别编译,最后再链接 gcc -c a.c gcc -c b.cgcc a.o b.o –o test 为此需要一个这样的工具: 01.如果工程没有编译过,那么工程中的所有.c文件都要被编译并且链接成可执行程序。02.如果工程中只有个别C 文件被修改了,那么只编译这些被修改的C文件即可。03.如果工程的头文件被修改了,那么我们需要编译所有引用这个头文件的C文件,并且链接成可执行文件。 2、makefile 的基本规则: 当依赖比目标新执行命令 目标文件:依赖文件 TAB键  命令 根据Makefile的基本规则,我们针对上面的gcc编译过程来写一个Makefile文件,如下所示: test:a.o b.ogcc –o test a.o b.oa.o: a.cgcc -c a.cb.o: b.cgcc -c b.cclean:rm *.orm test 这样我们使用 make 命令就可以完成对 a.c  b.c的编译和链接,直接生成test执行文件。 3、Makefile 的变量 Makefile 也可以添加变量,但Makefile跟C语言不一样,没有类似于 int char …等很多的类型,只有字符串类型,比如可以定义一个 object = a.o b.o  引用变量使用$(objdect)即可。 这样就可以将上面的Makefile尽心简化,不需要输入两次的 a.o b.o, 具体如下: objdect = a.o b.otest:$(object) gcc –o test $(object)a.o: a.c gcc -c a.cb.o: b.c gcc -c b.cclean:rm *.orm test 4、Makefile的通配符%和自动化变量 对于上面的Makefile如果有很多.c文件,那我们就需要写很多依赖规则,可以使用通配符来对其简化,%.c 表示所有的.c文件,%.o表示所有的.o文件,当然我们就可以把上面的! b.o 依赖于 b.c和a.o依赖于a.c 等写成 %.o 依赖%.c的形式。对于命令则需要引入另一个叫做自动化变量了,如何通过一行命令来从不同的依赖文件中生成对应的目标?自动化变量就是用来实现这个功能的。在自动化变量中常用的是$@、$<、$^ $@ : 规则中目标集合 $< :依赖文件集合中的第一个文件 $^ :所有依赖文件的集合 这样我们又可以对MakeFile进行简化啦……….,如下所示: objdect = a.o b.otest:$(object) gcc –o test $(object)%.o: %.c gcc -c [ DISCUZ_CODE_0 ]lt;clean:rm *.orm test 5、Makefile伪目标 我们总是使用make clean来执行删除任务,单当我们在当前目录添加一个名为clean的文件,那么make clean还能奏效吗?如下: 解决办法:使用伪目标,将clean定义为假想目标即可。 objdect = a.o b.otest:$(object)…

摩登3注册平台官网_使用Keil C进行51单片机延时程序编写的几点心得

应用单片机的时候,经常会遇到需要短时间延时的情况。需要的延时时间很短,一般都是几十到几百微妙(us)。有时候还需要很高的精度,比如用单片机驱动 DS18B20的时候,误差容许的范围在十几us以内,不然很容易出错。这种情况下,用计时器往往有点小题大做。而在极端的情况下,计时器甚至已经全部派上了别的用途。这时就需要我们另想别的办法了。 以前用汇编语言写单片机程序的时候,这个问题还是相对容易解决的。比如用的是12MHz晶振的51,打算延时20us,只要用下面的代码,就可以满足一般的需要: 51 单片机的指令周期是晶振频率的1/12,也就是1us一个周期。mov r0, #09h需要2个极其周期,djnz也需要2个极其周期。那么存在r0里的数就是(20-2)/2。用这种方法,可以非常方便的实现256us以下时间的延时。如果需要更长时间,可以使用两层嵌套。而且精度可以达到2us,一般来说,这已经足够了。 现在,应用更广泛的毫无疑问是Keil的C编译器。相对汇编来说,C固然有很多优点,比如程序易维护,便于理解,适合大的项目。但缺点(我觉得这是C的唯一一个缺点了)就是实时性没有保证,无法预测代码执行的指令周期。因而在实时性要求高的场合,还需要汇编和C的联合应用。但是是不是这样一个延时程序,也需要用汇编来实现呢?为了找到这个答案,我做了一个实验。 用C语言实现延时程序,首先想到的就是C常用的循环语句。下面这段代码是我经常在网上看到的:\ 到底这段代码能达到多高的精度呢?为了直接衡量这段代码的效果,我把 Keil C 根据这段代码产生的汇编代码找了出来: 真是不看不知道~~~一看才知道这个延时程序是多么的不准点~~~光看主要的那四条语句,就需要6个机器周期。也就是说,它的精度顶多也就是6us而已,这还没算上一条 lcall 和一条 ret。如果我们把调用函数时赋的i值根延时长度列一个表的话,就是: 因为函数的调用需要2个时钟周期的lcall,所以delay time比从函数代码的执行时间多2。顺便提一下,有的朋友写的是这样的代码: 可能有人认为这会生成更长的汇编代码来,但是事实证明: 其生成的代码是一样的。不过这的确不是什么好的习惯。因为这里实在没有必要再引入多余的变量。我们继续讨论正题。有的朋友为了得当更长的延时,甚至用了这样的代码: 这段代码产生的汇编代码是什么样子的?其实不用想也知道它是如何恐怖的$#^%&%$.。..。.让我们看一看: 呵呵,这倒是的确可以延迟很长时间~~~但是毫无精度可言了。 那么,用C到底能不能实现精确的延时呢?我把代码稍微改了一下: 因为根据经验,越简洁的C代码往往也能得出越简洁的机器代码。那这样结果如何呢?把它生成的汇编代码拿出来看一看就知道了。满怀希望的我按下了“Build target”键,结果打击是巨大的: 虽说生成的代码跟用for语句是不大一样,不过我可以毫无疑问的说,这两种方法的效率是一样的。似乎到此为止了,因为我实在想不出来源程序还有什么简化的余地。看来我就要得出来这个结论了:“如果需要us级的延时精度,需要时用汇编语言。”但是真的是这样吗?我还是不甘心。因为我不相信大名鼎鼎的 Keil C 编译器居然连 djnz 都不会用???因为实际上程序体里只需要一句 loop:djnz r7, loop。近乎绝望之际(往往人在这种情况下确可以爆发出来,哦呵呵呵~~~),我随手改了一下: 心不在焉的编译,看源码: 天~~~奇迹出现了。..。..我想这个程序应该已经可以满足一般情况下的需要了。如果列个表格的话: 计算延时时间时,已经算上了调用函数的lcall语句所花的2个时钟周期的时间。 终于,结果已经明了了。只要合理的运用,C还是可以达到意想不到的效果。很多朋友抱怨C效率比汇编差了很多,其实如果对Keil C的编译原理有一个较深入的理解,是可以通过恰当的语法运用,让生成的C代码达到最优化。即使这看起来不大可能,但还是有一些简单的原则可循的: 1.尽量使用unsigned 型的数据结构。 2.尽量使用char型,实在不够用再用int,然后才是long。 3.如果有可能,不要用浮点型。 4.使用简洁的代码,因为按照经验,简洁的C代码往往可以生成简洁的目标代码(虽说不是在所有的情况下都成立)。 END 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3平台首页_欧司朗公布Q1财报,计划出售数字照明系统业务

继1月底大幅调增本财年业绩指引后,欧司朗正式发布2021年第一季度财报(2020年10月至12月)。财报显示,欧司朗所有业务领域盈利趋势持续提升,其中光电半导体业务领域表现尤为突出,调整后EBITDA(息税折旧摊销前利润)创下新高。 欧司朗首席执行官Olaf Berlien表示:“过去一年,欧司朗采取了有效的管理措施以抵御外部危机,也因此使我们即便在新冠疫情的挑战之下仍然能逆势发展。我们在汽车业务和光电半导体业务领域取得的不俗成效就是很好的证明。更值得一提的是,我们在马来西亚居林的生产基地,为满足市场需求提供了强力的的保障。过去三年中,居林生产基地已经成为欧司朗光电半导体的重要支柱。” 欧司朗汽车业务(AM)、光电半导体业务(OS)、数字业务(DI)三个业务部门在新财年第一季度都取得了良好的市场表现。即使在新冠疫情期间,欧司朗在汽车改装与可更换照明设备领域的市场领先地位仍在持续加强。 汽车业务 三个业务部门在新财年第一季度都取得了良好的市场表现。即使在新冠疫情期间,欧司朗在汽车改装与可更换照明设备领域的市场领先地位仍在持续加强。在第一季度,汽车业务(AM)实现销售额4.74亿欧元,在可比基础上略有增长,调整后的EBITDA利润率较上年大幅增长,达到6,500万欧元。 光电半导体业务 在第一季度的业绩表现尤其出色,销售额增长近5%,达到3.56亿欧元,调整后EBITDA利润率超31%,创历史新高。这一系列的数据表明,在汽车和通用照明领域聚焦于高端科技的研发与应用至关重要,同时在马来西亚居林与德国雷根斯堡扩大产能,对未来的持续发展也有重要意义。 此前落实的业绩提升计划取得进一步成效。尽管受疫情影响,一季度销售额有所下降,但与上一财年第四季度相比,调整后EBITDA利润率环比增加600万欧元,自由现金流为正。 数月以来,欧司朗仔细评估了数字业务未来发展的各种可能性。随着欧司朗持续专注于光电领域的高科技转型,公司决定为数字业务旗下的电子与供电电源业务板块(DS, 数字照明系统)寻找潜在收购方。该业务板块作为市场上领先的技术供应商,未来将在其专业领域获得更大的发展空间。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3测速登录地址_只需8张图,让你彻底理解三极管的开关功能

晶体管(三极管)的功能之一就是作为开关,利用其截止特性,实现开关功能。但是很多人并不能很好的理解三极管的开关功能,下面以8个实例图片,生动的阐述三极管作为开关的功能。 1 低边开关 2 高边开关 3 基极电阻 4 非门电路 5 与门 6 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!