简易电子琴设计报告

简易电子琴课程设计报告

摘要

555 定时器是一种模拟和数字功能相结合的中规模集成器件。555 定时器成本低,性能可靠,只需要外接几个电阻、电容,就可以实现多谐振荡器、单稳态触发器及施密特触发器等脉冲产生与变换电路。它也常作为定时器广泛应用于仪器仪表、家用电器、电子测量及自动控制等方面。

    本文是关于利用555定时器实现简易电子琴,这种应用只是其功能中的一部分。这种由555定时器做出来的电子琴,体积小,用料省,经济实用。

关键字:555定时器  时钟信号 蜂鸣器

目录

前言…………………………………………………………… .1

一 设计要求和系统的组成及工作原理  ……………………   2

1.1设计要求和系统的组成及工作原理 ……………………  2

二 电路设计…………………………………………………… 3

   2.1. 模块功能………………………………………………… 3

   2.3.  方案选择………………………………………………… 3

2.3.  555芯片介绍及元器件选择……………………………  4

三 调试与排故…………………………………………………  8

3.1调试……………………………………………………  8

3.2测试结果与分析  ……………………………………   8

四 结论………………………………………………………   10

附录一 参考文献……………………………………………… 11

附录二 元器件清单……………………………….……………… 12

附录三 电路总图  …………………………….…………………  13

前言

电子科学技术是人类在生产斗争和科学实验中发展起来的。1883年美国发明家爱迪生发现了热电子效应,1904年弗莱明利用这个效应制成了电子二极管,并证实了电子管具有“阀门”作用,它首先被用于无线电检波。1906年美国的德福雷斯在弗莱明的二极管中放进了第三电极—栅极而发明了电子三极管,从而建树了早期电子技术上最重要的里程碑。半个多世纪以来,电子管在电子技术中立下了很大功劳;但是电子管毕竟成本高,制造繁,体积大,耗电多,从1948年美国贝尔实验室的几位研究人员发明晶体管以来,在大多数领域中已逐渐用晶体管来取代电子管。但是,我们不能否定电子管的独特优点,在有些装置中,不论从稳定性、经济性或功率上考虑,还需要采用电子管。

随着科学技术的发展和人类的进步,电子技术已经成了各种工程技术的核心,特别是进入信息时代以来,电子技术更是成了基本技术,其具体应用领域涵盖了通信领域、控制系统、测试系统、计算机等等各行各业

生活中常使用到许多的电子设备,它给我们生活上的便利与影响。而电子琴就是一个很明显的例子,这些有时甚至含有内建音乐,有时又可以千变万化,真让人想动手试试看,因此我们对它产生了许多问题与想象。它是如何动作?不同的音调产生原理又是什么?而若是改变它们的音调,不知道会不会很麻烦,其电路要重新制作吗?系统会怎么修改?

乐器的发展与科学技术的发展密切相关,现代电子技术的兴起,使一些机械的装置逐步电动化、电子化。科学技术上的这些变化及发展促进了乐器的发展,由此出现了许多新的电子乐器,如电子琴、电钢琴等。

本文就是关于用555定时器制作简易电子琴的过程及基本原理。

一  设计要求和系统的组成及工作原理

1.1设计要求

   设计一个简易的电子琴。要求通过改变开关的闭合,可以产生七个不同的音调,就像电子琴一样。

1.2系统的组成及工作原理

1.2.1总体框图

二  电路设计

2.1 模块功能

该电路包括按钮开关,定值电阻,555振荡器和扬声器三部分组成

1输入端:      由八个按钮开关与各自的定值电阻串联在并联组成输入端

2频率产生端:  根据定值电阻的不同输入,由555产生不同的信号频率

3扬声器端口:   接受信号频率发出特定的频率

2.2方案选择

【设计方案一】

数字电路电子琴

    采用一个555集成定时器组成简易电子琴。整个电路由主振荡器,颤音振荡器,扬声器和琴键按钮等部分组成。

主振荡器由555定时器,电阻,按键及电容组成。

【设计方案二】

