草庐IT

51单片机 | 如何学习单片机 | 开发板功能介绍 | 开发板使用方法 | 51单片机介绍

Drill_ 2023-07-29 原文

文章目录

一、如何学习单片机

1.学习哪种类型的单片机

  单片机有如下类型:51、AVR、MSP430、STM8、STM32、DSP、Linux、FPGA。

  • DSP、Linux、FPGA——非常高端的处理器
  • 51、AVR、MSP430、STM8、STM32——单片机

  作为初学者,首推51单片机。因为其操作简单,入门资料最丰富,上手较快。在学习 51 单片机的时,不能仅仅当做51 来学习,要当做“单片机”来学,要把单片机的内部资源都搞清楚、弄明白,每个内部资源模块的用法理解透彻,这样当遇到一个从没有用过的单片机,也能快速知道如何下手去使用它。

2.学习单片机的最佳方法

  单片机是一门实用技术。学习单片机需要在实践中成长,不断地练习。

  • 鹦鹉学舌
    一遍遍模仿,一遍遍抄代码
  • 照葫芦画瓢(关键步骤)
    第一步顺序完成后,在不看源代码的情况下,通过原理图和查找非源代码的任何资料,将当前课程的程序重新写出来实现其功能
  • 他山之石,可以攻玉
    单片机技术的最大特点就是可以通过修改程序来实现不同的功能。每完成一节课,要尽力完成预留作业,参考当前课程的程序思路,在此基础上结合自己的思考去完成作业。
  • 理论实践结合,温故而知新
    当大家把所有的课程按照前面 3 步完成后,这个时候不妨再把书本打开,再看看书,经过自己的实战经历,再看书的时候,对很多知识点会有一种恍然大悟的感觉。甚至可能有的知识点在当时学习时不明白,过了一段时间,回头再学习的时候,一下就明白了。

3.学习单片机的准备工作

  • 要有信心、恒心和耐心
  • 完善的配套课程
  • 计算机一台
    计算机是学习单片机必不可少的工具,在设计仿真电路、编写程序、查阅资料时都会用到它。
  • 开发板一块
    如果条件允许最好买一块开发板,这样编写的代码可直接在硬件上验证。

4.学习单片机的常见疑问

  1. 学完单片机能做什么
    单片机的应用非常广泛,电子、电气、自动化、通信等领域都有大量的应用。生活中常见的电子产品如:智能小车、LED 点阵屏、四轴飞行器、电子密码锁、门铃、超市储物柜、智能电饭煲、智能台灯、智能风扇等。工业领域的应用主要体现在单片机的控制、通信方面。

  2. 学习单片机应该学 C 还是汇编语言?
    在实际开发中,目前至少有 95%以上的工程师是使用 C 语言做单片机开发的,只有在一些特殊要求的场合才会用到汇编,所以这里强烈建议大家使用 C 语言开发。

二、开发板功能及使用介绍

1.开发板功能介绍

  我们先来看下开发板各功能模块,如下:

2.开发板使用方法

2.1 CH340 驱动安装

  上面我们介绍了开发板各个模块的功能,下面我们看看如何使用这款开发板。
  首先,拿到开发板,我们要安装下 USB 转串口 CH340 驱动,对于大多数电脑系统,将 USB 线连接电脑和开发板的 USB 接口后会自动检测安装 CH340 驱动,如果您的电脑没有自动安装 CH340 驱动,没关系,我们可以手动安装,打开资料目录:“\5–开发工具\2-开发板 CH340 驱动”,如下:

双击 SETUP.EXE 应用程序,出现如下界面,点击安装即可。

一段时间后,如果安装成功会显示如下界面:(前提:必须使用 USB 线将电脑 USB 口和开发板 USB 接口连接)。

驱动安装成功后可以打开打开资料目录“\5–开发工具\3-程序下载软件\PZ-ISP.exe”软件,查看串口号是否显示有“CH340”字样的串口,如果有则证明驱动安装成功,否则失败。如下:

2.2 程序下载

  安装好 CH340 驱动后,我们就可以下载程序了,在下载程序前先确认下开发板上的 USB 转 TTL 串口模块上的 P5 端子短接片是否短接好(即 P31T 与 URXD连接,P30R 与 UTXD 连接),出厂的时候该短接片默认已经短接好,如下所示:

