基于单片机的电子琴论文

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电子琴
摘要:随着社会的发展进步,音乐逐渐成为我们生活中很重要的一部分,有人曾说喜欢音乐的人不会向恶。

我们都会抽空欣赏世界名曲,作为对精神的洗礼。

本论文设计一个基于单片机的简易电子琴。

电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。

它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。

本系统是以51系列单片机AT89S52为主控制器,附有键盘、LED显示管、扬声器组成。

系统完成显示输入信息、播放相应音符等基本功能。

本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。

关键词:AT89S52,键盘,LED显示管,扬声器。

1 引言
1.1 目的和意义
单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。

它的应用必定导致传统的控制技术从根本上发生变革。

因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。

电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。

它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。

本文的主要内容是用AT89S52单片机为核心控制元件,设计一个电子琴。

以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。

本文主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。

利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。

并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。

本系统是简易电子琴的设计,按下键盘中的按键会使数码管显示当前按键,扬声器播放器对应的音符。

通过设计本系统可了解单片机的基本功能。

对单片机的了解有一个小的飞跃。

1.2 本系统主要研究内容
本系统设计制作一个可演奏的电子琴。

综合应用了两项设计。

(1)键盘识别。

即扫描,显示当前按键。

(2)不同频率音符播放。

可以通过按键控制16种发音。

1.3 主要芯片简介
2 系统分析
主要性能
•与MCS-51单片机产品兼容
• 8K字节在系统可编程Flash存储器
• 1000次擦写周期
•全静态操作:0Hz~33Hz
•三级加密程序存储器
• 32个可编程I/O口线
•三个16位定时器/计数器
•八个中断源
•全双工UART串行通道
•低功耗空闲和掉电模式
•掉电后中断可唤醒
•看门狗定时器
•双数据指针
•掉电标识符
1.功能特征描述
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。

使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

2.引脚功能
VCC:电源
GND: 接地
P0口: P0口是一个8位漏极开路的双向I/O口。

作为输出口,每位能驱动8个TTL逻辑电平。

对P0端口写“1”时,引脚用作高阻抗输入。

当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。

在这种模式下,P0具有
内部上拉电阻。

在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。

程序校验时,需要外部上拉电阻。

2.4 P1口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个TTL 逻辑电平。

对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。

此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所
驱动4 个TTL 逻辑电平。

对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(I IL)。

在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR)时,P2 口送出高八位地址。

在这种应用中,P2 口使用很强的内部上拉发送1。