单片机电子琴

程序可分如下:

初始化模块、判断按键模块、键值处理模块、音乐处理模块、中断模块、0处理模块、表单模块。

初始化模块:对8279键盘的部分进行初始化和中断初始化。

键值处理模块:用8279的状态字来判断它是否按键(FIFORAM不能清除已处理的数据,但8279的状态字会发生相应改变)。输入的键值与1-8的物理值01H-08H进行比较,如果与其中某个数相等,则跳到1-8的键值处理模块;如果是9或者A,则跳到音乐处理模块。如果输入是0,则跳到0处理模块。结尾跳到初始化模块 。

音乐处理模块:专门处理音乐中的1-8的发音。它们发音不同是因为波的频率不同,所以要发出不同的音,只要实现发出的波的频率不同即可。于是,可通过定时的方法来中断产生不同的方波。可把1-8的定时初值放在一个表单内。

中断模块:T0中断是为键值处理模块服务;T1中断是为音乐处理模块服务。

0处理模块:在音乐处理过程中,按下0则音乐暂停,此时可如其他按键(包括音乐按键)。当再按下0键时,则最近继续的音乐中断。

表单模块:TAB音符表单存放1-8的ASCII码值;FREQUENCY音符初值表单存放1-8音符的中断初值;DAT、DAT1分别存放两首歌曲相应的中断初值和节拍等信息。

综上:第一种方案简易,易于实现,所用知识为数字电子技术。接下来将介绍这种方案。

2.3. 555芯片介绍及元器件选择

 555定时器是一种中规模集成电路,外形为双列直插8脚结构,体积很小,使用起来方便。只要在外部配上几个适当的阻容元件,就可以构成史密特触发器、单稳态触发器及自激多谐振荡器等脉冲信号产生与变换电路。它在波形的产生与变换、测量与控制、定时电路、家用电器、电子玩具、电子乐器等方面有广泛的应用。

多谐振荡器的工作原理:多谐振荡器是能产生矩形波的一种自激振荡器电路,由于矩形波中除基波外还含有丰富的高次谐波,故 称为多谐振荡器。多谐振荡器没有稳态,只有两个暂稳态,在自身因素的作用下,电路就在两个暂稳态之 间来回转换,故又称它为无稳态电路。由555定时器构成的多谐振荡器如图1所示,R1,R2和C是外接定时元件,电路中将高电平触发端(6脚) 和低电平触发端(2脚)并接后接到R2和C的连接处,将放电端(7脚)接到R1,R2的连接处。

由于接通电源瞬间,电容C来不及充电,电容器两端电压uc为低电平,小于(1/3)Vcc,故高电平触发 端与低电平触发端均为低电平,输出uo为高电平,放电管VT截止。这时,电源经R1,R2对电容C充电,使 电压uc按指数规律上升,当uc上升到(2/3)Vcc时,输出uo为低电平,放电管VT导通,把uc从(1/3)Vcc 上升到(2/3)Vcc这段时间内电路的状态称为第一暂稳态,其维持时间TPH的长短与电容的充电时间有关 。充电时间常数T充=(R1+R2)C。

由于放电管VT导通,电容C通过电阻R2和放电管放电,电路进人第二暂稳态.其维持时间TPL的长短与电 容的放电时间有关,放电时间常数T放=R2C0随着C的放电,uc下降,当uc下降到(1/3)Vcc时,输出uo。 为高电平,放电管VT截止,Vcc再次对电容c充电,电路又翻转到第一暂稳态。不难理解,接通电源后,电 路就在两个暂稳态之间来回翻转,则输出可得矩形波。电路一旦起振后,uc电压总是在(1/3~2/3)Vcc 之间变化。图1(b)所示为工作波形。


图1 555定时器构成的多谐振荡器电路及工作波形

      

集成555定时器有双极性型和CMOS型两种产品。一般双极性型产品型号的最后三位数都是555,CMOS型产品型号的最后四位数都是7555.它们的逻辑功能和外部引线排列完全相同。器件电源电压推荐为4.5~12V,最大输出电流200mA以内,并能与TTL、CMOS逻辑电平相兼容。其主要参数见表8.1。

