计算机控制技术课程设计文档格式.docx

上传人:b****7 文档编号:22763335 上传时间:2023-02-05 格式:DOCX 页数:40 大小:309.77KB
下载 相关 举报
计算机控制技术课程设计文档格式.docx_第1页
第1页 / 共40页
计算机控制技术课程设计文档格式.docx_第2页
第2页 / 共40页
计算机控制技术课程设计文档格式.docx_第3页
第3页 / 共40页
计算机控制技术课程设计文档格式.docx_第4页
第4页 / 共40页
计算机控制技术课程设计文档格式.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

计算机控制技术课程设计文档格式.docx

《计算机控制技术课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《计算机控制技术课程设计文档格式.docx(40页珍藏版)》请在冰豆网上搜索。

计算机控制技术课程设计文档格式.docx

四、设计仪器、设备和材料清单

主要仪器设备:

个人计算机和相关的软件

主要元器件:

独立按键18个

单片机芯片AT80C51一片

12MHz晶振一个

2N3906三极管一个

不同阻值电阻数个

开关一个

USB电源插口一个

喇叭一个

不同数值电容数个

电路板一块

五、主要原件功能

(1)AT89C51单片机及其引脚说明

AT89C51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51

主要特性:

·

8031CPU与MCS-51兼容

4K字节可编程FLASH存储器(寿命:

1000写/擦循环)

全静态工作:

0Hz-24KH·

三级程序存储器保密锁定

128*8位内部RAM

32条可编程I/O线

两个16位定时器/计数器

6个中断源

可编程串行通道

低功耗的闲置和掉电模式

片内振荡器和时钟电路

(2)、4X4行列式键盘识别及显示

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

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

编码键盘:

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

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

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

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

非编码键盘:

键盘只简单地提供按键开关的行列矩阵。

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

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

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

(1)去抖动:

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

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

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

去抖问

1.题可通过软件延时或硬件电路解决。

(2)防串键:

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

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

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

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

(3)被按键识别:

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

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

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

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

(4)键码产生:

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

2.用AT89S51的并行口P0接4×

4矩阵键盘,以P0.0-P0.3作输入线,以P0.4-P0.7作输出线;

在数码管上显示每个按键的“0-F”序号。

六、设计简单原理介绍

一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。

若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。

利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。

就可在P1.0引脚上得到此频率的脉冲。

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

计数脉冲值与频率的关系式(如式3-1所示)是:

N=fi÷

fr3-1

式中,N是计数值;

fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);

fr是想要产生的频率。

其计数初值T的求法如下:

T=65536-N=65536-fi÷

fr

例如:

设K=65536,fi=1MHz,DO(523Hz)的计数值。

fr=65536-1000000÷

fr=65536-500000/f

DO的T=65536-500000/523=64580

单片机12MHZ晶振,高中低音符与计数T0相关的计数值如表4-2所示

表3-2音符频率表

低音音符

频率HZ

中音音符

高音音符

1

261.63

523.25

1045.5

2

293.67

587.33

1174.66

3

329.63

659.46

1318.51

4

349.23

698.46

1396.92

5

391.99

738.99

1567.98

6

440.00

880.00

1760.00

7

493.88

987.76

1975.52

我们要为这个音符建立一个表格,单片机通过查表的方式来获得相应的数据

低音0-19之间,中音在20-39之间,高音在40-59之间

TABLE:

DW0,63628,63835,64021,64103,64260,64400,64524,0,0

DW0,63731,63928,0,64185,64331,64463,0,0,0

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

DW0,64633,64732,0,64860,64934,64994,0,0,0

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

DW0,65085,65134,0,65198,65235,65268,0,0,0

DW0

在这个程序中,弹奏音乐的程序是用定时/计数器T0来完成的,播放音乐程序则是用定时/计数器T1来完成的。

七、设计的主要流程

(1)软件总体方案及设计流程

1)键盘扫描程序:

检测是否有键按下,有键按下则记录按下键的键值,并跳转至功能转移程序;

无键按下,则返回键盘扫描程序继续检测

2)功能转移程序:

对检测到得按键值进行判断,是琴键则跳转至琴键处理程序,是功能键则跳转至相应的功能程序,我们设计的功能程序有两种,即音色调节功能和自动播放乐曲功能

3)琴键处理程序:

根据检测到得按键值,查询音律表,给计时器赋值,使发出相应频率的声音

4)自动播放歌曲程序:

检测到按键按下的是自动播放歌曲功能键后执行该程序,电子琴会自动播放事先已经存放好的歌曲,歌曲播放完毕之后自动返回至键盘扫描程序,继续等待是否有键按下

(2)程序简易流程图

1)主程序:

开始

键盘扫描程序

T0初始化并开中断允许T0中断

T1初始化并开中断允许T1中断

有键按下否

延时去抖动

识别按键功能

是否弹奏键

播放键

取相应的音符码装入T1

根据按键功能装入相应音符值到T0

启动T1

启动T0

按键释放成功否

停止T0工作

停止T1工作

2)弹奏程序流程图:

弹奏子程序

开中断并允许中断设定定时器工作方式

取键值

根据键值查音律表

给定时器T0赋值

开始计时

进入中断

CPLP3.0P3.0

退出中断

延时

返回键盘扫描程序

3)自动播放歌曲程序流程图:

自动播放音乐程序

A<

<

0,DPTR<

歌谱地址

开中断,设定定时器T1工作模式

取简谱码

取该音符的节拍码

STOP

A=0

Y

N

休止符

返回键盘扫描

A=0FFH

查音律表,给定时器赋值

INCDPTR

CPL3.0

(3)电路设计原理图如下:

(4)、PCB电路图如下:

(5)、设计源程序

PORT1EQUP1

PORT2EQUP2

SCKBITP3.0

SDABITP3.1

ORG0H

SJMPMAIN

ORG0BH

LJMPTIME0

ORG1BH

LJMPTIME1

ORG30H

MAIN:

CLRTR0

CLRTR1

MOVSP,#4FH

MOVR0,#100

CLRP3.4

LCALLDELAY5

MOV9H,#0

MOV0AH,#0

MOV0BH,#0

MOV0CH,#0

MOVTMOD,#11H

MOVIE,#8AH

MOV0DH,#88H

XIAN:

JBP3.2,QT1;

没按下放歌建跳qt1

SETBP3.4;

按下放歌建LED发光

LCALLDELAY1

JNBP3.2,$;

放歌建没释放原地等待

Q1:

LCALLSAO

CJNER0,#0,Q11

SJMPQ1

Q11:

LCALLTRANF

JZMAIN

MOV0DH,A;

0DH=按键值

LJMPSING0

QT1:

JBP3.3,QT4;

没按弹奏建跳QT3

SETBP3.4

JNBP3.3,$;

弹奏键没释放原地等待

QT2:

CJNER0,#0,QT3

SJMPQT2

QT3:

LCALLTRANF

CJNEA,#0BH,QT11;

若按键值=11转(B键)MAIN;

!

=11键转QT11

LJMPMAIN

QT11:

JCMAIN;

若按键值<

11转MAIN;

>

11继续

CJNEA,#0CH,M4;

若按键值!

=12转M1;

=12(C键)继续;

即C键没按下转M1

MOVPORT1,#11101111B

JNBP1.3,$;

若C键没释放原地等待

LJMPLOOP;

输入乐曲存储并演奏

M4:

LCALLRWX80;

擦写内存数据;

全部为1

LJMPMAIN

QT4:

LJMPXIAN;

返回重新扫描放歌和弹奏建

RWX80:

CJNEA,#0DH,MM2;

A!

=13(D键)转M2;

若为D键继续;

D键没按下转M2

MOV0EH,#0A2H;

0EH=162=10100010B;

0EH为24c16页地址

SJMPMM

MM2:

CJNEA,#0EH,MM3;

=14(E键)转M3;

E键没按下转M3

MOV0EH,#0A4H;

0EH=164=10100100B

SJMPMM

MM3:

MOV0EH,#0A6H;

F键按下;

0EH=166=10100110B

MM:

MOV0CH,#0H

RWX801:

LCALLRKX02

LCALLWKX02

INC0BH

MOVA,0BH

CJNEA,#0FFH,MM4

MM4:

INC0CH

CJNEA,#0H,RWX801

RET;

RKX02:

LCALLSTART

MOVA,#0A0H;

24C16寻址10100000写

LCALLWRBYT

LCALLTACK

MOVA,0BH;

发送24c16子地址

MOVA,#0A1H;