PZ-ISP 是普中自主研发的自动下载软件,可一键下载,操作非常简单,推荐大家使用 PZ-ISP 软件下载程序。打开此软件选择对应的 51 单片机类型进行程序下载。具体操作如下:

  1. 打开“\5–开发工具\3-程序下载软件\PZ-ISP(推荐使用)”,如下图:

    鼠标双击该软件,弹出如下界面:(注意软件的版本号)(注意:此时默认你已经安装好了 CH340 驱动, 此时可以看到对应的串口号,我们这里显示的是“COM13 USB-SERIAL CH340”,你们电脑不一定是这个串口)
  2. 根据板载芯片型号是否含有 RC 来选择芯片类型,比如:板载芯片使用STC89C52RC 或 STC89C52RD+或 STC89C516RC 或 STC89C516RD+,则选择芯片类型为“STC89C52xxx-RC”。如果使用 STC89C52,则芯片类型为“STC89C52xx”。如下图:
  3. 将波特率设置为“128000”(如果发现此波特率下载速度比较慢,可以提高波特率,如果下载失败,可以把波特率降低,总之选择一个能下载的波特率),如下图:

    其他的选项我们保持默认设置。
    下面点击“打开文件”,操作如下:

    选择实验程序文件夹内.HEX文件,点击“打开”即可选择好需要下载的程序,操作如下:

    点击“程序下载”按钮即可完成程序下载。当程序下载完成,会提示程序下载成功,操作如下:

2.3 51仿真器调试

  可使用普中 51 仿真器插入单片机座进行在线调试,但是需要在 KEILC51 软件内设置。会在后续的“51工程模块创建”中详细说明。
  下面补充介绍51仿真器驱动安装方法。

  1. 51仿真器连接电脑USB口,连接好后电源指示灯会点亮。

    此时,在设备管理器中,找到设备
  2. 安装驱动
    在关闭电脑杀毒软件的情况下,“以管理员身份运行”驱动程序,

    选择路径为Keil C51的安装目录,点击安装
  3. 验证驱动程序是否安装成功
    打开实验程序,如果在魔术棒debug中能找到PZ51驱动程序,则表明驱动程序安装成功。

      下面补充介绍使用51仿真器仿真调试,以“LED流水灯”工程为例来演示如何仿真。
  • 在Debug选项卡中选择PZ51 Tracker Driver,并选中Run to main()
  • 在Debug选项卡中点击Settings,设置参数
  • Utilities选项卡中,选择驱动

选择start debug,结果如下:

将普中 51 仿真器插入单片机座进行在线调试。

2.4 实验现象

  最后,程序下载成功后即可观察到实验现象。以“点亮第一个LED显示灯”为例,其实验现象为:

三、51单片机介绍

1、51 单片机介绍

  一台能够工作的计算机要有这样几个部件构成:CPU(进行运算、控制)、 RAM(数据存储_掉电会丢失)、ROM(程序存储_掉电不丢失)、输入/输出设备(例如:串行口、并行输出口等)。而在单片机中,这些部件全部被做到一块集成电路芯片中,所以就称为单片机(也称微控制器MCU)。
  51 单片机是对所有兼容 Intel 8031 指令系统的单片机的统称。80C51 是 MCS-51 系列中的一个典型品种;其它厂商以 8051 为基核开发出的CMOS 工艺单片机产品统称为 80C51 系列。当前常用的 国产80C51 系列单片机主要产品有:STC(国产宏晶)单片机:STC89C51、STC89C52、STC89C516、STC90C516 等众多品牌。
  80C51 芯片管脚图如下所示:

上图中左图是 51 单片机非常经典的管脚图,通常采用的是 DIP-40 封装。其内部资源如下:

  • 8位CPU
  • 4kbytes 程序存储器(ROM) (52 为 8K)
  • 128bytes 的数据存储器(RAM) (52 有 256bytes 的 RAM)
  • 32 条 I/O 口线(P0.0到P0.7,P1.0到P1.7,P2.0到P2.7,P3.0到P3.7)
  • 111 条指令,大部分为单字节指令
  • 21 个专用寄存器
  • 2 个可编程定时/计数器
  • 5 个中断源,2 个优先级(52 有 6 个)
  • 一个全双工串行通信口(RXD与TXD),stc芯片可利用串口下载芯片,也可以实现串口通信
  • 外部数据存储器寻址空间为 64kB
  • 外部程序存储器寻址空间为 64kB
  • 逻辑操作位寻址功能
  • 双列直插 40PinDIP 封装
  • 单一+5V 电源供电
  • CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器。
  • RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;
  • ROM:用以存放程序、一些原始数据和表格;
  • I/O 口:四个 8 位并行 I/O 口,既可用作输入,也可用作输出
  • T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在计数模式;
  • 五个中断源的中断控制系统;
  • 一个全双工 UART(通用异步接收发送器)的串行 I/O 口,用于实现单片机之间或单片机与微机之间的串行通信;
  • 片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最佳振荡频率为 6M—12M。