555定时器的内部电路框图及逻辑符号和管脚排列分别如下:

【逻辑符号】

     

【内部原理图】

Vi1(TH):高电平触发端,简称高触发端,又称阈值端,标志为TH。

Vi2(TR):低电平触发端,简称低触发端,标志为TR。

VCO:控制电压端。

VO:输出端。

Dis:放电端。

Rd:复位端。

555定时器内含一个由三个阻值相同的电阻R组成的分压网络,产生VCCVCC两个基准电压;两个电压比较器C1、C2;一个由与非门G1、G2组成的基本RS触发器(低电平触发);放电三极管T和输出反相缓冲器G3

Rd是复位端,低电平有效。复位后, 基本RS触发器高端为1(高电平),经反相缓冲器后,输出为0(低电平)。

【逻辑功能】

三 调试与检查

3.1  调试

经过之前的准备工作,已经确定了制作方案。由于电路比较复杂,使用的导线和各种器件很多,所以在负责人那领完元件后,就和同组人明确分工,同组人看图并说明,作者连接线路,两人同时看着电路的连接,这样既可以节省时间,也不容易出错。但是由于是首次做,所以一开始我们就把所有的元件都焊上去了,导致没法连线,于是自己又去库房领了一份全新的器材回来。在重新开始连接好电路之后,开启电源,打开和闭合相应的开关后,可以发出不同的音调,与实验目的基本相符。可以说基本上完成了试验要求。

3.2  测试结果与分析

在555定时器的VCC端1/3和地之间加上电压,并让VCO悬空,则比较器C1的同相输入端接参考电压1/3VCC,比较器C2反相输入端接参考电压2/3VCC ,为了学习方便,我们规定:

当TH端的电压>1/3VCC时,写为VTH=1,当TH端的电压<2/3VCC时,写为VTH=0。

当TR端的电压>2/3VCC时,写为VTR=1,当TR端的电压<1/3VCC时,写为VTR=0。

① 低触发:当输入电压Vi2<VCC2/3 且Vi1<1/3VCC时,VTR=0,VTH=0,比较器C2输出为低电平,C1输出为高电平,基本RS触发器的输入端TH=0、TR=1,,经输出反相缓冲器后,VO=1,T截止。这时称555定时器“低触发”;

② 保持:若Vi2>1/3VCC 且Vi1<2/3VCC,则VTR=1,VTH=0,基本RS触发器保持,VO和T状态不变,这时称555定时器“保持”。

③ 高触发:若Vi1>2/3VCC,则VTH=1,比较器C1输出为低电平,无论C2输出何种电平,基本RS触发器,经输出反相缓冲器后,VO=0;T导通。这时称555定时器“高触发”。

VCO为控制电压端,在VCO端加入电压,可改变两比较器C1、C2的参考电压。正常工作时,要在VCO和地之间接0.01μF(电容量标记为103)电容。放电管Tl的输出端Dis为集电极开路输出。

元器件选择:

1根据555多谐震荡的原理选择电阻:由上所述可知:555芯片输出端输出的频率计算公式为f=1.43/((R1+2R2)C)

再由下表所列的八个音阶分别对应的频率可以令R1为一固定阻值,通过开关调节的几个串联的电阻当做R2。分别选用6个2千欧电阻,一个1千欧和一个十三千欧的电阻串联接于引脚6和引脚七。大概电路图1所示。

2电容选择:通过计算可以得出6引脚所需电容为0.1μF。输出端3接4.7μF电容。

根据以上选择计算实际频率与真实频率对比如下:

四  结论

