设计分享

您所在的位置:网站首页 蜂鸣器发出7种音阶汇编语言 设计分享

设计分享

#设计分享| 来源: 网络整理| 查看: 265

目录

具体实现功能:

设计介绍

单片机介绍

设计思路

设计内容

仿真实现

汇编程序

具体实现功能:

按下不同的按键分别发出不同的音阶,分别可以发出以下音阶:低3,低4,低5,低6 ,低7;中1,中2,中3;中4,中5,中6,中7;高1,高2,高3,高4。

设计介绍 单片机介绍

51单片是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM,32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口。另外 STC89X51 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35Mhz,6T/12T可选。

设计思路

文献研究法:搜集整理相关单片机智能手环系统相关研究资料,认真阅读文献,为研究做准备;

调查研究法:通过调查、分析、具体试用等方法,发现单片机智能手环系统的现状、存在问题和解决办法;

比较分析法:比较不同单片机智能手环系统的具体原理,以及同一类传感器性能的区别,分析单片机智能手环系统的研究现状与发展前景;

软硬件设计法:通过软硬件设计实现具体硬件实物,最后测试各项功能是否满足要求。

设计内容 仿真实现

本设计利用protues8.7软件实现仿真设计,具体如图。

Protues也是在单片机仿真设计中常用的设计软件之一,通过设计出硬件电路图,及写入驱动程序,就能在不实现硬件的情况进行电路调试。另外,protues还能实现PCB的设计,在仿真中也可以与KEIL实现联调,便于程序的调试,且支持多种平台,使用简单便捷。

汇编程序

本设计由汇编语言编写,主代码具体如下:

