简介:本项目通过STC89C52单片机和595串行移位寄存器的结合,实现16x16点阵显示屏的汉字显示功能。关键知识点包括STC89C52微控制器的工作原理、点阵显示屏的驱动方式、串行移位寄存器的并行扩展、汉字编码及点阵字库的建立和解析,以及中断和定时器等控制技术。该项目对理解嵌入式系统开发具有实践意义。
1. STC89C52单片机特性与应用
STC89C52单片机,作为经典8051架构的衍生产品,是众多电子爱好者和专业工程师所熟悉和应用的基础控制单元。本章节将深入探索STC89C52单片机的特性,以及在实际应用中如何发挥其强大的功能,从而满足不同场景下的应用需求。
1.1 STC89C52单片机核心特性
STC89C52具有以下几个核心特性:
- 内核 :基于8051内核,支持标准的8051指令集。
- 存储资源 :拥有8KB的内部程序存储器(Flash ROM)和128字节的内部数据存储器(RAM)。
- I/O端口 :提供了4个8位并行I/O端口,共32个I/O口线。
1.2 应用领域与优势
STC89C52在多种应用中脱颖而出,它的优势在于:
- 成本效益 :相对低廉的价格和广泛的应用基础,使其在预算有限的项目中非常受欢迎。
- 稳定性 :因其稳定性和可靠性,被广泛用于工业控制、消费电子产品、智能仪表等领域。
- 编程灵活性 :支持多种编程语言和开发环境,便于开发人员根据项目需求选择合适的开发工具。
通过接下来的章节,我们将逐一深入了解STC89C52单片机在点阵屏汉字显示系统中的应用,以及如何设计和实现一个完整的解决方案。
2. 16x16点阵显示屏的显示原理和驱动设计
2.1 16x16点阵显示屏的基本工作原理
2.1.1 点阵显示屏的结构组成
在深入探讨16x16点阵显示屏的工作原理之前,首先要了解其结构组成。点阵显示屏由LED(发光二极管)构成,每个LED对应显示屏上的一个点。在一个16x16的点阵中,总共有256个LED。这些LED被排列成16行和16列,行列交叉点上的LED可以独立控制。
显示屏的关键组成部分包括:
- LED:作为显示单元,可以根据电流的有无来控制其开和关。
- 行驱动器:控制LED行的导通与关闭,从而控制哪一行的LED亮起。
- 列驱动器:控制LED列的导通与关闭,从而控制哪一列的LED亮起。
这些组件的协同工作使得显示屏可以以点阵形式显示字符或图案。
2.1.2 点阵显示屏的驱动方式
16x16点阵屏通常采用行列扫描的方式来驱动。每个LED作为显示点,在行和列的交叉处点亮。具体来说,通过逐行扫描,控制某一时刻只有一行被激活,而列上相应的LED点根据需要被点亮或熄灭。这通过行驱动器和列驱动器协同工作来实现。
2.2 点阵显示屏的驱动电路设计
2.2.1 驱动电路的构成与原理
驱动电路是控制点阵显示屏的关键部分。基本构成包括:
- 行驱动电路:通常由行解码器和行驱动器组成。
- 列驱动电路:通常由列驱动器组成,有时也会使用列解码器。
行驱动电路控制16个行信号,而列驱动电路控制16个列信号。行列扫描的一个重要原则是,行列不能同时导通,否则会导致短路。因此,行列扫描需要互斥进行。
行驱动电路的原理是将输入的行信号通过解码转换为驱动LED的信号,而列驱动电路则是将输入的列信号转换为通过LED的电流。
2.2.2 驱动电路的实践应用
在实践应用中,行驱动电路往往采用诸如ULN2803A之类的驱动芯片,因为它能够提供足够的电流驱动能力,并且具备对LED短路的保护功能。列驱动电路则可能使用诸如74HC595的移位寄存器来减少IO口数量的需求,通过串行输入并行输出的特性,能够有效地降低单片机IO口的使用压力。
接下来,我们会通过实际的电路图和代码来展示驱动电路的构建和应用。
2.3 实践操作:驱动电路的构建与示例代码
2.3.1 构建驱动电路
以一个具体的驱动电路为例,我们首先需要准备以下元件:
- 74HC595移位寄存器若干,以减少IO端口使用
- ULN2803A 驱动芯片,用于行驱动
- LED点阵模块,例如16x16 LED点阵显示屏
- 相应的电阻和连线
驱动电路的构建步骤如下:
1. 将74HC595的VCC接单片机的5V供电,GND接地。
2. 将ULN2803A的输入端接74HC595的输出端,输出端通过电阻连接到LED点阵的行端。
3. LED点阵的列端直接连接到单片机的IO口,或者通过另一个74HC595连接。
2.3.2 示例代码与逻辑分析
下面是一个简化的示例代码,用于演示如何通过单片机控制74HC595和ULN2803A来驱动16x16 LED点阵显示”HELLO”字样。
#include <reg52.h> // 包含STC89C52单片机寄存器定义
// 定义74HC595控制引脚
sbit HC595_SER = P2^0; // 串行数据输入
sbit HC595_RCLK = P2^1; // 存储寄存器时钟输入
sbit HC595_SRCLK = P2^2; // 移位寄存器时钟输入
// 初始化74HC595
void HC595_Init() {
HC595_SER = 0;
HC595_RCLK = 0;
HC595_SRCLK = 0;
}
// 发送一个字节到74HC595
void HC595_SendByte(unsigned char dat) {
unsigned char i;
for (i=0; i<8; i++) {
HC595_SER = dat & 0x80; // 取最高位
dat <<= 1; // 左移一位
HC595_SRCLK = 1; // 产生上升沿
HC595_SRCLK = 0;
}
}
// 刷新LED显示
void RefreshLED() {
// 这里需要根据实际连接方式来编写代码,将要显示的数据通过74HC595输出到LED点阵的行和列
}
void main() {
unsigned char led_data[16];
HC595_Init(); // 初始化74HC595
while (1) {
// 循环显示字符"HELLO",这里省略字符"HELLO"的点阵数据和显示逻辑
RefreshLED();
}
}
代码中涉及的函数 HC595_Init() 用于初始化74HC595引脚状态, HC595_SendByte() 用于发送一个字节的数据到74HC595的移位寄存器中,而 RefreshLED() 函数负责刷新LED显示屏,将显示数据通过74HC595输出到LED点阵的行和列,控制LED的显示状态。
2.4 驱动电路设计与实践应用的总结
本章节深入探讨了16x16点阵显示屏的基本工作原理和驱动电路的设计。我们介绍了点阵显示屏的结构组成、驱动方式,并且具体到电路设计的每一个细节,包括选择合适的驱动芯片、构建电路的实际步骤,以及如何通过代码来控制显示屏。
在驱动电路的设计中,使用了移位寄存器74HC595和驱动芯片ULN2803A,这不仅节约了IO端口资源,还提高了系统的稳定性和可扩展性。同时,实践操作部分提供了构建驱动电路和编写示例代码的具体步骤,以加深理解。
通过以上的学习,我们应该能够掌握如何设计和实现一个16x16点阵显示屏的驱动电路,并通过编程来控制其显示文字或图案。这为进一步开发复杂的显示系统奠定了坚实的基础。
3. 595串行移位寄存器的使用及其并行扩展方案
3.1 595串行移位寄存器的功能与特性
595串行移位寄存器是一种常见的数字电路组件,它能以串行的方式接收数据,并将数据存储在内部的寄存器中。595以其简单的接口、可扩展性和成本效益,在点阵显示及其它数字接口应用中颇受欢迎。
3.1.1 595的工作原理和特性
595芯片通常有两个主要的工作方式:串行输入(SH_CP)和并行输出(Q7-Q0)。其基本工作原理是利用串行输入端接收数据,在每个时钟信号的上升沿,数据会移入寄存器中。当数据完全移入后,可以通过并行输出端输出到其它设备,如LED驱动器或其它电路。
595的主要特性包括:
- 8位移位寄存器;
- 8位锁存器,用于存储暂未输出的数据;
- 输出端允许级联,以实现更多的输出端口;
- 高电平触发时钟;
- 可通过复位端来清空寄存器中的数据。
代码块示例:
// 595寄存器控制示例代码
void shiftOut(int dataPin, int clockPin, byte val) {
for (int i = 0; i < 8; i++) {
digitalWrite(dataPin, !!(val & (1 << (7 - i)))); // 从最高位开始输出数据
digitalWrite(clockPin, HIGH);
delayMicroseconds(1); // 确保时钟信号稳定
digitalWrite(clockPin, LOW);
}
}
上述代码通过定义一个 shiftOut 函数,以模拟595寄存器的串行输入操作。其中 dataPin 和 clockPin 代表数据和时钟输入端, val 是要串行输入的数据。
3.1.2 595在点阵显示中的应用
595在点阵显示中的应用主要是因为它能够提供更多的输出引脚,这对于控制大型LED点阵非常有用。通常情况下,一个8x8点阵就需要64个输出引脚,而一个595可以提供8个输出引脚,因此通过级联多个595,可以有效地减少所需的控制引脚数量。
3.2 595寄存器的并行扩展技术
595寄存器的并行扩展技术是通过多个595芯片的级联来实现的,每一个595控制点阵的一行或一列。这样的设计可以极大地扩展可用的输出引脚数量,同时还能减少单片机的I/O资源占用。
3.2.1 并行扩展的原理与实现方法
并行扩展的基本原理是将多个595的串行输出连接到下一级的串行输入,这样第一个595的输出就能被第二个595作为输入数据接收,以此类推,形成一个“数据链”。每个595都有一个共同的时钟信号(SH_CP)和一个共同的锁存信号(ST_CP),以保持它们动作的同步。
代码块示例:
// 595级联控制示例代码
void sendToShiftRegister(int dataPin, int clockPin, int latchPin, byte data) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, data);
digitalWrite(latchPin, HIGH);
}
// 并行扩展发送数据到多个595寄存器
void updateShiftRegisters(byte *dataArray, int numRegisters, int dataPin, int clockPin, int latchPin) {
for (int i = 0; i < numRegisters; i++) {
sendToShiftRegister(dataPin, clockPin, latchPin, dataArray[i]);
// 可以在每个数据移位后增加延时,以控制显示速度
delayMicroseconds(2);
}
}
上面的代码展示了如何使用 shiftOut 函数,通过级联595芯片来扩展输出。函数 sendToShiftRegister 用于发送单个字节到595,而 updateShiftRegisters 则将数组中的字节序列发送到一个595链。
3.2.2 并行扩展的实践应用案例
实际应用中,例如要控制一个16x16的点阵,需要128个输出引脚来驱动每一个LED。通过级联8个595寄存器,每个595控制16个LED(16列),然后使用另一个595寄存器来控制行。这样,总共只需要9个控制引脚即可。
实践案例表格:
| 并行扩展级别 | 需要595寄存器数量 | 实际控制LED数量 | 控制引脚数量 |
|---|---|---|---|
| 1x | 8 | 64 | 3 |
| 2x | 16 | 128 | 4 |
| 3x | 24 | 192 | 5 |
注:上表中的控制引脚数量计算包括了两个时钟信号和一个锁存信号。
并行扩展应用实践案例mermaid流程图:
graph LR
A[单片机] -->|数据| B[595 #1]
A -->|时钟| C[595 #1]
A -->|锁存| D[595 #1]
B -->|数据| E[595 #2]
C -->|时钟| E
D -->|锁存| E
B -->|数据| F[595 #3]
C -->|时钟| F
D -->|锁存| F
...
F -->|数据| G[595 #n]
C -->|时钟| G
D -->|锁存| G
G -->|并行输出| H[LED点阵]
该流程图展示了从单片机到多个595寄存器的并行扩展链,最终连接到LED点阵的控制结构。每个595寄存器负责一部分LED的控制,整个链共同完成点阵显示任务。
4. 汉字编码和点阵字库解析
汉字编码和点阵字库是实现汉字显示的基础,它关系到单片机控制点阵屏能否正确显示汉字。了解汉字编码标准以及如何设计和实现点阵字库,是每一位进行点阵显示项目开发者必须掌握的关键技术点。
4.1 汉字编码标准的介绍
4.1.1 GB2312编码标准概述
GB2312是中国国家标准简体中文字符集,包含了6763个汉字以及682个其它字符。该标准定义了一个二维的94行94列的编码空间,每个汉字或符号都对应一个区位码。区码范围从16到87,位码范围从01到94。汉字编码由区位码转换而来,转换方式为:区码+0xA0,位码+0xA0。
例如,汉字“啊”的区位码是1601,转换成GB2312编码后就是B0A1。
GB2312编码中,低字节范围为0x21-0x7E,高字节范围为0x21-0x7E和0x80-0xFE。对于区位码位于10-15和88-94的空位,这些位置通常用于特殊符号或者不常用字。
4.1.2 汉字编码在点阵显示中的应用
在点阵显示中,我们需要将汉字编码转换成点阵图案,才能在显示屏上显示出来。这个转换过程需要一个字库,字库中存储了汉字编码对应的所有点阵信息。
当单片机需要显示一个汉字时,它首先会查询字库,找到汉字对应的点阵数据,然后通过驱动电路将这些数据发送给点阵显示屏,从而显示出汉字图案。
字库存储可以采取多种方式,常见的有直接存储和代码页存储。直接存储是将每个汉字的点阵图案直接存储在存储器中,代码页存储则是存储每个编码对应的点阵数据的起始地址。
4.2 点阵字库的设计与实现
4.2.1 点阵字库的结构与存储方式
点阵字库存储了每个汉字的点阵数据,通常以字节为单位,每个字节代表点阵的8行。在16x16点阵中,每个汉字需要占用32字节(16行x2字节)。
点阵字库可以采用行优先或者列优先的顺序存储汉字的点阵数据。行优先是指先存储汉字点阵的第一行,再存储第二行,以此类推;列优先则是先存储汉字点阵的第一列,再存储第二列。
存储方式的选择会影响到点阵数据的读取速度,以及程序的编写复杂度。列优先读取速度更快,但是代码编写稍复杂;行优先代码编写简单,但是读取速度稍慢。
4.2.2 字库中汉字的提取与显示
从字库中提取汉字的点阵数据后,需要将其发送到16x16点阵显示屏上。由于显示屏的驱动电路通常是8位的,因此需要将16x16的点阵数据分解成16行,每行8个像素的8位数据。
具体实现时,可以通过编程逻辑将16x16点阵数据分为两部分,分别是上8行和下8行。然后将这16行数据以8位宽的方式逐行传递给行驱动器。
以一个具体的例子来看提取和显示过程,假设我们要显示“汉”字。在字库中找到“汉”字的点阵数据,然后将其分割为两部分:上部8行和下部8行,分别存储。最后,依次通过移位寄存器将数据发送给显示屏。
在实际的程序中,可以使用C语言或汇编语言来实现这个过程。下面是一个简化的C语言代码示例,展示了如何从字库中提取汉字的点阵数据,并将其发送到点阵屏:
// 假设字库中汉字的点阵数据格式为uint8_t数组
uint8_t hanzi_data[32] = { /* ... 省略具体数据 ... */ };
// 函数:提取并发送上部8行点阵数据到点阵屏
void send_upper_8_rows(uint8_t *data) {
for (int i = 0; i < 8; i++) {
// 将8位点阵数据发送到移位寄存器
send_data_to_shift_register(data[i]);
}
}
// 函数:提取并发送下部8行点阵数据到点阵屏
void send_lower_8_rows(uint8_t *data) {
for (int i = 8; i < 16; i++) {
// 将8位点阵数据发送到移位寄存器
send_data_to_shift_register(data[i]);
}
}
// 主程序
int main() {
// 提取点阵数据
uint8_t upper_rows[8];
uint8_t lower_rows[8];
for (int i = 0; i < 8; i++) {
upper_rows[i] = hanzi_data[i];
lower_rows[i] = hanzi_data[i + 8];
}
// 发送点阵数据到点阵屏
send_upper_8_rows(upper_rows);
send_lower_8_rows(lower_rows);
return 0;
}
// 函数:将数据发送到移位寄存器(示例,具体实现依赖硬件接口)
void send_data_to_shift_register(uint8_t data) {
// 将数据发送到硬件接口的逻辑代码
}
上述代码展示了如何通过分割和循环将字库中的点阵数据发送到点阵屏。实际应用中,字库存储和发送的代码会更复杂,需要考虑硬件操作的具体细节。
通过本章的介绍,我们可以看到汉字编码和点阵字库的实现与优化是实现汉字显示的关键。正确地理解和掌握这些知识,对于开发点阵汉字显示系统具有重要的实际意义。在下一章中,我们将进一步深入探讨单片机控制技术在点阵汉字显示中的应用。
5. 单片机控制技术在点阵汉字显示中的应用
5.1 单片机中断技术与应用
5.1.1 中断的基本概念与工作原理
中断技术是单片机内部设计的核心功能之一,允许单片机在执行主程序的同时,能够响应外部或内部的突发事件,并及时处理这些事件。简而言之,当中断发生时,单片机将暂停当前程序的执行,转而执行一个与中断事件相关的程序,称为中断服务程序。执行完毕后,再返回到之前被中断的位置继续执行主程序。
在单片机的工作过程中,通常将中断分为两大类:硬件中断和软件中断。硬件中断来源于单片机的外部事件,例如按钮按下,定时器溢出等;软件中断通常是通过执行特定的指令来模拟中断事件,用于实现更复杂的控制流程。
5.1.2 中断技术在点阵显示中的实践应用
在点阵汉字显示系统中,中断技术可以被用来实现更流畅的显示效果。比如,可以通过定时器中断定时刷新点阵显示屏的显示内容,确保显示不会出现闪烁或延迟,提升用户体验。
以STC89C52单片机为例,其具有多个中断源,包括外部中断、定时器中断、串行通信中断等。在点阵显示应用中,可以设置定时器中断来周期性地更新显示缓冲区数据,然后通过I/O口将数据传送到驱动电路,控制点阵屏的LED灯的亮灭状态。代码示例如下:
#include <reg52.h> // 包含STC89C52单片机寄存器定义
// 定时器中断服务程序
void Timer0_ISR(void) interrupt 1 {
// 重新加载定时器初值,设定下次中断间隔
TH0 = (65536 - 9216) >> 8;
TL0 = (65536 - 9216) & 0xff;
// 中断处理逻辑,更新显示缓冲区数据
// ...
}
void main(void) {
// 定时器初始化
TMOD = 0x01; // 设置定时器模式为模式1
TH0 = (65536 - 9216) >> 8; // 定时器初值设置,9216为1ms的计数值
TL0 = (65536 - 9216) & 0xff;
ET0 = 1; // 开启定时器0中断
TR0 = 1; // 启动定时器0
EA = 1; // 开启全局中断
// 主循环,执行其他任务
while(1) {
// ...
}
}
在上述代码中,通过定时器0产生周期性的中断,每次中断执行中断服务程序Timer0_ISR,来更新点阵显示屏的内容。定时器初值的设置依赖于单片机的时钟频率,以及所需的中断频率。
5.2 单片机定时器技术与应用
5.2.1 定时器的基本原理与分类
单片机中的定时器是一个非常重要的功能单元,能够用于计时、计数或者产生精确的时序控制。STC89C52单片机内置有两个定时器,分别是定时器0和定时器1。它们可以被配置为四种模式,分别是模式0、模式1、模式2和模式3,以适应不同的应用需求。
定时器的工作原理是基于一个计数器对一个时钟源进行计数,当计数器达到预设值时,会产生一个定时器溢出中断(如果开启了中断允许),并且可以通过软件重置计数器的值以供下一次计数使用。
5.2.2 定时器在点阵显示中的应用实例
在点阵显示系统中,定时器可以用于多种目的,例如产生精确的显示刷新率、控制显示亮度(通过调整亮灯时间占总周期的比例),或者用于产生其他的时间相关功能。
以下是一个使用定时器实现点阵屏动态显示的案例,展示了如何通过定时器中断定期刷新显示内容以实现动态效果:
#include <reg52.h> // 包含STC89C52单片机寄存器定义
// 全局变量,存储显示内容
unsigned char display_buffer[16] = {0};
// 定时器初始化
void Timer0_Init(void) {
TMOD &= 0xF0; // 清除定时器0模式位
TMOD |= 0x01; // 设置定时器0为模式1
TH0 = (65536 - 50000) >> 8; // 设置定时器初值,假设系统时钟12MHz,12/12=1个机器周期,1us,定时50ms
TL0 = (65536 - 50000) & 0xff;
ET0 = 1; // 开启定时器0中断
TR0 = 1; // 启动定时器0
}
// 定时器0中断服务程序
void Timer0_ISR(void) interrupt 1 {
static unsigned int count = 0;
TH0 = (65536 - 50000) >> 8; // 重新加载定时器初值
TL0 = (65536 - 50000) & 0xff;
count++;
if (count >= 20) { // 每隔1秒更新一次显示内容
count = 0;
// 更新显示缓冲区数据
// ...
}
}
void main(void) {
Timer0_Init(); // 初始化定时器
EA = 1; // 开启全局中断
// 主循环,执行其他任务
while(1) {
// ...
}
}
在这个示例中,通过定时器0产生大约50ms的定时中断,每隔20个中断周期(即1秒钟)更新一次显示缓冲区 display_buffer 的内容,从而实现动态效果。定时器初值的设定依据单片机的时钟频率和所需的中断间隔时间。
需要注意的是,为了保证显示效果的流畅性,定时器中断频率应高于肉眼的识别阈值,通常至少为每秒30次(即30Hz),这样可以确保显示内容的变化对用户而言是连贯的,而不会有卡顿或闪烁感。
6. 综合实践:STC89C52单片机与点阵屏汉字显示系统的设计与实现
6.1 系统设计思路与方案规划
6.1.1 系统设计的基本思路
设计一个基于STC89C52单片机的点阵屏汉字显示系统时,首先需要考虑的是如何将单片机与16x16点阵显示屏有效地连接起来。该系统的核心功能是能够接收外部输入的汉字,并通过点阵屏将其显示出来。在设计过程中,需要着重考虑以下几个方面:
- 汉字字模数据的准备 :汉字字模数据是显示汉字的基础,需要按照一定格式准备好。
- 点阵数据的驱动方法 :需要设计驱动电路,以及对应的程序代码来控制点阵屏显示汉字。
- 人机交互界面 :应考虑如何接收用户输入,并设计易于用户操作的人机交互界面。
- 系统稳定性与响应时间 :保证系统长时间稳定运行,并且响应用户的输入命令迅速。
6.1.2 系统方案的选择与优化
在进行系统方案选择与优化时,考虑到实际需求和成本控制,可以采取以下策略:
- 硬件优化 :选择成熟稳定的STC89C52单片机,同时采用595串行移位寄存器来扩展IO口,降低硬件成本。
- 软件优化 :编写高效且易于扩展的程序,利用中断和定时器技术提高系统响应速度。
- 功耗优化 :通过程序合理安排显示内容的刷新频率,降低系统整体功耗。
- 用户体验优化 :设计简洁直观的操作界面,并通过软件算法优化显示效果,提升用户体验。
6.2 系统实现的详细步骤与调试
6.2.1 系统组装与电路焊接
系统组装是将电路板上的电子元件按照原理图进行焊接的过程。以下是具体步骤:
- 根据电路原理图准备好所有的电子元件,包括STC89C52单片机、595移位寄存器、点阵显示屏等。
- 将电子元件按位置焊接到PCB板上,注意元件的极性,如二极管、电解电容等。
- 在焊接时,需要使用合适温度的焊接工具,避免因温度过高损伤元件或PCB板。
- 焊接完成后,使用万用表检查电路板,确保没有短路或开路的情况发生。
6.2.2 系统调试与功能验证
系统调试包括软硬件的联合调试,以确保系统能够正常工作。以下是调试步骤:
- 程序下载与测试 :将编写的程序通过ISP编程器下载到STC89C52单片机中。
- 基础功能测试 :首先测试单片机基础的I/O口功能,确保可以正常工作。
- 595寄存器测试 :通过发送数据给595移位寄存器,观察点阵屏上是否能够正确显示点阵数据。
- 汉字显示测试 :将准备好的汉字字模数据送入点阵屏进行显示,检查显示效果是否正确。
- 系统综合测试 :通过模拟用户输入,测试系统的整体功能,如汉字的输入、显示、刷新等。
在调试过程中,可以借助逻辑分析仪监测单片机与点阵屏之间的通信过程,确保数据传输的准确性和稳定性。
通过上述步骤,一个基于STC89C52单片机和点阵显示屏的汉字显示系统得以实现。系统最终的展示效果需要在实际操作中不断调整和优化,以达到最佳的显示效果和用户交互体验。
简介:本项目通过STC89C52单片机和595串行移位寄存器的结合,实现16x16点阵显示屏的汉字显示功能。关键知识点包括STC89C52微控制器的工作原理、点阵显示屏的驱动方式、串行移位寄存器的并行扩展、汉字编码及点阵字库的建立和解析,以及中断和定时器等控制技术。该项目对理解嵌入式系统开发具有实践意义。
9811

被折叠的 条评论
为什么被折叠?



