基于单片机音乐盒的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 绪论
1.1 概述
随着信息技术革命的深入和计算机技术的飞速发展,单片机的应用越来越广泛,并逐渐发展成为一门关键的技术学科。
单片机具有一些突出优点:体积小、重量轻、耗电少、电源单一、功能强、价格低、运行速度快、抗干扰能力强、可用性高,所以在通信、家电、工业控制、仪器仪表、汽车等产品中都可以看到单片机的身影。
目前国内单片机的应用仍以MCS-51系列为主。
本案是以AT89C51芯片的电路为基础,外部加上功率放大器、放音设备,以此来实现音乐演奏控制器的硬件电路,通过软件程序来控制单片机内部的定时器使其演奏出优美动听的音乐。
用户可以按照自己的喜好选择音乐并将其转化成机器码存入单片机的存储器中。
对于不同型号的单片机只需要相应的改变一下地址即可。
该软、硬件系统具有很好的通用性,很高的实际使用价值,为广大单片机和音乐爱好者提供了很好的借鉴。
1.2 单片机的特点及应用
1.2.1 单片机的特点
一块单片机芯片就是一台计算机。
由于单片机的这种特殊的结构形式,在某些应用领域中,它承担了大中型计算机和通用的微型计算机无法完成的一些工作。
使其具有很多显著的优点和特点,因此在各个领域中都得到了迅猛的发展。
单片机的特点可以归纳为以下几个方面:
1) 具有优异的性能价格比
单片机的这种高性能、低价格是它最显著的一个特点。
单片机尽可能把应用所需要的储存器,各种功能的I/O口都集成在一块芯片内,使之成为名副其实的单片机。
有的单片机为了提高速度和执行效率,开始采用了RISC流水线和DSP的设计技术。
使单片机的性能明显优于同类型的微处理器,有的单片机的ROM可达64KB(式中‘B’表示字节),片内RAM可达2KB,单片机的寻址已突破64KB的限制,八位和十六位单片机寻址可达1MB和16MB。
单片机另一个显著特点是量大面广,因此世界上各大公司在提高单片机性能的同时,进一步降低价格,性能/价格之比是各公司竞争的主要策略。
2) 集成度高、体积小、可靠性高
单片机把各功能部件集成在一块芯片上,内部采用总线结构,减少了各芯片之间的连续,大大提高了单片机的可靠性与抗干扰能力。
另外,其体积小,对于强磁场环境易于采取屏蔽措施,适合在恶劣环境工作。
3) 控制功能强
单片机是电子计算机这个庞大家庭中的一个特殊品种,体积虽小,但“五脏俱全”,它非常适用于专门的控制用途。
为了满足工业控制要求,一般单片机的指令系统中有极其丰富的转移指令,I/O口的逻辑操作以及位处理器功能。
单片机的逻辑控制功能及运行速度均高于同一档次的微型计算机。
4) 低电压、低功耗
单片机大量应用于携带式产品和家用消费类产品,低电压和低功耗的特性尤为重要。
许多单片机已可以在2.2V的电压下运行,有的已能在1.2V或0.9V下工作;功耗至微安级,一粒纽扣电池就可以使之长期使用。
1.2.2 单片机的应用
现在单片机的应用日益广泛深入,诸如在智能仪器仪表、家用电器和军事设备的智能化以及实时过程控制等方面,单片机都扮演着越来越重要的角色,具有广阔的应用前景。
以下大致介绍一些典型的应用领域和应用特点。
1)家用电器领域
目前国内各种家用电器已普遍采用单片机控制取代传统的控制电路,而做成单片机控制系统。
例如洗衣机、电冰箱、空调机、微波炉、电饭煲、电视机、录像机、手机、摄像机及其它视频音像设备的控制器。
还有儿童玩具以及机器人控制等。
2 )办公自动化领域
现代办公室中所使用的大量通信、信息产品多数都采用了单片机,如通用计算机系统中的键盘译码、磁盘驱动、打印机、绘图仪、复印机、电话、传真机、考勤机等。
3 )商业营销领域
在商业营销系统已广泛使用的电子称、收款机、条形码阅读器、仓储安全监测系统、商场保安系统、空气调节系统、冷冻保鲜系统等中,目前已纷纷采用单片机构成专用系统,主要由于这种系统有明显的抗病菌侵害、抗电磁干扰等高可靠性能的保证。
4 )工业自动化
如工业过程控制、过程监测、工业控制器及机电一体化控制系统等,这些系统除一些小型工控机之外,许多都是由单片机为核心的单机或多机网络系统。
如工业机器人的控制系统是由中央控制器、感觉系统、行走系统、擒拿系统等节点构成的多机网络系统。
5 )智能仪表与集成智能传感器传统的控制电路
目前各种变送器、电气测量仪表普遍采用单片机应用系统替代传统的测量系统,使测量系统具有各种智能化功能,如存储、数据处理、查找、判断、联网和语音功能等。
将单片机与传感器相结合可以构成新一代的智能传感器,它将传感器初级变换后的电量作进一步的变换、处理,输出能满足远距离传送、能与微机接口的数字信号。
例如,将压力传感器与单片机集成在一起的微小型压力传感器可随钻机送至井下,以报告井底的压力状况。
6 )汽车电子与航空航天电子系统
通常在这些电子系统中的集中显示系统、动力监测控制系统、自动驾驭系统、通信系统以及运行监视器(黑匣子)等都要构成冗余的网络系统。
1.3 本设计预计目的
本设计中用到了AT89C51单片机,4×4键盘,蜂鸣器,16×2 LCD,七段显示数码管LED。
以AT89C51芯片为主芯片的控制电路需要达到如下的设计要求:
1)利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲(最少三首乐曲,每首不少于30秒)。
2)采用LCD显示信息。
3)开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称)。
4)可通过功能键选择乐曲,暂停,播放。
5)显示乐曲播放时间或剩余时间。
2 51系列单片机AT89C51的介绍
2.1 AT89C51的功能特性
AT89C51是一个低电压,高性能CMOS8位单片机带有4K字节的可反复擦写的程序存储器(PENROM)和128字节的存取数据存储器(RAM),这种器件采用ATMEL公司的高密度、不容易丢失存储技术生产,并且能够与MCS-51系列的单片机兼容。
片内含
有8位中央处理器和闪烁存储单元,有较强功能的AT89C51单片机能够被应用到控制领域中。
AT89C51提供以下的功能标准:4K字节闪烁存储器,128字节随机存取数据存储器,32个I/O口,2个16位定时/计数器,1个5向量两级中断结构,1个串行通信口,片内震荡器和时钟电路。
另外,AT89C51还可以进行0HZ的静态逻辑操作,并支持两种软件的节电模式。
闲散方式停止中央处理器的工作,能够允许随机存取数据存储器、定时/计数器、串行通信口及中断系统继续工作。
掉电方式保存随机存取数据存储器中的内容,但震荡器停止工作并禁止其它所有部件的工作直到下一个复位。
2.2 AT89C51的引脚功能描述
图2.1 AT89C51的引脚图
VCC:电源电压
GND:地
RST:复位输入。
当震荡器工作时,RET引脚出现两个机器周期以上的高电平将使单片机复位。
P0口:
P0口是一组8位漏极开路双向I/O口,即地址/数据总线复用口。
作为输出口时,每一个管脚都能够驱动8个TTL电路。
当“1”被写入P0口时,每个管脚都能够作为高阻抗输入端。
P0口还能够在访问外部数据存储器或程序存储器时,转换地址和数据总线复用,并在这时激活内部的上拉电阻。
P0口在闪烁编程时,P0口接收指令,在程序校验时,输出指令,需要接电阻。
P1口:
P1口是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动4个TTL 电路。
对端口写“1”,通过内部的电阻把端口拉到高电平,此时可作为输入口。
因为内部有电阻,某个引脚被外部信号拉低时输出一个电流。
闪烁编程时和程序校验时,P1口接收低8位地址。
P2口:
P2口是一个内部带有上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动4个TTL电路。
对端口写“1”,通过内部的电阻把端口拉到高电平,此时可作为输入口。
因为内部有电阻,某个引脚被外部信号拉低时会输出一个电流。
在访问外部程序存储器或16位地址的外部数据存储器时,P2口送出高8位地址数据。
在访问8位地址的
外部数据存储器时,P2口线上的内容在整个运行期间不变。
闪烁编程或校验时,P2口接收高位地址和其它控制信号。
P3口:
P3口是一组带有内部电阻的8位双向I/O口,P3口输出缓冲故可驱动4个TTL 电路。
对P3口写“1”时,它们被内部电阻拉到高电平并可作为输入端时,被外部拉低的P3口将用电阻输出电流。
P3口除了作为一般的I/O口外,更重要的用途是它的第二功能,如下表所示:
表2.1 P3口第二功能
端口引脚第二功能
P3.0 P3.1 P3.2 P3.3 P3.4 P3.5
RXD TXD INT0 INT1 T0 T1
P3.6 P3.7 WR RD
P3口还接收一些用于闪烁存储器编程和程序校验的控制信号。
ALE/PROG:
当访问外部程序存储器或数据存储器时,ALE输出脉冲用于锁存地址的低8位字节。
即使不访问外部存储器,ALE以时钟震荡频率的1/16输出固定的正脉冲信号,因此它可用于输出时钟或定时。
要注意的是:每当访问外部数据存储器时将跳过一个ALE 脉冲时,闪烁存储器编程时,这个引脚还用于输入编程脉冲。
如果必要,可对特殊寄存器区中的8EH单元的D0位置禁止ALE操作。
这个位置后只有一条MOVX和MOVC指令ALE才会被应用。
此外,这个引脚会微弱拉高,单片机执行外部程序时,应设置ALE 无效。
PSEN:
程序储存允许输出是外部程序存储器的读选通信号,当AT89C51由外部程序存储器读取指令时,每个机器周期两次PSEN 有效,即输出两个脉冲。
在此期间,当访问外部数据存储器时,这两次有效的PSEN 信号不出现。
EA/VPP:
外部访问允许。
欲使中央处理器仅访问外部程序存储器,EA端必须保持低电平。
需要注意的是:如果加密位LBI被编程,复位时内部会锁存EA端状态。
如EA端为高电平,CPU则执行内部程序存储器中的指令。
闪烁存储器编程时,该引脚加上+12V的编程允许电压VPP,当然这必须是该器件是使用12V编程电压VPP。
XTAL1:震荡器反相放大器及内部时钟发生器的输入端。
XTAL2:震荡器反相放大器的输出端。
3 硬件设计
3.1 总体设计框图
3.2
3.2.1
键盘是由若干个按键组成的开关矩阵,它是最简单的单片机应用系统的输入设备,操作人员可以通过键盘输入数据或命令,实现简单的人机通信。
本设计采用4×4的键盘结构,如图3.2
图3.2 键盘结构
键盘的行线X0~X3通过电阻接+5V。
当键盘上没有键闭合时,所有的行线和列线都断开,行线都呈高电平。
当键盘上某一个键闭合时,该键所对应的行线和列线都被短路。
例如6号键被按下闭合时,行线X1和列线Y2被短路,此时X1的电平由Y2的电位决定。
如果把行线接到单片机的输入口,列线接到单片机的输出口,则在单片机的控制下,先使列线Y0为低电平“0”,其余三根列线Y1、Y2、Y3都为高电平“1”,读行线状态。
如果X0、 X1、 X2、 X3都为高电平,则Y0这一列上没有键闭合。
如果读出的行线不全为高电平,则为低电平的行线和Y0相交的键处于闭合状态。
如果Y0这一列上没有键闭合,接着使列线Y1为低电平,其余列线为高电平,用同样方法检查Y1这一列上是否有键闭合。
这种逐行逐列地检查键盘状态的过程称为对键盘的
一次扫描。
本设计中,涉及到了歌曲的选择,在讲解硬件电路之前,让我们看一看如下的硬件:
图3.3 键盘
这是一个键盘,它是用来选择歌曲, 显示画面的有无和控制歌曲的停放的。
其按键功能说明:1~A:十首歌曲 C:上一首歌曲 D:下一首歌曲 E:歌曲暂停 F:
开机画面
当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,
放出乐曲。
同时启动定时器T1,显示乐曲播放的时间,并驱动LCD,显示歌曲号及播
放时间。
也可在LED显示歌曲号。
3.2.2 LED显示电路设计与原理
LED显示器是由发光二极管显示字段的显示器,也可称为数码管。
它由8个发光
二极管构成,通过点亮不同的字段可显示0~9、A~F及小数点等字形。
数码管通常
有共阴极和共阳极两种结构。
LED显示器有静态显示与动态显示两种形式。
1)在单片机应用系统中,常采用MC14495芯片作为LED的静态显示接口。
其优点是显
示稳定,在发光二极管导通电流一定的情况下显示器亮度大,系统在运行过程中,仅
仅在需要更新显示内容时CPU才执行一次显示更新子程序,这样大大节省了CPU的时
间,提高了CPU的工作效率;缺点是位数较多时显示口随之增加,硬件费用大。
2)所谓动态显示就是一位一位地轮流点亮各位显示器(称为动态扫描)。
对于每一位
显示器来说,每隔一段时间点亮一次。
显示器的亮度即与导通电流有关,也与点亮时
间和间隔时间的比例有关。
调整电流和时间参数,可实现亮度较高较稳定的显示。
本设计采用动态显示接口电路,AT89C51的P0.0~P0.7口与一个8路驱动器相连,用
来接LED显示电路。
图3.4 LED显示电路图
P0.0~P0.7控制七段码a,b,c,d,e,f,g,用P2.0~P2.7为数码管位选信号。
3.2.3 LCD显示器的选择
液晶显示器件的驱动方式有静态和动态两种,当液晶显示器件上显示像素较多
时,如点阵液晶显示器,若使用静态驱动结构将需要很多的电气连接和庞大的硬件驱动电路。
从经济性和可靠性而言,都是不取的。
为了解决这个问题,在液晶显示器的电极的制作和排布上作一定的修改,采用矩阵结构。
即把水平一组显示像素的背电极连在一起引出,称之为行电极,又称之为公共极,用COM表示;把纵向一组显示像素的段电极连在一起,称之为段电极,又称为列电极,用SEG或COL表示。
每个液晶显示像素都由其所在的行和列的位置唯一确定。
在驱动方式上采用了类似CRT的光栅逐行扫描的方法,称为动态驱动法,或多路寻址驱动法。
本设计中采用动态驱动方式的LCD。
AT89C51的P0.0~P0.7口与LCD电路直接相连。
3.2.4 时钟震荡电路设计与原理
AT89C51中有一个用于构成内部震荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自然震荡器。
外接石英晶体及电容C1,C2接在放大器的反馈回路中构成并联震荡电路。
对外接电容C1,C2虽然没有十分严格的要求,但电容容量的大小会轻微影响震荡频率的高低、震荡器工作的稳定性、起振的难易程序及温度稳定性。
如果使用石英晶体,我们推荐电容使用30PF±10PF,而如果使用陶瓷振荡器建议选择40PF±10PF。
用户也可以采用外部时钟。
采用外部时钟的电路如图示。
这种情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。
由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。
图3.5 内部振荡电路图3.6 外部振荡电路
3.3 硬件电路图(见附录A)及功能
总体硬件电路实现功能如下
1)电路中用P1.0~P1.7控制按键,其中P1.0~P1.3扫描行,P1.4~P1.7扫描
列。
2)用P0.0~P0.7,P2.0~P2.7控制LED,其中P0.0~P0.7控制七段码
a,b,c,d,e,f,g,用P2.0~P2.7为数码管位选信号。
3)用P2.0~P2.2作为LCD的RS,R/W,E的控制信号。
用P0.0~P0.7作为LCD的
D0~D7的控制信号。
4)P3.7口控制蜂鸣器。
5)电路为12MHZ晶振频率工作,起振电路中C1,C2均为30pf。
4 节拍编码的确定方法
一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能像电子琴那样能奏出多种音色的声音。
因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和“节拍”。
音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。
4.1 音调的确定
1) 要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间.利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O 反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。
2) 利用AT89C51的内部定时器使其工作在计数器模式MODE1下,改变计数值THO 及TLO以产生不同频率的方法。
此外,结束符和体止符可以分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生相应的停顿效果。
3) 例如频率为523Hz,其周期T=1/523=1912us,因此只要令计数器计时
956us/1us=956,在每次计数956次时将I/O反相,就可得到中音DO (523Hz).
计数脉冲值与频率的关系公式如下:
N=Fi÷2÷Fr N: 计算值;
Fi: 内部计时一次为1us, 故其频率为1MHz;
4) 其计数值的求法如下:
T=65536-N=65536-Fi÷2÷Fr
例如: 设K=65536, F=1000000=Fi=1MHz, 求低音DO(261Hz).中音DO (523Hz). 高音的DO (1046Hz)的计算值
T=65536-N=65536-Fi÷2÷Fr=6÷2÷Fr=65536-500000/Fr
低音DO的 T=65536-500000/262=63627
中音DO的 T=65536-500000/523=64580
高音DO的 T=65536-500000/1047=65059
5)C调各音符频率与计数值T的对照表如表4.1所示.
表4.1 C调各音符频率与计数值T的对照表
4.2 节拍的确
定
表4.2 节拍与节拍码对照
每
个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,表4.2为
节拍与节拍码的对照.如果1拍为0.4秒,1/4
拍是0.1秒,只
要设定延迟时间就可求得节拍的时间.假设1/4拍为1DELAY,则1拍应为4DELAY,以此类推.所以只要求得1/4拍的DELAY 时间(1/4拍的延迟时间=187毫秒),其余的节拍就是它的倍数,如表4.3为1/4和1/8节拍的时间设定。
表4.3 各调1/4节拍的时间设定 各调1/8节拍的时间设定
曲调值 DELAY 曲调值 DELAY 调4/4 125毫秒 调4/4 62毫秒 调3/4 187毫秒 调3/4 94毫秒 调2/4 250毫秒 调2/4 125毫秒
4.3 编码
建立音乐的步骤
1. 先把乐谱的音符找出,然后建立T 值表的顺序。
节拍码 节拍数 节拍码 节拍数 1
1/4拍 1 1/8拍
2 2/4拍 2 1/4拍 3
3/4拍 3 3/8拍
4 1拍 4 1/2拍
5
1又1/4拍 5 5/8拍 6 1又1/2拍 6 3/4拍 8 2拍 8 1拍 A 2又1/2拍 A 1又1/4拍
C 3拍 C 1又1/2拍
F 3又3/4拍
2. 把T值表建立在TABLE1,构成发音符的计数值放在"TABLE"。
3. 简谱码(音符)为高位,节拍为(节拍数)为低4位,音符节拍码放在程序的"TABLE"处。
表4.4 简谱对应的简谱码.T值.节拍数
5.2 主程序流程图(见附录B)
5.3 程序源代码及注释(见附录C)
6 程序调试中出现的问题及解决的办法
1.出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发现是因为程序中有的指令书写得不规范导致的,例如有的RET返回指令一定要按正确格式书写或在两行指令间最好不要留空行。
2.程序中的跳转指令的运用很重要,为保险起见,都用LJMP,我们就遇到过跳转指令用错程序无法正常运行的现象。
当用JNZ指令时,跳转范围比较少,这时要用一个标号中转。
3.编程时要注意,在程序开始时,要写入各定时器中断的入口地址。
4.编写程序过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。
5.程序的结构要设计的合理,避免上下乱调用的现象,这样会使程序更加清晰化。
6.编程前要加流程图,这样会使思路清晰。
7.LCD计时正常显示的解决办法:
1)两个定时器同时工作,存在中断时序问题,刚开始时我们把定时器1设定在方
式3,计250us,由于定时中断过于频繁,使CPU负载过大,导致音乐不能正常播放,
时间不能正常显示。
解决办法:将定时器1设定在工作方式1,16位计数,计50ms,效果有很大改观,但还有问题。
2)当音乐为全4拍起始时,此时音乐节奏与定时器T1中断频率错开,LCD显示和音乐播放都会好一些。
3)另外,在歌曲中,当遇到一个音符发音为4拍,在编曲中为*CH,托音时间较长,当定时器T1此时来中断时,就会对歌曲播放产生影响,若改为发音一拍,中断对歌曲播放影响减弱,但音乐效果变差。
4)改进方案:若采用可以定时时间更长的单片机,可以避免所有问题。
结论
通过这次的毕业设计,我最大的收获就是自己做出来一个东西,结果如何不重要,因为这完全是通过自己制作的,并且本设计涉及的大部分内容是我以前所没有接触过的。
但无论是软件还是硬件,仍有许多需要改进和完善的地方,也有许多可以扩展的地方。
这次毕社给我的感受很深刻,总结起来可有一下几个方面:
以前的学习多重于理论方面,而且知识面不够宽,通过这次毕业设计,使我第一次系统全面的回顾了大学四年所有的课程:模拟电路、数字电路、编程等等。
从中我还体会到了所学理论知识的重要性,知识掌握得越多,设计得就更全面、更顺利、更好。
再有学会了怎样查阅资料和利用工具书。
由于一个人不可能什么都学过,什么都懂,更加不可能一学就通,因此,在设计过程中需要用一些不曾学过的东西时,就要去有针对性地查找资料。
我经过这次系统的毕业设计,大致地了解了对一设计进行系统研究、设计及制作的全过程。
这些认识使我在将来的工作和学习当中都会有很大的帮助。
在往后加以吸收利用,以提高自己的应用能力,而且还能增长自己见识补充最新的知识。
毕业设计培养了严肃认真和实事求是的科学态度,而且培养了吃苦耐劳的精神以及严谨的作风,提高了交流沟通和团体协作能力,这些对我以后的工作都非常有帮助的。
参考文献
1 何立民,《单片机应用系统设计[M]》.北京航空航天大学,1996
2 闫玉德,《MCS-51单片机原理及应用》.北京:机械工业出版社,2001
3 李广第,《单片机基础》.北京:北京航空航天大学出版社,2003
4 张毅刚,《MCS-51单片机应用设计》,哈尔滨工业大学出版社,1992
5 康化光,《电子技术基础》.北京:高等教育出版社,2001
6 王建校,杨建国,《51系列单片机及C51程序设计》,科学出版社,2002
7 赵晓安,《MCS-51单片机原理及应用》.天津::天津大学出版社,2001
8 马春燕,《微机原理与接口技术(基与32位机)》,电子工业出版社,2007
9 曹薇,谢云敏,《单片机原理及应用》.北京:中国水利水电出版社,2004
10 张迎新,《单片机初级教程》. 北京:北京航空航天大学出版社,1999
11 刘德望,韦穗林,《电子制作实训》.北京:中国水利水电出版社,2004
12 伍学珍,刘光明,《模拟电子技术》.北京:中国水利水电出版社,2004
13 曹巧媛,《单片机原理及应用》.北京:电子工业出版社,1997
14 蔡美琴主编,《MCS-51单片机原理及应用》.北京:高等教育出版社,1992
15 Intel.Memory Components Handbook,1990
16 ATMEL CMOS EPROM,1993
17 National Semiconductors. Memory Applications Handbook,1993
18 Intel.Memory Components Handbook,1990
19 Sharp.Memory Data Book,1993
致谢
附录A:硬件电路图
附录B: 主程序流程图
RS BIT P2.0 ;定义液晶显示端口标号
RW BIT P2.1
E BIT P2.2
;********************************************
L50MS EQU 60H
L1MS EQU 61H
L250MS EQU 62H
SEC EQU 65H
MIN EQU 64H
HOU EQU 63H
;******************************************* ORG 0000h
LJMP main
ORG 000BH
LJMP TT0
ORG 001BH
LJMP T1INT
ORG 1000h
main:
;----------------------- ;液晶初始化
MOV SP,#70H
MOV P0,#01H ;清屏
CALL ENABLE
MOV P0,#38H ;8位,2行显示
LCALL ENABLE
MOV P0,#0FH ;屏显on,光标on,闪烁on LCALL ENABLE
MOV P0,#06H ;计数地址加1,显示幕on LCALL ENABLE
;-------------------------------内存初始化
LCALL initil
;-------------------------------
key1: LCALL key
LCALL modd
LJMP key1
;----------------------------- ;键盘扫描
key: NOP
NOP
LCALL ks
JNZ k1 ;有按键转到K1
LCALL kaiji
LCALL SOP
xn: LJMP key
k1: LCALL modd
LCALL modd
LCALL ks
JNZ k2
LJMP key
k2: MOV R2,#0feh ;读键盘
MOV R4,#00h
k3: MOV A,R2
MOV P1,A
MOV A,P1
JB ACC.4,L1 ;为1跳转,第一行无按键
MOV a,#00h
LJMP lk
L1: JB acc.5,L2
MOV a,#04h
LJMP lk
L2: JB acc.6,L3
MOV a,#08h
LJMP lk
L3: JB acc.7,next1
MOV a,#0ch
;------------------------------------------------------- lk: ADD a,R4
PUSH acc
k4: LCALL delay1 ;若同时有其他按键,则等待
LCALL ks
JNZ k4
;-------------------------------------------------------- MOV r3,#07h
CLR a
MOV r0,#30h
MOV r1,#31h
mm1: MOV a,@r1
MOV @r0,a
INC r0
INC r1
DJNZ r3,mm1
POP acc
MOV @r0,a
RET
;------------------------------------------------------ next1: INC R4 ;------列扫描
MOV a,R2
JNB acc.3,n2
LJMP n1
n2: LJMP key
n1: RL a
MOV R2,a
LJMP k3。