KEYBUF EQU 30H ; KEYBUF定义为30H STH0 EQU 31H ;STH0 定义为,31H STL0 EQU 32H ;STL0 定义为,32H TEMP EQU 33H ;TEMP 定义为,33H ORG 00H LJMP START ORG 0BH LJMP INT_T0 START: MOV TMOD,#01H ;设置定时器0的工作方式 SETB ET0 ;设置定时器中断 SETB EA ; 开总中断WAIT: MOV P3,#0FFH ;设置P3口为输入模式 CLR P3.4 ;清0 P3.4,按键的第一行扫描 MOV A,P3 ; ANL A,#0FH ; XRL A,#0FH ; JZ NOKEY1 ; LCALL DELY10MS ;延时10ms MOV A,P3 ; ANL A,#0FH ; XRL A,#0FH ; JZ NOKEY1 ; MOV A,P3 ; ANL A,#0FH ; CJNE A,#0EH,NK1 ; MOV KEYBUF,#0 ; LJMP DK1 ;NK1: CJNE A,#0DH,NK2 ; K1键按下 MOV KEYBUF,#1 ; LJMP DK1 ;NK2: CJNE A,#0BH,NK3 ;K2键按下 MOV KEYBUF,#2 ; LJMP DK1 ;NK3: CJNE A,#07H,NK4 ;K3键按下 MOV KEYBUF,#3 ; LJMP DK1 ;NK4: NOP ;K4键按下 DK1: MOV A,KEYBUF MOV B,#2 MUL AB ;因为查表里都是字,所以乘2的查表数据 MOV TEMP,A ; MOV DPTR,#TABLE ; 指向表头 MOVC A,@A+DPTR ; 查表 MOV STH0,A ; MOV TH0,A ; 将数据高位送TH0 INC TEMP ; MOV A,TEMP ; MOVC A,@A+DPTR ; MOV STL0,A ; MOV TL0,A ;将数据低位送TH0 SETB TR0 ; 启动定时器T0DK1A: MOV A,P3 ; ANL A,#0FH ; XRL A,#0FH ; JNZ DK1A ; CLR TR0 ;关闭定时器T0NOKEY1: MOV P3,#0FFH ;设置P3口为输入模式 CLR P3.5 ;清0 P3.5,按键的第二行扫描 MOV A,P3 ; ANL A,#0FH ; XRL A,#0FH ; JZ NOKEY2 ; LCALL DELY10MS ; 延时10ms MOV A,P3 ; ANL A,#0FH ; XRL A,#0FH ; JZ NOKEY2 ; MOV A,P3 ; ANL A,#0FH ; CJNE A,#0EH,NK5 ; MOV KEYBUF,#4 ; LJMP DK2 ;NK5: CJNE A,#0DH,NK6 ;K5键按下 MOV KEYBUF,#5 ; LJMP DK2 ;NK6: CJNE A,#0BH,NK7 ;K6键按下 MOV KEYBUF,#6 ; LJMP DK2 ;NK7: CJNE A,#07H,NK8 ;K7键按下 MOV KEYBUF,#7 ; LJMP DK2 ;NK8: NOP ; K8键按下DK2: MOV A,KEYBUF ; MOV B,#2 ; MUL AB ;因为查表里都是字,所以乘2的查表数据 MOV TEMP,A ; MOV DPTR,#TABLE ; 指向表头 MOVC A,@A+DPTR ; 查表 MOV STH0,A ; MOV TH0,A ;将数据高位送TH0 INC TEMP ; MOV A,TEMP ; MOVC A,@A+DPTR ; MOV STL0,A ; MOV TL0,A ;将数据低位送TH0 SETB TR0 ;启动定时器T0DK2A: MOV A,P3 ; ANL A,#0FH ; XRL A,#0FH ; JNZ DK2A ; CLR TR0 ; 关闭定时器T0NOKEY2: MOV P3,#0FFH ;设置P3口为输入模式 CLR P3.6 ; 清0 P3.6,按键的第三行扫描 MOV A,P3 ; ANL A,#0FH ; XRL A,#0FH ; JZ NOKEY3 ; LCALL DELY10MS ; 延时10ms 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 ;NK9: CJNE A,#0DH,NK10 ;K9键按下 MOV KEYBUF,#9 ; LJMP DK3 ;NK10: CJNE A,#0BH,NK11 ;K10键按下 MOV KEYBUF,#10 ; LJMP DK3 ;NK11: CJNE A,#07H,NK12 ;K11键按下 MOV KEYBUF,#11 ; LJMP DK3 ;NK12: NOP ; K12键按下DK3: MOV A,KEYBUF ; MOV B,#2 ; MUL AB ;因为查表里都是字,所以乘2的查表数据 MOV TEMP,A ; MOV DPTR,#TABLE ;指向表头 MOVC A,@A+DPTR ;查表 MOV STH0,A ; MOV TH0,A ;将数据高位送TH0 INC TEMP ; MOV A,TEMP ; MOVC A,@A+DPTR ; MOV STL0,A ; MOV TL0,A ;将数据低位送TH0 SETB TR0 ;启动定时器T0 DK3A: MOV A,P3 ; ANL A,#0FH ; XRL A,#0FH ; JNZ DK3A ; CLR TR0 ;关闭定时器T0NOKEY3: MOV P3,#0FFH ;设置P3口为输入模式 CLR P3.7 ;清0 P3.7,按键的第四行扫描 MOV A,P3 ; ANL A,#0FH ; XRL A,#0FH ; JZ NOKEY4 ; LCALL DELY10MS ;延时10ms 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 ;NK13: CJNE A,#0DH,NK14 ; K13键按下 MOV KEYBUF,#13 ; LJMP DK4 ;NK14: CJNE A,#0BH,NK15 ;K14键按下 MOV KEYBUF,#14 ; LJMP DK4 ;NK15: CJNE A,#07H,NK16 ;K15键按下 MOV KEYBUF,#15 ; LJMP DK4 ;NK16: NOP ; K16键按下DK4: MOV A,KEYBUF ; MOV B,#2 ; MUL AB ; 因为查表里都是字,所以乘2的查表数据 MOV TEMP,A ; MOV DPTR,#TABLE ; 指向表头 MOVC A,@A+DPTR ; 查表 MOV STH0,A ; MOV TH0,A ;将数据高位送TH0 INC TEMP ; MOV A,TEMP ; MOVC A,@A+DPTR ; MOV STL0,A ; MOV TL0,A ;将数据低位送TH0 SETB TR0 ;启动定时器T0DK4A: MOV A,P3 ; ANL A,#0FH ; XRL A,#0FH ; JNZ DK4A ; CLR TR0 ; 关闭定时器T0NOKEY4: LJMP WAIT ;DELY10MS: MOV R6,#10 ; 10ms延时子程序D1: MOV R7,#248 ; DJNZ R7,$ ; DJNZ R6,D1 ; RET ; INT_T0: MOV TH0,STH0 ; T0中断服务程序 MOV TL0,STL0 ; CPL P1.0 ; 输出方波 RETI ;TABLE: DW 64021,64103,64260,64400 ;低3,低4,低5,低6 DW 64524,64580,64684,64777 ;低7,中1,中2,中3 DW 64820,64898,64968,65030 ;中4,中5,中6,中7 DW 65058,65110,65157,65178 ; 高1,高2,高3,高4           END          ; 


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3