一个星期的实训很快结束了。通过对简易电子琴的设计,我认识到了“理论联系实际”的这句话的重要性与真实性。在此次的课程设中计,我不仅巩固了以前学习过的知识,还增长了一些书本以外的知识,比如说制作万用板的过程,及焊接的方法,如何能焊接的光滑,美观,布线能够清爽一目了然,这些光看书本是永远也学不到的。最重要的是在实践中理解了书本上的知识,明白了学以致用的真谛,也明白课程设计的意义所在,它教会我们如何运用所学的知识去解决实际的问题,提高我们的分析能力、动手能力及处理问题的能力,还增强了我们的团结互助精神。在整个设计到电路板的制作、电路的焊接以及调试过程中,我用心做好每一步,虽然总做的电子琴原理简单焊接不是很困难,但是每一份付出背后的成功都是值得开心的。当然,我从实训中也发现了自身的许多缺点及不足,比如做事不仔细,动手能力欠缺。

此次实训中,在我没有领全器件时,芯片落在实验室时,焊接时需要同学帮助时,受到了很多老师同学的帮助,在此我要感谢他们。

附录一  参考文献

[1]阎石.数字电子技术基础.第五版.北京:高等教育出版社,2005.

[2]刘丽君,王晓燕.电子技术基础实验教程.南京:东南大学出版社,2008.

[3]周惠潮.常用元器件及典型应用.北京:电子工业出版社,2005.

[4]陈传虎,刘海宽.电子CAD实训教程.南京:东南大学出版社,2009.

附录二 所需元器件清单

元器件清单:

1. 万用表,电烙铁,镊子,剪线钳,吸锡器。

2. 集成电路       NE555 1片.

3. 电阻             2K       6个   

1        2个

13K      1个

4. 电容             0.01uF   1个 

                    0.1uF    1个

                    4.7uF    1 个 

5. 按键            8个

喇叭(0.5W)     1 个

附录三  电路总图

 

第二篇:简易电子琴设计报告

 一、设计指标

1.1设计任务

1.设计一个4X4的16个按键矩阵,并且每个键对应一个音,显示对应音键号。

2.用AT89C51将键盘连接设计成为电子琴。

3.编写电子琴的程序,要达到可以随意弹奏想要表达的音乐的目的。

4.程序的分析与调试,显示波形。

1.2 设计要求

1.用汇编语言编程实现程序设计。

2.利用查表,中断等方式实现目的。

3.系统的各各功能模块要清楚,有序。

4.程序运行时有友好的用户界面。

二、设计方框图

图2.1 系统主程序流程图

图2.2

三、元器件介绍

该设计主要由以下几个部件组成:

1:单片机AT89C51 :

 AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效的微控制器。

引脚说明:P0口:P0口为一个8位双向三态I/O口,每脚可驱动8个TTL负载。P0既可作为通用I/O口,又可作为外部扩展时的数据总线及低8位地址总线的分时复用口。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,每个引脚可驱动4TTL负载。P1口管脚写入1后,被内部上拉为高,可用作输入, P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。 

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,驱动4个TTL门电流。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可驱动4个TTL负载。当P3口写入"1"后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
      P3口也可作为AT89C51的一些特殊功能,管脚备选功能:P3.0 RXD(串行数据接受口)  P3.1 TXD(串行数据发送口)  P3.2 /INT0(外部中断0请求输入)  P3.3 /INT1(外部中断1请求输入)  P3.4 T0(定时器/计数器0外部输入口) P3.5 T1(定时器/计数器1外部输入口) P3.6 /WR(外部数据存储器RAM写选通)  P3.7 /RD(外部数据存储器RAM读选通)  P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许ALE的输出电平用于锁存地址的地位字节。当不访问其时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。/PSEN:外部程序存储器ROM的选通信号。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:反向振荡放大器的出及内部时钟工作电路的输出。

2:电源:电源部分有二部分组成。一部分是由220V的市电通过变压、整流稳压来得到+5V电压,维持系统的正常工作;另一部分是由3V的电池供电,以保证停电时正常走时。正常情况下电池是不提供电能的,以保证电池的寿命。

3:4*4的16个按钮矩阵。

4:模拟示波器:模拟产生的波形。

