37、数字系统与电路构建全解析

数字系统与电路构建全解析

1. 二进制与十进制的转换

在数字世界里,二进制和十进制的转换是基础操作。二进制只有 0 和 1 两个数字,而十进制则是我们日常生活中常用的 0 - 9 数字系统。要将二进制转换为十进制,只需将二进制列中为 1 的位置对应的十进制等效值相加。

Base No 2⁷ 2⁶ 2⁵ 2⁴ 2⁰
Decimal Equivalent 128 64 32 16 8 4 2 1
Binary Number 0 1 1 1 1 1 1 1

如上述表格所示,该二进制数转换为十进制的计算过程为:64 + 32 + 16 + 8 + 4 + 2 + 1 = 127。

练习 1 :将以下数字转换为二进制,并通过转换回十进制来验证结果,需展示所有计算过程。
- 99
- 255
- 137

2. 二进制数的加减法

二进制数的加减法遵循与十进制类似的规则,但只有 0 和 1 两个允许的数字。实际上,计算机在进行减法运算时,也是通过加法来实现的。

练习 2 :以八位二进制表示法计算以下十进制数的加法,并检查答案。
- 23 + 21
- 35 + 123
- 125 + 75

示例 :计算 23 + 21 的八位二进制加法。
1. 先将 23 转换为八位二进制:0 0 0 1 0 1 1 1。
2. 再将 21 转换为八位二进制:0 0 0 1 0 1 0 1。
3. 进行加法运算:

  0 0 0 1 0 1 1 1
+ 0 0 0 1 0 1 0 1
─────────────────
  0 0 1 0 1 1 0 0
─────────────────
  1. 检查答案:将结果放入查找表,然后将十进制等效值相加。
    | Power | 2⁷ | 2⁶ | 2⁵ | 2⁴ | 2³ | 2² | 2¹ | 2⁰ |
    | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
    | Decimal Equivalent | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
    | Binary Number | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 |

总和为 32 + 8 + 4 = 44。

3. 二进制数的减法

微处理器系统通过使用数字的 2 的补码来进行减法运算,这实际上是一种加法方法。

练习 3 :使用八位二进制 2 的补码减去以下十进制数,并检查答案。
- 128 - 28
- 79 - 78
- 55 - 5
- 251 - 151

示例 :计算 128 - 28。
1. 将 128 转换为八位二进制:10000000。
2. 将 28 转换为八位二进制:00011100。
3. 取 00011100 的 2 的补码:
- 先取补码:1 1 1 0 0 0 1 1。
- 再加二进制 1:

  1 1 1 0 0 0 1 1
+ 0 0 0 0 0 0 0 1
─────────────────
  1 1 1 0 0 1 0 0
─────────────────
  1. 将 2 的补码与第一个二进制数相加:
  1 0 0 0 0 0 0 0
+ 1 1 1 0 0 1 0 0
─────────────────
  0 1 1 0 0 1 0 0
─────────────────

注意,第九位的进位被丢弃,因为只能有指定的八位数字。该二进制结果转换为十进制是 100,这是正确的结果。

4. 十六进制数系统

微处理器系统只能识别二进制格式的数据。为了方便输入程序代码,我们使用十六进制数系统。十六进制有 16 个唯一的数字:0 1 2 3 4 5 6 7 8 9 A B C D E F。一个十六进制数字代表四个二进制数字,因此每个八位二进制数可以用两个十六进制数字表示。

练习 4 :将以下八位二进制数转换为十六进制。
- 10011110
- 10101010
- 11111111
- 11110000
- 00001111
- 11001101

示例 :将 10011110 转换为十六进制。
1. 拆分八位为两个四位数字:1 0 0 1 │ 1 1 1 0。
2. 分别转换为十进制:9 │ 14。
3. 查找对应的十六进制:9 │ E。
所以,10011110 的十六进制表示是 9E。

5. 电路构建准备

构建电路板是一项需要耐心和技巧的工作。以下是构建电路板的准备步骤:

5.1 电路图设计

使用电子计算机辅助设计(ECAD)软件来设计电路图,确保电路按预期工作。常用的软件有:
- Proteus:Labcentre 开发的软件,可模拟电子电路,购买微控制器插件后可模拟很多 PIC 程序,但不是免费软件。
- Tina:Designsoft 开发的软件,功能与 Proteus 类似,学生版约 £50.00。

5.2 万能板布局规划

确认电路可行后,规划电路在万能板上的布局。一个好的规划可以节省空间,明确铜条间的连接位置以及切割铜轨以隔离电路部分的位置。

5.3 焊接准备