其内部结构图如下所示:

总线(BUS)是单片机各部件之间传送信息的公共通道。单片机中有内部总线和外部总线两类,内部总线是 CPU 内部之间的连线,外部总线是指 CPU 与其它部件之间的连线;外部总线有三种: 数据总线 DB(Data Bus),地址总线 AB(Address Bus)和控制总线 CBControl Bus)。我们学习的是定时计数器、并行I/O口、串行通信口和中断系统。

2、STC89Cxx 芯片介绍

2.1 STC89Cxx命名规则


  上图可看到芯片表面印有 STC89C52RC 40I-PDIO40 1947H0XN52.X90C 丝印,下面我们了解下芯片表面丝印的含义:

  • STC–表示芯片为 STC 公司生产的产品,其他公司的也有 AT、i、SST 等。
  • 8–表示该芯片为 8051 内核芯片
  • 9–表示内部含有 Flash EEPROM 存储器,还有如 80C51 中 0 表内部含有MaskROM(掩模 ROM)存储器;如 87C51 中 7 表示内部含有 EPROM(紫外线可擦除ROM)存储器。
  • C–表示该器件为 CMOS 产品。还有如 89LV52 和 89LE58 中的 LV 和 LE 都表示该芯片为低电压产品(通常为 3.3V 电压供电);而 89S52 中 S 表示该芯片含有可串行下载功能的 Flash 存储器,即具有 ISP 可在线编程功能。
  • 5–固定不变
  • 2–表示该芯片内部程序存储(FLASH)空间大小,1 为 4KB,2 为 8KB,3 为12KB,即该数乘以 4KB 就是芯片内部的程序存储空间大小。程序空间大小决定了一个芯片所能装入执行代码的多少。一般来说,程序存储空间越大,芯片价格也越高,所以我们再选择芯片的时候要根据自己需求选择合适芯片
  • RC–STC 单片机内部 RAM(随机读写存储器)为 512B。还有如 RD+表示内部RAM 为 1280B。还有芯片会省略此部分。
  • 40–表示芯片外部晶振最高可接入 40MHz。对 AT 单片机数值一般为 24,表示外部晶振最高位 24MHz。
  • I–产品级别,表示芯片使用温度范围。
    • C 表示商业级,温度范围为 0~+70 度。
    • I 表示工业级,温度范围为-40~+85 度。
    • A 表示汽车级,温度范围为-40~+125 度。
    • M 表示军用级,温度范围为-55~+150 度。
  • PDIP40–产品封装型号。PDIP 表示双列直插式
  • 1947–表示本批芯片生产日期为 19 年第 47 周
  • H0XN52.X90C–不详,有关资料显示,此标号表示芯片制造工艺或处理工艺

2.2 STC89Cxx内部资源介绍

  STC89C51 是 STC 推出的新一代超强抗干扰/高速/低功耗的 51 单片机,它是采用 8051 核的 ISP(In System Programming)在系统可编程芯片,指令代码完全兼容传统的 8051 单片机,最高工作时钟频率为 80MHz,片内含 4K Bytes 的可反复擦写 1000 次的 Flash 只读程序存储器,器件兼容标准 MCS-51 指令系统及80C51 引脚结构,芯片内集成了通用 8 位中央处理器和 ISP Flash 存储单元,具有在系统可编程(ISP)特性,配合 PC 端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。STC89C51 系列单片机是单时钟/机器周期(1T)的兼容 8051 内核单片机,是高速/ 低功耗的新一代8051 单片机,全新的流水线/精简指令集结构,内部集成 MAX810 专用复位电路。其特性功能主要如下:

  1. 增强型 8051 单片机,6 时钟/机器周期和 12 时钟/机器周期可任意选择,指令代码完全兼容传统 8051。
  2. 工作电压: 5.5V - 3.3V (5V 单片机) / 3.6V - 2.0V (3V 单片机)
  3. 工作频率范围: 0~40MHz,相当于普通 8051 的 0~80MHz,实际工作频率可达 48MHz
  4. 用户应用程序空间: 4K / 8K / 13K / 16K / 32K / 64K 字节(STC89C516)
  5. 片上集成 1280 字节或 512 字节或 256 字节 RAM
  6. 通用 I/O 口(35/39 个), 复位后为:P1/P2/P3/P4 是准双向口/弱上拉(普通 8051 传统 I/O 口); P0 口是开漏输出,作为总线扩展用时,不用加上拉电阻,作为 I/O 口用时,需加上拉电阻。
  7. ISP(在系统可编程) / IAP(在应用可编程), 无需专用编程器, 无需专用仿真器,可通过串口( RxD/P3.0, TxD/P3.1)直接下载用户程序,数秒即可完成一片。
  8. 有 EEPROM 功能
  9. 看门狗
  10. 内部集成 MAX810 专用复位电路(HD 版本和 90C 版本才有),外部晶体20M 以下时,可省外部复位电路,复位脚可直接接地。
  11. 有 3 个 16 位定时器/ 计数器,其中定时器 0 还可以当成 2 个 8 位定时器使用。
  12. 外部中断 4 路,下降沿中断或低电平触发中断,Power Down 模式可由外部中断低电平触发中断方式唤醒。
  13. 通用异步串行口(UART),还可用定时器软件实现多个 UART
  14. 工作温度范围: -40 ~ +85℃(工业级) / 0 ~ 75℃(商业级)
  15. 封装: LQFP-44, PDIP-40, PLCC-44, PQFP-44。