5:LM386音频功率放大器,LM386是美国国家半导体公司生产的音频功率放大器,主要应用于低电压消费类产品。为使外围元件最少,电压增益内置为20。但在1脚和8脚之间增加一只外接电阻和电容,便可将电压增益调为任意值,直至 200。输入端以地位参考,同时输出端被自动偏置到电源电压的一半,在6V电源电压下,它的静态功耗仅为24mW,使得LM386特别适用于电池供电的场 合。

6:74LS244锁存器:74LS244为3态8位地址锁存器, 地址锁存器就是一个暂存器,它根据控制信号的状态,将总线上地址代码暂存起来首先由CPU发出存储器地址,同时发出允许锁存信号ALE给锁存器,当锁存器接到该信号后将地址/数据总线上的地址锁存在总线上,随后才能传输数据。

四、设计原理

4.1 电路原理

主要分为二个部分:

(1)4X4行列式键盘识别;

(2)音乐产生的方法;

①一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同

的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。现在以单片机12MHZ晶振为例,列出高中低音符与单片机计数T0相关的计数值如表3.1所示.

下面我们要为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据:低音0-19之间,中音在20-39之间,高音在40-59之间

TABLE:   DW 0,63628,63835,64021,64103,64260,64400,64524,0,0

DW 0,63731,63928,0,64185,64331,64463,0,0,0

DW 0,64580,64684,64777,64820,64898,64968,65030,0,0

DW 0,64633,64732,0,64860,64934,64994,0,0,0

DW 0,65058,65110,65157,65178,65217,65252,65283,0,0

DW 0,65085,65134,0,65198,65235,65268,0,0,0

DW 0

 

表3.1  高中低音符与单片机计数T0相关的计数值表

②音乐的音拍,一个节拍为单位(C调)

对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。

在这个程序中用到了两个定时/计数器来完成的。其中T0用来产生音符频率,T1

用来产生音拍。