焊接需要准备以下工具:
- 具有可变温度设置的焊接台和用于固定组件的小夹子。
- 万用表,用于测试电路的连续性和各点的正确电压。
- 其他工具,如吸锡器、可调剥线钳、尖嘴钳、电线剪和轨道切割器。
- 万能板,使用前需清洁表面的锈迹,可使用硬化橡胶。

graph LR
    A[准备工作] --> B[电路图设计]
    A --> C[万能板布局规划]
    A --> D[焊接准备]
    B --> E[选择 ECAD 软件]
    E --> F[Proteus]
    E --> G[Tina]
    D --> H[焊接台]
    D --> I[万用表]
    D --> J[其他工具]
    D --> K[万能板]
6. 组件处理与焊接

准备好工具并清洁好所有要使用的物品后,就可以开始焊接了。

6.1 组件镀锡

在将组件焊接到电路板之前,先对组件进行镀锡,即在组件的导线部分涂上一层焊料。加热导线下方,待导线足够热时,在上方涂抹焊料,使其沿导线流下。注意不要熔化导线或组件的绝缘层。

6.2 组件焊接

尝试加热插入组件的孔周围的铜轨,确保组件上的焊料和铜轨在加热时真正混合在一起。使用万用表测试连接的连续性,避免出现干焊(有大量焊料但无电气连接)的情况。同时,要注意焊接飞溅,可使用放大镜查找。

7. 耐心与实践

即使遵循了所有建议,也不能保证一定能成功构建电路。每个人在尝试新事物时都会犯错,因此要有耐心,不要急于求成。在小部件上先进行练习,多练习才能提高技能。在开启电路之前,务必检查正电源和地之间是否存在短路,以免导致电源过热。

8. LCD 八位模式头文件

如果有多余的 I/O 引脚,使用 LCD 的八位模式会更简单。以下是用于 LCD 八位模式的头文件代码:

1.   /* A header file to use the LCD in 8 bit Mode
2.   Written By Mr H. H. Ward dated 31/10/15.*/
3.   //some definitions
4.   #define firstbyte      0b00110011
5.   #define secondbyte     0b00110011
6.   #define lines2bits8    0b00111100
7.   #define eightBitOp    0b00111000
8.   #define twoLines       0b00101100
9.   #define incPosition    0b00000110
10.         #define cursorNoBlink  0b00001100
11.         #define clearScreen     0b00000001
12.         #define returnHome      0b00000010
13.         #define lineTwo         0b11000000
14.         #define doBlink         0b00001111
15.         #define shiftLeft       0b00010000
16.         #define shiftRight      0b00010100
17.         #define lcdPort         PORTB
18.         #define eBit           PORTAbits.RA0
19.         #define RSpin          PORTAbits.RA1
20.         //some variables
21.         unsigned char lcdData, lcdTempData, rsLine;
22.         unsigned char n;
23.         //the subroutines
24.         char lcdInitialis [7] =
25.         {
26.         firstbyte,
27.         secondbyte,
28.         lines2bits8,
29.         incPosition,
30.         doBlink,
31.         clearScreen,
32.         returnHome,
33.         };
34.         void sendData ()
35.         {
36.         lcdPort = lcdData;
37.         eBit = 1;
38.         eBit = 0;
39.         TMR0 = 0; while (TMR0 < 15);
40.         }
41.         void lcdOut ()
42.         {
43.         lcdTempData = lcdData;
44.         sendData ();
45.         }
46.         void setUpTheLCD ()
47.         {
48.         RSpin = 0;
49.         n = 0;
50.         while (n < 7)
51.         {
       a.   lcdData = lcdInitialis [n];
       b.   lcdOut ();
       c.   n ++;
52.         }
53.         RSpin = 1;
54.         }
55.         void line2 ()
56.         {
57.         RSpin = 0;
58.         lcdData = lineTwo;
59.         lcdOut ();
60.         RSpin = 1;
61.         }
62.         void writeString (const char *words)
63.         {
64.         while (*words)
65.         {
       .    lcdData = *words;
       a.   lcdOut ();
       b.   *words ++;
66.         }
67.         }
68.         void clearTheScreen ()
69.         {
70.         RSpin = 0;
71.         lcdData = clearScreen;
72.         lcdOut ();
73.         lcdData = returnHome;
74.         lcdOut ();
75.         RSpin = 1;
76.         }
9. PIC18F4525 配置头文件

以下是用于 PIC18F4525 的配置头文件代码:

1.  /*This is a header file to set the configuration words 
for my projects
2.  It is written by myself, Mr. H. H. Ward, for the 
PIC18F4525
3.  It was created on the date 02/01/2019*/
4.  // PIC18F4525 configuration bit settings
5.  // ‘C’ source line config statements
6.  // CONFIG1H
7.  #pragma config OSC = INTIO67   // oscillator 
selection bits (internal oscillator block, port function 
on RA6 and RA7)
8.  #pragma config FCMEN = OFF   // fail-safe clock 
monitor enable bit (fail-safe clock monitor disabled)
9.  #pragma config IESO = OFF   // Internal/external 
oscillator switchover bit (oscillator switchover mode 
disabled)
10.  // CONFIG2L
11.  #pragma config PWRT = OFF   // Power-up timer 
enable bit (PWRT disabled)
12.  #pragma config BOREN = SBORDIS   // Brown-
out reset enable bits (Brown-out reset enabled in 
hardware only (SBOREN is disabled))
13.  #pragma config BORV = 3   // Brown-out reset 
voltage bits (minimum setting)
14.  // CONFIG2H
15.  #pragma config WDT = OFF   // Watchdog timer 
enable bit (WDT disabled (control is placed on the 
SWDTEN bit))
16.  #pragma config WDTPS = 32768   // Watchdog 
timer postscale select bits (1:32768)
17.  // CONFIG3H
18.  #pragma config CCP2MX = PORTC   // CCP2 MUX 
bit (CCP2 input/output is multiplexed with RC1)
19.  #pragma config PBADEN = ON   // PORTB A/D 
enable bit (PORTB<4:0> pins are configured as 
analog input channels on reset)
20.  #pragma config LPT1OSC = OFF   // Low-power 
timer1 oscillator enable bit (timer1 configured for 
higher-power operation)
21.  #pragma config MCLRE = ON   // MCLR pin enable 
bit (MCLR pin enabled; RE3 input pin disabled)
22.  // CONFIG4L
23.  #pragma config STVREN = ON   // Stack full/
underflow reset enable bit (stack full/underflow will 
cause reset)
24.  #pragma config LVP = OFF   // Single-supply ICSP 
enable bit (single- supply ICSP disabled)
25.  #pragma config XINST = OFF   // Extended 
instruction set enable bit (instruction set extension 
and indexed addressing mode disabled (legacy 
mode))
26.  // CONFIG5L
27.  #pragma config CP0 = OFF   // Code protection bit 
(Block 0 (000800- 003FFFh) not code-protected)
28.  #pragma config CP1 = OFF   // Code protection bit 
(Block 1 (004000- 007FFFh) not code-protected)
29.  #pragma config CP2 = OFF   // Code protection bit 
(Block 2 (008000-00BFFFh) not code-protected)
30.  // CONFIG5H
31.  #pragma config CPB = OFF   // Boot block code 
protection bit (Boot block (000000-0007FFh) not 
code-protected)
32.  #pragma config CPD = OFF   // Data EEPROM code 
protection bit (Data EEPROM not code-protected)
33.  // CONFIG6L
34.  #pragma config WRT0 = OFF   // Write protection 
bit (Block 0 (000800- 003FFFh) not write-protected)
35.  #pragma config WRT1 = OFF   // Write protection 
bit (Block 1 (004000- 007FFFh) not write-protected)
36.  #pragma config WRT2 = OFF   // Write protection 
bit (Block 2 (008000-00BFFFh) not write-protected)
37.  // CONFIG6H
38.  #pragma config WRTC = OFF   // Configuration 
register write protection bit (Configuration registers 
(300000-3000FFh) not write-protected)
39.  #pragma config WRTB = OFF   // Boot block write 
protection bit (Boot block (000000-0007FFh) not 
write-protected)
40.  #pragma config WRTD = OFF   // Data EEPROM write 
protection bit (Data EEPROM not write-protected)
41.  // CONFIG7L
42.  #pragma config EBTR0 = OFF   // Table read 
protection bit (Block 0 (000800-003FFFh) not 
protected from table reads executed in other blocks)
43.  #pragma config EBTR1 = OFF   // Table read 
protection bit (Block 1 (004000-007FFFh) not 
protected from table reads executed in other blocks)
44.  #pragma config EBTR2 = OFF   // Table read 
protection bit (Block 2 (008000-00BFFFh) not 
protected from table reads executed in other blocks)
45.  // CONFIG7H
46.  #pragma config EBTRB = OFF   // Boot block table 
read protection bit (Boot block (000000-0007FFh) not 
protected from table reads executed in other blocks)
47.  // #pragma config statements should precede 
project file includes
48.  // Use project enums instead of #define for ON 
and OFF
10. ASCII 字符集

以下是 ASCII 字符集的部分摘录,展示了常用的字符。