24C16寻址10100001读

;

LCALLWRBYT

LCALLTACK

MOV10H,R6

LCALLRDBYT

LCALLNOTACK

MOV11H,R6

MOV12H,R6

MOV13H,R6

LCALLSTOP

WKX02:

MOVR1,#10H

MOVA,#0A0H

MOVA,0CH

MOVR0,#4

WKX021:

MOVA,@R1

INCR1

DJNZR0,WKX021

LOOP:

AAA:

JBP3.3,LOOP4;

弹奏键按下向下执行存储乐曲并演奏否则转LOOP4继续输入乐曲

LCALLWBAY;

存00结束乐谱

MOV0DH,#12

LJMPSING0;

播放弹奏的乐曲

LOOP4:

CJNER0,#0,KEYIN

LJMPLOOP

KEYIN:

SWAPA

MOV09H,A

CJNEA,#0,ZZZ;

非0键转ZZZ

LJMPZZZZ;

0键转ZZZZ

ZZZ:

DECA;

A为按键值;

因从1键值音调序号对应TABLE频率表0位置;

故减1

MOV22H,A;

22H存修正后(A=A-1)的按键值

CLRC

RLCA;

A*2因TABLE一个单元为2字节(1字),指向该单元的第1个字节

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVTH1,A;

TH1赋初值

MOV21H,A;

TH1初值存21H

MOVA,22H

A*2因TABLE一个单元为2字节(1字)

INCA;

指向该单元的第2个字节

MOVTL1,A;

TL1赋初值

MOV20H,A;

TL1初值存20H

MOVTH0,#0C2H

MOVTL0,#0F6H

SETBTR0

SETBTR1

ZZZZ:

MOVA,PORT1

ORLA,#0F0H

CJNEA,#0FFH,ZZZZ

MOVA,0AH;

弹奏乐谱频率延迟值赋A

RRCA

RRCA;

弹奏乐谱频率延迟值/8

CJNEA,#0FH,NODE

SJMPDDD

NODE:

JCDDD

MOVA,#0FH;

弹奏乐谱频率延迟值/8后;

若>

15则=15

DDD:

ORL09H,A;

WWW:

MOVA,09H

MOV0CH,A

LCALLWBAY

LJMPLOOP;

频率延时

DELAY:

MOVR7,#125

DLY2:

MOVR4,#02

DLY3:

MOVR3,#248

DJNZR3,$

DJNZR4,DLY3

DJNZR7,DLY2

DJNZR5,DELAY

RET

DELAY1:

MOVR7,#30

MOVR6,#0

S1:

DJNZR6,$

DJNZR7,S1

DELAY5:

MOVR7,#10

S5:

DJNZR7,S5

SAO:

MOVR3,#11101111B

MOVR2,#11111111B

NLINE1:

MOVA,R3

MOVPORT1,A

CJNEA,#0FFH,KEYIN1

RLA

MOVR3,A

DJNZR0,NLINE1

KEYIN1:

LCALLNOPEN

RET

NOPEN:

MOVR2,A

CJNEA,#0FFH,NOPEN1

SJMPNOPEN

NOPEN1:

TRANF:

MOVB,#0

MOVA,R2

C1:

JNCC2;

C=0跳C2

INCB

INCB;

B=B+4

LJMPC1

C2:

RRA

C3:

JNCC4

LJMPC3

C4:

MOVA,B;

B为按键值

SING0:

MOV30H,#00H;

30H为TABLE1~11地址计数器

NEXT:

MOVA,0DH

CJNEA,#1,NN1

MOVDPTR,#TABLE1

LJMPWW

NN1:

CJNEA,#2,NN2

MOVDPTR,#TABLE2

NN2:

CJNEA,#3,NN3

MOVDPTR,#TABLE3

NN3:

CJNEA,#4,NN4

MOVDPTR,#TABLE4

NN4:

CJNEA,#5,NN5

MOVDPTR,#TABLE5

NN5:

CJNEA,#6,NN6

MOVDPTR,#TABLE6

NN6:

CJNEA,#7,NN7

MOVDPTR,#TABLE7

NN7:

CJNEA,#8,NN8

MOVDPTR,#TABLE8

NN8:

CJNEA,#9,NN9

MOVDPTR,#TABLE9

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 自我管理与提升

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1