2.3 STC89Cxx脚位判定

  下图我们可以看到 51 单片机不同封装的引脚图,


在讲解各引脚含义之前,我们首先应该学会如何在实物上区分引脚序号,基于 8051 内核的单片机,若引脚数相同,或封装相同,它们的引脚功能是相同的,其中用的较多的是 40 脚 DIP 封装的 51 单片机,也有 20,28,32,44 等不同引脚数的 51 单片机。
  无论哪种芯片,单片机也好,其他不知名的芯片也好,当我们观察它的表面时,大都会找到一个凹进去的小圆坑,或是用颜色标记的一个小标记(圆点或三角或其他小图形),这个小圆坑或者小标记所对应的引脚就是这个芯片的第 1 脚,然后逆时针方向数下去,即 1 到最后一个引脚。对于 DIP 封装,小圆坑在芯片上方正中间位置,对应左边第一个脚位为 1;对于 PLCC 封装,小圆坑在芯片上方正中间位置,对应脚位为 1;在实际焊接或绘制电路板时,大家务必要注意它们的脚位标号,否则若焊接错误则导致产品无法正常工作。

2.4 STC89Cxx脚功能

  下面我们以上图 PDIP 封装引脚图为例介绍各个引脚的功能,40 引脚我们按其功能类别可分为四类:

  • 电源引脚,如 VCC、GND
  • 时钟引脚,如 XTAL1、XTAL2
  • 编程控制引脚,如 RST、PSEN、ALE/PROG、EA/Vpp
  • I/O 口引脚,如 P0、P1、P2、P3,4 组 8 位 I/O 口
  • VCC(40 脚)、GND(20 脚):电源引脚,不同型号单片机接入对应电压,常压为+5V,低压为+3.3V,大家在使用时要查看其芯片所要求的电压。
  • XTAL1(19 脚)、XTAL2(18 脚):外接时钟引脚。XTAL1 为片内振荡电路的输入端,XTAL2 为片内振荡电路的输出端。8051 的时钟有两种方式,一种是片内时钟振荡方式,即需在这两个引脚处外接石英晶振和振荡电容,振荡电容的值一般取 10p~30p;另一种是外部时钟方式,即将 XTAL1 接地,外部时钟信号从 XTAL2脚输入。通常使用第一种方式
  • RST(9 脚):复位引脚。当输入连续两个机器周期以上高电平时为有效,用来完成单片机的复位初始化操作,即单片机从头开始执行程序。
  • PSEN(29 脚):程序存储器允许输出控制端。在读外部程序存储器时 PSEN低电平有效,以实现外部程序存储器单元的读操作,由于现在我们使用的单片机内部已经有足够大的 ROM,所以几乎没有人再去扩展外部 ROM,因此这个引脚大家只需了解即可
  • ALE/PROG(30 脚):在扩展外部 RAM 时,ALE 用于控制把 P0 口的输出低 8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。ALE 有可能是高电平也有可能是低电平,当 ALE 为高电平时,允许地址锁存型号,当访问外部存储器时,ALE 信号负跳变(即由正变负)将 P0 口上低 8 位地址信号送入锁存器;当ALE 为高电平时,P0 口上的内容和锁存器输出一致。关于锁存器后面我们会有介绍。在没有访问外部存储器期间,ALE 以 1/6 振荡周期频率输出(即 6 分频),当访问外部存储器时,以 1/12 振荡周期输出(12 分频)。从这里可以看到,当没有扩展外部 RAM 时,ALE 会以 1/6 振荡周期的固定频率输出,因此可以作为外部时钟,或作为外部定时脉冲使用。PROG 为编程脉冲的输入端,单片机的内部有程序存储器(ROM),它的作用是用来存放用户需要执行的程序,那么我们怎样才能将写好的程序存入这个 ROM 中呢?实际上,我们是通过编程脉冲输入才写进去的,这个脉冲的输入端口就是 PROG。现在绝大多数单片机都已经不需要编程脉冲引脚往内部写程序了,比如我们使用的 STC 单片机,它可以直接通过串口往里面写程序,只需要三条线与计算机相连即可。而且现在的单片机内部都已经带有丰富的 RAM,所以也不需要再扩展 RAM 了,因此 ALE/PROG 引脚用于不大,大家了解即可
  • EA/Vpp(31 脚):EA 接高电平时,单片机读取内部程序存储器。当扩展有外部 ROM 时,当读取完内部 ROM 后自动读取外部 ROM。EA 接低电平时,单片机直接读取外部 ROM。我们没有外扩 ROM,并且需要单片机直接读取内部程序存储器,因此 EA/Vpp 脚直接接高电平。
  • P0 口(39 脚~32 脚):双向 8 位三态 I/O 口,每个口可独立控制。51 单片机 P0 口内部没有上拉电阻,若输出高时为高阻态,不能正常输出高电平,因此该组 I/O 口,每个口可独立控制。51 单片机 P0 口内部没有上拉电阻,若输出高时为高阻态,不能正常输出高电平,因此该组 I/O 口在使用时务必要外接上拉电阻,一般我们选择接入 10K 欧上拉电阻。
  • P1 口(1 脚~8 脚):准双向 8 位 I/O 口,每个口可独立控制,内部自带上拉电阻,这种接口输出没有高阻态,输入也不能锁存,故不是真正的双向 I/O 口。之所以称它为“准双向”是因为该口在作为输入使用前,要先向该口进行写 1 操作,然后单片机内部才可正确读出外部信号,也就是要使其先有个“准”备过程,所以才称为准双向口。对 52 单片机 P1.0 引脚的第二功能未 T2 定时器/计数器的外部输入,P1.1 引脚的第二功能为 T2EX 捕捉、重装触发,即 T2 的外部控制端
  • P2 口(21 脚~28 脚):准双向 8 位 I/O 口,每个口可独立控制,内部自带上拉电阻,与 P1 口相似。
  • P3 口(10 脚~17 脚):准双向 8 位 I/O 口,每个口可独立控制,内部自带上拉电阻。作为第一功能使用时就当做普通 I/O 口,与 P1 口相似。作为第二功能使用时,各引脚的定义如下:

    从图中可知,P3 口的每一个引脚均可独立定义为第一功能的输入/输出或第二功能