在使用8位地址(如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。

在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。

2.6 P3口:P3 口是一个有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个TTL 逻辑电平。

对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(I IL)。

P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。

位。

看门狗计时完成后,RST 脚输出96 个晶振周期的高电平。

特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。

DISRTO默认状态下,复位高电平有效。

2.8 ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8 位地址的输出脉冲。

在flash编程时,此引脚(PROG)也用作编程输入脉冲。

在一
般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。

然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。

如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。

这一位置“1”,ALE 仅在执行MOVX 或MOVC指令时有效。

否则,ALE 将被微弱拉高。

这个ALE 使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。

2.9 PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。

当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。

2.10 EA/VPP:访问外部程序存储器控制信号。

为使能从0000H 到FFFFH的外部程序存储器读取指令,EA必须接GND。

为了执行内部程序指令,EA应该接VCC。

在flash编程期间,EA也接收12伏VPP电压。

2.11 XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。

2.12 XTAL2:振荡器反相放大器的输出端。

3. 存储器结构
MCS-51器件有单独的程序存储器和数据存储器。

外部程序存储器和数据存储器都可以64K寻址。

3.1 程序存储器:如果EA引脚接地,程序读取只从外部存储器开始。

对于89S52,如果EA接VCC,程序读写先从内部存储器(地址为0000H~1FFFH)开始,接着从
外部寻址,寻址地址为:2000H~FFFFH。

3.2 数据存储器: AT89S52 有256 字节片内数据存储器。

高128 字节与特殊功能寄存器重叠。

也就是说高128字节与特殊功能寄存器有相同的地址,而物理上是分
开的。

当一条指令访问高于7FH 的地址时,寻址方式决定CPU 访问高128 字节RAM 还是特殊功能寄存器空间。

直接寻址方式访问特殊功能寄存器(SFR)。

例如,下面的直接寻址指令访问0A0H(P2口)存储单元
MOV 0A0H , #data
使用间接寻址方式访问高128 字节RAM。

例如,下面的间接寻址方式中,R0 内容为0A0H,访问的是地址0A0H的寄存器,而不是P2口(它的地址也是0A0H)。

MOV @R0 , #data
堆栈操作也是简介寻址方式。

因此,高128字节数据RAM也可用于堆栈空间。

4. 看门狗定时器
WDT是一种需要软件控制的复位方式。

WDT 由13位计数器和特殊功能寄存器中的看门狗定时器复位存储器(WDTRST)构成。

WDT 在默认情况下无法工作;为了激活WDT,户用必须往WDTRST 寄存器(地址:0A6H)中依次写入01EH 和0E1H。

当WDT激活后,晶振工作,WDT在每个机器周期都会增加。

WDT计时周期依赖于外部时钟频率。

除了复位(硬件复位或WDT溢出复位),没有办法停止WDT工作。

当WDT溢出,它将驱动RSR引脚一个高个电平输出。

4.1 WDT的使用
为了激活WDT,用户必须向WDTRST寄存器(地址为0A6H的SFR)依次写入0E1H 和0E1H。

当WDT激活后,用户必须向WDTRST写入01EH和0E1H喂狗来避免WDT溢出。

当计数达到8191(1FFFH)时,13 位计数器将会溢出,这将会复位器件。

晶振正常工作、WDT激活后,每一个机器周期WDT 都会增加。

为了复位WDT,用户必须向WDTRST 写入01EH 和0E1H(WDTRST 是只读寄存器)。

WDT 计数器不能读或写。

当WDT 计数器溢出时,将给RST 引脚产生一个复位脉冲输出,这个复位脉冲持续96个晶振周期(TOSC),其中TOSC=1/FOSC。

为了很好地使用WDT,应该在一定时间内周期性写入那部分代码,以避免WDT复位。

4.2 掉电和空闲方式下的WDT
在掉电模式下,晶振停止工作,这意味这WDT也停止了工作。

在这种方式下,用户不必喂狗。

有两种方式可以离开掉电模式:硬件复位或通过一个激活的外部中断。

通过硬件复位退出掉电模式后,用户就应该给WDT 喂狗,就如同通常AT89S52 复位一样。

通过中断退出掉电模式的情形有很大的不同。

中断应持续拉低很长一段时间,使得晶振稳定。

当中断拉高后,执行中断服务程序。

为了防止WDT在中断保持低电平的时候复位器件,WDT 直到中断拉低后才开始工作。

这就意味着WDT 应该在中断服务程序中复位。

为了确保在离开掉电模式最初的几个状态WDT不被溢出,最好在进入掉电模式前就复WDT。

在进入待机模式前,特殊寄存器AUXR的WDIDLE 位用来决定WDT是否继续计数。

默认状态下,在待机模式下,WDIDLE=0,WDT继续计数。

为了防止WDT在待机模式下复位AT89S52,用户应该建立一个定时器,定时离开待机模式,喂狗,再重新进入待机模式。

5. UART
在AT89S52 中,UART 的操作与AT89C51 和AT89C52 一样。

为了获得更深入的关于UART 的信息,可参考ATMEL 网站(http//)。

从这个主页,选择“Products”,然后选择“8051-Architech Flash Microcontroller”,再选择“ProductOverview”即可。

6. 定时器0 和定时器1
在AT89S52 中,定时器0 和定时器1 的操作与AT89C51 和AT89C52 一样。

为了获得更深入的关于UART 的信息,可参考ATMEL 网站()。

从这个主页,选择“Products”,然后选择“8051-Architech Flash Microcontroller”,再选择“Product Overview”即可。

7. 定时器2
定时器2是一个16位定时/计数器,它既可以做定时器,又可以做事件计数器。

其工作方式由特殊寄存器T2CON中的C/T2位选择(如表2所示)。

定时器2有三种工作模式:捕捉方式、自动重载(向下或向上计数)和波特率发生器。

如表3 所示,工作模式由T2CON中的相关位选择。

定时器2 有2 个8位寄存器:TH2和TL2。

在定时工作方式中,每个机器周期,TL2 寄存器都会加1。

由于一个机器周期由12 个晶振周期构成,因此,计数频率就是晶振频率的1/12。

在这种方式下,每个机器周期的S5P2期间采样外部输入。

一个机器周期采样到高电平,而下一个周期采样到低电平,计数器将加1。

在检测到跳变的这个周期的S3P1 期间,新的计数值出现在寄存器中。

因为识别1-0的跳变需要2个机器周期(24
个晶振周期),所以,最大的计数频率不高于晶振频率的1/24。

为了确保给定的电平在改变前采样到一次,电平应该至少在一个完整的机器周期内保持不变。

7.1 捕捉方式
在捕捉模式下,通过T2CON中的EXEN2来选择两种方式。

如果EXEN2=0,定时器2时一个16位定时/计数器,溢出时,对T2CON 的TF2标志置位,TF2引起中断。

如果EXEN2=1,定时器2做相同的操作。

除上述功能外,外部输入T2EX引脚(P1.1)1至0的下跳变也会使得TH2和TL2中的值分别捕捉到RCAP2H和RCAP2L中。

除此之外,T2EX 的跳变会引起T2CON 中的EXF2 置位。

像TF2 一样,T2EX 也会引起中断。

7.2 自动重载
当定时器2 工作于16 位自动重载模式,可对其编程实现向上计数或向下计数。

这一功能可以通过特殊寄存器T2MOD(见表4)中的DCEN(向下计数允许位)来实现。

通过复位,DCEN 被置为0,因此,定时器2 默认为向上计数。

DCEN 设置后,定时器2就可以取决于T2EX向上、向下计数。

DCEN=0 时,定时器2 自动计数。

通过T2CON 中的EXEN2 位可以选择两种方式。

如果EXEN2=0,定时器2计数,计到0FFFFH后置位TF2溢出标志。

计数溢出也使得定时器寄存器重新从RCAP2H 和RCAP2L 中加载16 位值。

定时器工作于捕捉模式,RCAP2H和RCAP2L的值可以由软件预设。

如果EXEN2=1,计数溢出或在外部T2EX(P1.1)引脚上的1到0的下跳变都会触发16位重载。

这个跳变也置位EXF2中断标志位。

置位DCEN,允许定时器2向上或向下计数。

在这种模式下,T2EX引脚控制着计数的
方向。

T2EX 上的一个逻辑1使得定时器2向上计数。

定时器计到0FFFFH 溢出,并置位TF2。

定时器的溢出也使得RCAP2H 和RCAP2L 中的16位值分别加载到定时器存储器TH2和TL2中。

T2EX 上的一个逻辑0 使得定时器2 向下计数。

当TH2 和TL2 分别等于RCAP2H 和RCAP2L 中的值的时候,计数器下溢。

计数器下溢,置位TF2,并将0FFFFH 加载到定时器存储器中。

定时器2上溢或下溢,外部中断标志位EXF2 被锁死。

在这种工作模式下,EXF2不能触发中断。

8. 波特率发生器
通过设置T2CON 中的TCLK 或RCLK 可选择定时器2 作为波特率发生器。

如果定时器2作为发送或接收波特率发生器,定时器1可用作它用,发送和接收的波特率可以不同。

如图8 所示,设置RCLK 和(或)TCLK 可以使定时器2 工作于波特率产生模式。

波特率产生工作模式与自动重载模式相似,因此,TH2 的翻转使得定时器2 寄存器重载被软件预置16位值的RCAP2H 和RCAP2L 中的值。

模式1和模式3的波特率由定时器2溢出速率决定,具体如下公式:
213=16
定时器溢出率模式和模式波特率 定时器可设置成定时器,也可为计数器。

在多数应用情况下,一般配置成定时方式
(CP/T2=0)。

定时器2 用于定时器操作与波特率发生器有所不同,它在每一机器周期
(1/12晶振周期)都会增加;然而,作为波特率发生器,它在每一机器状态(1/2晶振
周期)都会增加。

波特率计算公式如下:
13=32[65536]
⨯-晶振频率模式和模式波特率(RCAP2H,RCAP2L ) 其中,(RCAP2H,RCAP2L )是RCAP2H 和RCAP2L 组成的16位无符号整数。

特别强调,TH2的翻转并不置位TF2,也不产生中断; EXEN2置位后,T2EX 引脚上1~0的下跳变不会使(RCAP2H ,RCAP2L )重载到(TH2,TL2)中。

因此,定时器2作为波特率发生器,T2EX 也还可以作为一个额外的外部中断。

定时器2处于波特率产生模式,TR2=1,定时器2正常工作。

TH2或TL2不应该读写。

在这种模式下,定时器在每一状态都会增加,读或写就不会准确。

寄存器RCAP2可以读,但不能写,因为写可能和重载交迭,造成写和重载错误。

在读写定时器2 或RCAP2寄存器时,应该关闭定时器(TR2清0)。

2.1 系统组成
本系统只要以51单片机为主控核心,与键盘、扬声器、LED 显示管模块一起组合而成。

具体如下:
2.2 系统工作原理 本系统扫描键盘、显示按键、扬声器发出对应音符。

组成键盘的按键有机械式、电容式、导电橡胶式、薄膜式多种,但不管什么形式,其作用都是一个使电路接通与断开的开关。

目前微机系统中使用的键盘按其功能不同,通常可分为编码键盘和非编码键盘两种基本类型。

编码键盘:键盘本身带有实现接口主要功能所需的硬件电路。

不仅能自动检测被按下的键,并完成去抖动、防串键等功能,而且能提供与被按键功能对应的键码(如ASCII 码)送往CPU 。

所以,编码键盘接口简单、使用方便。

但由于硬件电路较复杂,因而价格较贵。

非编码键盘:键盘只简单地提供按键开关的行列。

有关按键的识别、键码的确定与输入、去抖动等功能均由软件完成。

目前微机系统中,一般为了降低成本大多数采用非编码键盘。

键盘接口必须具有去抖动、防串键、按键识别和键码产生4个基本功能。

(1)去抖动:每个按键在按下或松开时,都会产生短时间的抖动。

抖动的持续时间与键的质量相关,一般为5—20mm 。

所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断开状态才能保证识别正确无误。

去抖问
题可通过软件延时或硬件电路解决。

(2)防串键:防串键是为了解决多个键同时按下或者前一按键没有释放又有新的按键按下时产生的问题。

常用的方法有双键锁定和N 键轮回两种方法。

双键锁定,是当有两个或两个以上的按键按下时,只把最后释放的键当作有效键并产生相应的键码。

N 键轮回,是当检测到有多个键被按下时,能根据发现它们的顺序依次产生相应键的键码。

(3)被按键识别:如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方法完成。

常用的方法有行扫描法和线反转法两种。

行扫描法的基本思想是,由程序对键盘逐行扫描,通过检测到的列输出状态来确定闭合键,为此,需
要设置入口、输出口一个,该方法在微机系统中被广泛使用。

线反转法的基本思想是通过行列颠倒两次扫描来识别闭合键,为此需要提供两个可编程的双向输入/输出端口。

(4)键码产生:为了从键的行列坐标编码得到反映键功能的键码,一般在内存区中建立一个键盘编码表,通过查表获得被按键的键码。

用AT89S52的并行口P1接4×4键盘,以P1.0-P1.3作输入线,以P1.4-P1.7作输出线;在数码管上显示每个按键的“0-F”序号。

总体电路具体原理如下:
3 系统硬件设计
3.1 系统硬件总体设计
本系统由键盘、LED显示管、扬声器这几个部分组成,LED显示管显示当前按键,扬声器发出对应音符。

硬件总体设计图如下:
3.2 数码管显示部分
LED显示模块如图2-2所示,利用AT89S52单片机的P0端口的P1.0-P1.7连接到一个七段数码管的a-h的笔段上,数码管的公共端接电源。

扫描显示当前按键模块如下:
3.3扬声器电路
扫描扬声器发出对应音符模块如下:
3.4 键盘电路设计
按键模块图如下:
4 系统软件设计
4.1 系统软件总体设计
本系统的软件总体流程图如下:
4.2 数码管显示流程图
七段LED显示器内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的极管的接线形式,可分成共阴极型和共阳极型。

LED数码管的g~a七个发光二极管因加正电压而发亮,因加零电压而不以发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字形码。

本系统按键显示模块软件流程图如下:
4.3 音节产生电路
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系正确即可。

利用AT89C51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O 反相,就可得到中音DO(523Hz)。

计数脉冲值与频率的关系式(如式2-1所示)是:
N=fi÷2÷fr 2-1
式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。

其计数初值T的求法如下:
T=65536-N=65536-fi÷2÷fr
例如:设K=65536,fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。

T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-
500000/fr
低音DO的T=(65536-500000)/262=63627
中音DO的T=(65536-500000)/523=64580
高音DO的T=(65536-500000)/1046=65059
5 系统使用说明
5.1 系统安装及配置说明
5.1.1 系统运行环境
WINDOWS XP PROTEUS 7.1 SP2 Keil uv3 2.12
5.1.2 系统安装及配置
安装Protues 和keil uVsision3。

5.2 系统操作说明
(1)Keil下编译,产生目标HEX文件,Proteus下Programme Files选择产生的HEX 文件,点击运行开始模拟。

(2)按任意键盘,数码管显示所按下的键盘数,扬声器发出相应的音符。

6 结论
通过这次设计,我学到了不少课本上没有的知识,也锻炼了自己的动手能力,将以前学过的零散的知识串到一起。

经过我长时间的设计及调试,本系统基本能实现按下键盘中的按键会使数码管显示当前按键,扬声器播放对应的音符。

但由于仿真系统原因,本设计音频效果不是很好。

不足之处有:1.可弹奏的音符数较少,只能在一定范围内满足用户需要。

可通过改进键盘识别模块和发生模块来增加其复杂度2.音量不可调。

我的综合设计主要涉及硬件和软件两方面的内容,通过这些我的硬件和软件开发能力都获得了提高。

首先硬件方面,基本了解了电子产品的开发流程和所要做的工作。

基本掌握了Protel99SE原理图的方法,并设计了一个单片机最小系统。

通过开发板的设计和硬件搭建的过程,使我对51系单片机的接口有了更深层次的理解,熟悉了一些单片机常用的外围电路引脚和连接方法,如LED数码管,键盘等。

并且我学会了分析问题解决问题的能力,加深了对所学理论知识的理解和运用。

我的动手能力得到了很大的提高,创新意识得到了锻炼。

参考文献
[1] 彭伟.单片机C语言程序设计实训100例.电子工业出版社.2009年
[2] 吴运昌.模拟电子线路基础.广州:华南理工大学出版社,2004年
[3] 阎石.数字电子技术基础.北京:高等教育出版社,1997年
[4] 张晓丽等.数据结构与算法.北京:机械工业出版社,2002年
[5] 马忠梅等. ARM&Linux嵌入式系统教程.北京:北京航空航天大学出版社,2004年
[6] 李建忠.单片机原理及应用.西安:西安电子科技大学,2002年
[7] 韩志军等.单片机应用系统设计[M].机械工业出版社,2004
[8] 周润景等. Proteus在MCS-51&ARM7系统中的应用百例[M].电子工业出版社,2006
[9] 马忠梅等.单片机的C语言应用程序设计[M].北京航空航天大学出版社,2006
[10] 刘树中,孙书膺,王春平.单片机和液晶显示驱动器串行接口的实现[J].微计算机信息,2007。

相关文档
最新文档