2、          各功能模块电路的设计(用Proteus仿真

  

                 1、  晶体振荡电路                        2、   上电自动复位电路    

 

                      3、按键电路

                     4、  显示按键建号

         

5音频功率放大电路                             6、模拟示波


3、         整体电路图

四、电路安装与调试过程

1.打开并设置MedWin

打开MedWin→设置仿真器→设置工作目录→设置编译器

2.使用MedWin

(1)新建项目  点击[项目管理]—[新建项目] 命令,输入项目名称,点击[确定]按钮,出现“添加项目文件”对话框,输入源代码文件名,如DITISHIYAN.ASM,单击[打开]按钮,出现代码窗口,即可开始编程。

(2)打开项目  点击[项目管理]—[打开项目] 命令,点击项目文件名(项目文件后缀为.mpf),点击[打开]按钮,即可打开上次保存的项目。

(3)编译  点击[项目管理]—[编译/汇编]命令,启动编译器对源文件进行语法检查并编译,在消息窗口中显示编译结果。

(3)模拟仿真  当源程序编译无误后,可进行模拟仿真调试。点击[项目管理]—[产生代码并装入]命令,生成.hex文件。编译器对源程序进行重新编译并装入。这时,可使用[调试]菜单中的相关命令进行调试,如设置断点、单步及全速执行等。

(4)生成目标代码  点击[项目管理]—[输出Binary文件]命令,生成BIN文件,用下载工具将其下载到实验板的单片机中执行。

3.Proteus的应用

首先安装此软件,然后打开,打开之后在图形编辑窗口进行画图。硬件电路图画好之后,将刚在MedWin中已经编辑好的程序写入单片机中(AT89C51)中,然后进行整体仿真。

五、电路测试与使用说明

硬件部分

 按照原理图连接电路,用PROTEUS模拟仿真测试电路,如果有问题就分块进行测试!

软件部分

如果硬件部分并无问题,那么就有可能是出现在软件部分。那么就需要一一查看程序是否有误,如若有误将其改正并编译并代码,而后加载进单片机内再次运行。

六、训练总结

这次我主要的设计是一个简易电子琴,采用16个键分别代表16个音,通过对按键的随意按击从而产生不同的音乐,主要是通过每个按键所产生的频率不同来使得发出的各个音不同,从而产一音乐  。

程序也实在很长,对于现在的我来说肯定一个人肯定很难编出这么长的程序,幸好有给与我帮助的同学和老师。虽然这个程序还不是很简洁,但我们可以根据每个程序的功能各不相同来使程序简化。不过我对目前的程序已经很满意了,但是也存在存在的问题:(1)功能单调 ,我们可以通过增加元件、模块,扩展键盘,增加子程序程序增加其功能。 (2)程序太过冗长,我们可以用其他的方法如查询等方法来精简程序,加强它的可读性。最后,通过这次的自主完成单片机的应用系统设计,让我学会了如何去完成一个设计报告,让我更进一步了解了单片机,也让我感受到做出一个设计的开心,喜悦与担心。相信这对以后的毕业设计也会有很大的帮助。

七、附录

 KEYBUF EQU 30H

STH0 EQU 31H                               

STL0 EQU 32H

TEMP EQU 33H

ORG 00H                   ;  开始地址

LJMP START

ORG 0BH                   ;  T0中断矢量地址

LJMP INT_T0    

START: MOV TMOD,#01H    ; 写控制字

SETB ET0                   ; 允许T0中断

SETB EA                    ; 开放CPU中断

WAIT:

MOV P3,#0FFH               ; P3口输出

CLR P3.4                    ; 清零

MOV A,P3

ANL A,#0FH

XRL A,#0FH                 ; 屏蔽高四位

JZ NOKEY1                  ; 判断

LCALL DELY10MS

MOV A,P3

ANL A,#0FH                 ;  屏蔽高四位

XRL A,#0FH                 ;  异或运算

JZ NOKEY1

MOV A,P3

ANL A,#0FH                 ;  屏蔽高四位 

CJNE A,#0EH,NK1            ;  判断A与#0eh是否相等

MOV KEYBUF,#0             ;  赋初值#0

LJMP DK1                   ;  跳转

NK1: CJNE A,#0DH,NK2

MOV KEYBUF,#1

LJMP DK1

NK2: CJNE A,#0BH,NK3

MOV KEYBUF,#2

LJMP DK1

NK3: CJNE A,#07H,NK4

MOV KEYBUF,#3

LJMP DK1                   ;  调用DK1

NK4: NOP                   ;  空指令延时一个周期

DK1:

MOV A,KEYBUF

MOV DPTR,#TABLE          ;  查表    赋首地址

MOVC A,@A+DPTR

MOV P0,A               

MOV A,KEYBUF

MOV B,#2

MUL AB                    ;  AB相乘

MOV TEMP,A

MOV DPTR,#TABLE1        ;  查表一

MOVC A,@A+DPTR

MOV STH0,A               ;  写定时常数

MOV TH0,A

INC TEMP

MOV A,TEMP

MOVC A,@A+DPTR

MOV STL0,A

MOV TL0,A

SETB TR0

DK1A: MOV A,P3

ANL A,#0FH                ;  屏蔽高四位

XRL A,#0FH

JNZ DK1A

CLR TR0

NOKEY1:                   ;  键1子程序

MOV P3,#0FFH

CLR P3.5

MOV A,P3

ANL A,#0FH

XRL A,#0FH

JZ NOKEY2                 ;  判断跳转键2子程序

LCALL DELY10MS

MOV A,P3

ANL A,#0FH

XRL A,#0FH

JZ NOKEY2

MOV A,P3

ANL A,#0FH

CJNE A,#0EH,NK5            ;  比较跳到键5

MOV KEYBUF,#4

LJMP DK2

NK5: CJNE A,#0DH,NK6        ;  键5子程序

MOV KEYBUF,#5

LJMP DK2

NK6: CJNE A,#0BH,NK7

MOV KEYBUF,#6

LJMP DK2

NK7: CJNE A,#07H,NK8

MOV KEYBUF,#7

LJMP DK2

NK8: NOP

DK2:

MOV A,KEYBUF

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P0,A

MOV A,KEYBUF

MOV B,#2

MUL AB

MOV TEMP,A

MOV DPTR,#TABLE1          ;  查表扫描表一

MOVC A,@A+DPTR

MOV STH0,A

MOV TH0,A

INC TEMP                    ;  移动TEMP,扫描键盘

MOV A,TEMP

MOVC A,@A+DPTR

MOV STL0,A

MOV TL0,A

SETB TR0                      ;   启动定时

DK2A: MOV A,P3

ANL A,#0FH

XRL A,#0FH

JNZ DK2A

CLR TR0

NOKEY2:

MOV P3,#0FFH

CLR P3.6

MOV A,P3

ANL A,#0FH

XRL A,#0FH

JZ NOKEY3

LCALL DELY10MS

MOV A,P3

ANL A,#0FH

XRL A,#0FH

JZ NOKEY3             

MOV A,P3

ANL A,#0FH

CJNE A,#0EH,NK9

MOV KEYBUF,#8

LJMP DK3                    ;  调用DK3

NK9: CJNE A,#0DH,NK10

MOV KEYBUF,#9

LJMP DK3

NK10: CJNE A,#0BH,NK11

MOV KEYBUF,#10

LJMP DK3

NK11: CJNE A,#07H,NK12

MOV KEYBUF,#11

LJMP DK3

NK12: NOP

DK3:

MOV A,KEYBUF

MOV DPTR,#TABLE             ;  查表

MOVC A,@A+DPTR

MOV P0,A

MOV A,KEYBUF

MOV B,#2

MUL AB

MOV TEMP,A

MOV DPTR,#TABLE1            ;  查表1

MOVC A,@A+DPTR

MOV STH0,A

MOV TH0,A

INC TEMP

MOV A,TEMP

MOVC A,@A+DPTR

MOV STL0,A

MOV TL0,A

SETB TR0                       ;  启动TR0 

DK3A: MOV A,P3

ANL A,#0FH

XRL A,#0FH

JNZ DK3A

CLR TR0

NOKEY3:

MOV P3,#0FFH                   ;  P3输出

CLR P3.7

MOV A,P3

ANL A,#0FH

XRL A,#0FH

JZ NOKEY4                      ;  判c=0转移

LCALL DELY10MS

MOV A,P3

ANL A,#0FH

XRL A,#0FH

JZ NOKEY4

MOV A,P3

ANL A,#0FH

CJNE A,#0EH,NK13

MOV KEYBUF,#12

LJMP DK4                        ;  调用DK4

NK13: CJNE A,#0DH,NK14

MOV KEYBUF,#13

LJMP DK4                        ;  调用DK4

NK14: CJNE A,#0BH,NK15

MOV KEYBUF,#14

LJMP DK4                        ;  调用DK4

NK15: CJNE A,#07H,NK16

MOV KEYBUF,#15

LJMP DK4

NK16: NOP

DK4:

MOV A,KEYBUF

MOV DPTR,#TABLE                ;  查表

MOVC A,@A+DPTR

MOV P0,A                         ;  P0输出

MOV A,KEYBUF

MOV B,#2

MUL AB

MOV TEMP,A

MOV DPTR,#TABLE1               ;  查表1

MOVC A,@A+DPTR

MOV STH0,A

MOV TH0,A

INC TEMP          

MOV A,TEMP

MOVC A,@A+DPTR

MOV STL0,A

MOV TL0,A                         ;  写定时的低位

SETB TR0                           ;  启动T0

DK4A: MOV A,P3

ANL A,#0FH                         ;  屏蔽高四位

XRL A,#0FH

JNZ DK4A

CLR TR0

NOKEY4:

LJMP WAIT

DELY10MS:

MOV R6,#10

D1: MOV R7,#248

DJNZ R7,$

DJNZ R6,D1

RET

INT_T0:                             ;  重写定时常数

MOV TH0,STH0

MOV TL0,STL0

CPL P1.0

RETI

TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H

DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H

TABLE1: DW 64021,64103,64260,64400

DW 64524,64580,64684,64777

DW 64820,64898,64968,65030

DW 65058,65110,65157,65178

END

相关推荐