High Nibble 0000 CG.Ram Location 0010 0011 0100 0101 0110 0111
Low Nibble xxxx 0000 1 0 @ P \ P
0001 2 ! 1 A Q a
0010 3 2 B R b
0011 4 # 3 C S c
0100 5 $ 4 D T d
0101 6 % 5 E U e
0110 7 & 6 F V f
0111 8 7 G W g
1000 1 < 8 H X h
1001 2 > 9 I Y i
1010 3 * : J Z j
1011 4 + ; K [ k
1100 5 < L l |
1101 6 - = M ] m
1110 7 . > N ^ n
1111 8 / ? O _ o

通过以上内容,我们详细了解了数字系统中的二进制、十进制、十六进制转换,以及电路构建的相关知识和代码,希望能帮助你更好地掌握这些技能。

数字系统与电路构建全解析

11. 总结数字系统转换要点

在数字系统的学习中,二进制、十进制和十六进制的转换是基础且关键的内容。下面对这些转换要点进行总结:

转换类型 方法 示例
二进制转十进制 将二进制列中为 1 的位置对应的十进制等效值相加 二进制 01111111 转换为十进制:64 + 32 + 16 + 8 + 4 + 2 + 1 = 127
十进制转二进制 通常使用除 2 取余的方法,逆序排列余数得到二进制数 如练习中的 99、255、137 转换为二进制
二进制转十六进制 把八位二进制数拆分为两个四位二进制数,分别转换为十进制,再查找对应的十六进制数字 二进制 10011110 拆分为 1001 和 1110,十进制为 9 和 14,十六进制为 9E
graph LR
    A[二进制] --> B[十进制]
    A --> C[十六进制]
    B --> A
    C --> A
    B <--> C
12. 电路构建流程回顾

电路构建是一个系统的过程,从准备到焊接,每个步骤都至关重要。以下是电路构建的主要流程:

  1. 准备工作
    • 电路图设计 :利用 ECAD 软件(如 Proteus、Tina)设计并验证电路。
    • 万能板布局规划 :合理规划电路在万能板上的布局,确定铜条连接和铜轨切割位置。
    • 焊接准备 :准备焊接台、万用表、其他工具和清洁好的万能板。
  2. 组件处理
    • 组件镀锡 :在组件导线部分涂上焊料,注意避免损坏绝缘层。
    • 组件焊接 :加热铜轨使焊料与铜轨混合,使用万用表检测连续性,防止干焊和焊接飞溅。
  3. 检查与调试 :耐心检查电路,避免短路,通过实践不断提高技能。
13. 代码应用与分析

我们已经了解了 LCD 八位模式头文件和 PIC18F4525 配置头文件的代码内容,下面分析一下这些代码的应用场景。

  • LCD 八位模式头文件 :适用于有多余 I/O 引脚的情况,通过定义各种控制命令和操作函数,方便对 LCD 进行初始化、显示字符串、清屏等操作。例如:
void setUpTheLCD ()
{
    RSpin = 0;
    n = 0;
    while (n < 7)
    {
        lcdData = lcdInitialis [n];
        lcdOut ();
        n ++;
    }
    RSpin = 1;
}

此函数用于初始化 LCD,按照预设的命令序列依次发送到 LCD 进行配置。

  • PIC18F4525 配置头文件 :用于设置 PIC18F4525 微控制器的各种配置位,如振荡器选择、看门狗定时器设置、代码保护等。这些配置决定了微控制器的工作模式和性能。例如:
#pragma config OSC = INTIO67   // oscillator 
selection bits (internal oscillator block, port function 
on RA6 and RA7)

这行代码设置了振荡器选择为内部振荡器,同时指定了 RA6 和 RA7 的端口功能。

14. ASCII 字符集的作用

ASCII 字符集在计算机通信和数据处理中起着重要作用。它为每个字符分配了唯一的二进制编码,使得计算机能够识别和处理文本信息。在我们的电路设计中,如果涉及到字符显示或通信,就需要参考 ASCII 字符集。例如,在 LCD 显示字符串时,程序会将字符转换为对应的 ASCII 码,然后发送到 LCD 进行显示。

15. 学习建议与展望

学习数字系统和电路构建需要耐心和实践。以下是一些学习建议:

  1. 理论与实践结合 :在学习数字系统转换理论的同时,通过编写代码和实际操作电路来加深理解。
  2. 多做练习 :完成书中的练习题,巩固所学知识,提高解决问题的能力。
  3. 总结经验 :在电路构建过程中,及时总结遇到的问题和解决方法,不断积累经验。

未来,随着科技的发展,数字系统和电路设计将在更多领域得到应用。我们可以进一步探索更复杂的电路设计和优化方法,提高电路的性能和稳定性。同时,结合人工智能和物联网技术,开发出更智能、更高效的电子产品。

通过对数字系统转换、电路构建、代码应用和 ASCII 字符集的学习,我们掌握了一系列重要的知识和技能。希望大家在实践中不断探索和创新,取得更好的成果。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值