3、51 单片机能做什么

  51 单片机主要用于“控制”,通过串口可以和 WFIF/GPS/蓝牙等模块实现无线控制,通过 AD 接口可以采集光敏/烟雾传感器/可燃气体传感器等模拟信号,还可以使用 AD 设计简易示波器。当然还包括直流电机、交流电机、步进电机、伺服电机、变频电机、电磁铁、电磁阀、LED、LCD 等等,进而由这些去驱动各种设备,应用于家电、机械加工、制造、航空航天等各行各业。
  日常生活中可采用 51 单片机设计的电子产品:智能手环,微型四轴飞行器,平衡车、扫地机、移动 POST 机,智能电饭锅,3D 打印机、机器人等。

4、怎样学好 51 单片机

  • 基本外设
    GPIO 输入输出,外部中断,定时器,串口。理解了这四个外设,基本入门了一款 MCU。
  • 掌握基础的数字电路和模拟电路知识
    51 单片机开发中,涉及的电路并不复杂,对于初学者来说只需要一些基础的数电和模电知识即可。比如:二极管导通特性、三极管工作原理等。至于数字芯片,只需学会看对应的数据手册即可
  • C 语言能力要加强
    《C 程序设计 第四版》
    《C与指针》
    《C指针编程之道》
  • 多动手编程
  • 遇到问题多百度多浏览论坛
    普中科技论坛:www.prechin.net
    51 单片机论坛:http://bbs.21ic.com/icfilter-typeid-11-211.html

有关51单片机 | 如何学习单片机 | 开发板功能介绍 | 开发板使用方法 | 51单片机介绍的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  7. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  8. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  9. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  10. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

随机推荐