ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:83.20KB ,
资源ID:8384176      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8384176.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机课程设计报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机课程设计报告.docx

1、单片机课程设计报告单片机课程设计实 验 报 告学 院:XXXX专 业:XXXX学生姓名:XXXX学 号:XXXX任课教师:XXXX XX 年 XX 月 XX 日一、实验目的1.熟练应用proteus仿真单片机基本功能;2.了解计算机控制蜂鸣器发声原理(模拟电子琴);3.增强对汇编语言的熟悉。二、功能说明1. 仿真功能:可以成功仿真单片机小程序;2. 单片机功能:电子音调发生器-拨动不同的开关产生不同的音调即依次波动K0K7,发出1,2,3,4,5,6,7,i八个音调,播放两首乐曲。三、实验原理及设计思路(一)Proteus仿真单片机 在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:

2、*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。PROTEUS不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。 它的元器件、连接线路等却和传统的单片机实验硬件高度对应。这在相当程度上替代了传统的单片机实验教学的功能,例:元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。 使用Proteus 软件进行单片机系统仿真设计,是虚拟仿真技术和计算机多媒体技术相结合的综合运用,有利于培养学生的电路设计能力及仿真软件的操作能力;且对单片机的学习比单纯学习书本知识更容易让

3、人接受,更容易提高。实践证明,在使用 Proteus 进行系统仿真开发成功之后再进行实际制作,能极大提高单片机系统设计效率。(二)电子音调发生器 1实验原理 (1)音调与节拍: 音调由不同频率的方波产生,音调与频率的关系如下表所示。要产生音频方波,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用计时器计时此半周期时间,每当计时到后就将输出方波的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚得到此频率的方波。在ZKS-03实验仪上,产生方波的I/O脚选用P1.7,通过跳线选择器JP1将单片机的P1.7与蜂鸣器的驱动电路相连。这样P1.7输出不同频

4、率的方波,蜂鸣器便会发出不同的声音。 音乐的节拍是由延时实现的,如果1拍为0.4秒,1/4拍是0.1秒。只要设定延时时间,就可求得节拍的时间。延时作为基本延时时间,节拍值只能是它的整数倍。(2)蜂鸣器电路:蜂鸣器有交流和直流两种。直流蜂鸣器驱动简单,一旦在引脚上加入直流电源它就会发出一定频率的声音,此时声音的音调和音量是固定的;而交流蜂鸣器在这方面则显得较灵活,输入声音信号的频率和音长是可控的,因此输出的声响将更逼真、更悦耳。本实验仪有一个交流蜂鸣器,由于一般I/O口的驱动能力有限,因此不用它直接驱动蜂鸣器,它与P87C52X2的连接方式如下图所示。Buzzer通过一个跳线与P1.7相连,P1

5、.7输出不同频率的方波信号,蜂鸣器就会发出不同的声音。如果控制输出信号的频率和音长,蜂鸣器则会发出悦耳的音乐。2.设计思路 可将功能实现分如下模块:电源模块-开关控制模块+MCU控制模块+蜂鸣器发生模块-数码管显示模块四、实验过程(一)Proteus仿真单片机1.第一个LED灯亮:程序:#include reg52.h sbit led1=P10; void delay() int i,j; for(i=0;i100;i+) for(j=0;j1000;j+); void main() while(1) led1=1;delay();led1=0;delay(); 实验现象:第一个LED灯亮。

6、仿真: 2.流水灯程序:#include void delay(void) int i; int j; for(i=0;i100;i+) for(j=0;j200;j+); void main(void) int i; while(1) P1 = 0xFF;delay(); for(i=0;i8;i+) P1 = P1 1;delay(); 实验现象:LED 灯从LED1向LED8依次亮,到全部亮后在循环仿真: 3.按键中断程序:#includesbit s1 = P20;sbit s2 = P21;sbit s3 = P22;sbit s4 = P23;sbit en = P25;int d

7、ispcount = 0;void Delay(int m)while(-m);void ext_int0() interrupt 0 /中断服务程序 EA = 0; Delay(4000); dispcount+; /每按一次中断按键,计数加一 if(dispcount=10) dispcount=0; EA = 1;void ext_int1() interrupt 2 /中断服务程序 EA = 0; Delay(4000); dispcount-; /每按一次中断按键,计数减一 if(dispcount0) dispcount=9; EA = 1;void display(void) /

8、数码管显示函数 s1 = 0; s2 = 0; s3 = 0; s4 = 0; en = 1; switch(dispcount) case 0: P0 = 0xC0; /display 0 Delay(60000); break; case 1: P0 = 0xF9; /display 1 Delay(60000); break; case 2: P0 = 0xA4; Delay(60000); /display 2 break; case 3: P0 = 0xB0; /display 3 Delay(60000); break; case 4: P0 = 0x99; /display 4

9、break; case 5: P0 = 0x92; /display 5 Delay(60000); break; case 6: P0 = 0x82; /display 6 Delay(60000); break; case 7: P0 = 0xF8; /display 7 Delay(60000); break; case 8: P0 = 0x80; /display 8 Delay(60000); break; case 9: P0 = 0x90; /display 9 Delay(60000); break; default: P0 = 0x88; /display a break;

10、void main() TCON=0x05; IE=0x85; while(1) display(); /循环显示,等待中断 实验现象:数码管显示4个0,进入等待外部中断状态:按下S1时,显示值加一;按下S2时,显示值减一;仿真结果:初始显示0000,按下开关一后,数字加一;按下开关二,数字减一;最大值9999. (二)电子音调发生器1.实验源程序ORG 0000HKEYPRO:JB P1.2,GO1 ;P1.2口为1时跳转 LJMP GOMUS1 ;P1.2口为0时判断P1.4是否也为0,P1.4为0时长转移 GO0:LJMP KEYP01 ;P1.4口不为0,P1.2口为0时发1音 GO1

11、:JB P1.4,GO2 LJMP GOMUS6 G10:LJMP KEYP02 ;检查P1.2不为0后,P1.4口为0 发“2”音 GO2:JB P1.5,GO3 LJMP GOMUS3 GO21:LJMP KEYP03 GO3:JB P1.6,GO4 LJMP GOMUS7 GO31:LJMP KEYP04 GO4:JB P3.2,GO5 LJMP GOMUS4 GO41:LJMP KEYP05 GO5:JB P3.3,GO6 LJMP GOMUS8 GO51:LJMP KEYP06 GO6:JB P3.4,GO8 LJMP GOMUS2 GO7:LJMP KEYP07 ;p3.4口为0

12、发“7”音 GO8:JB P3.5,KEYPRO ;都为1则重新扫描 LJMP GOMUS5 ;跳到再次判定k6 GO9:LJMP KEYP08 ;判定k6不为0,则p3.5口为0 发“I”音GOMUS1:JB P1.4,GO0 LJMP MUSTART1 ;k0,k1同为0播歌1,k1不为0,返回1.2发“1”音GOMUS2:JB P3.5,GO7 LJMP MUSTART2 ;k6,k7同为0播歌2,k7不为0,返回3.4发“7”音GOMUS3:JB P1.6,GO21 LJMP MUSTART3GOMUS4:JB P3.3,GO41 LJMP MUSTART4 GOMUS5:JB P3.

13、4,GO9 ;k7为0,再检查k6是否为0 LJMP MUSTART2GOMUS6:JB P1.2,G10 LJMP MUSTART1 ;k1为0,再检查k0是否为0GOMUS7:JB P1.5,GO31 LJMP MUSTART3GOMUS8:JB P3.2,GO51 LJMP MUSTART4KEYP01:SETB P1.7 ;音调1的方波发生 MOV R3,#100 ;设循环初值,使开关在0时播放一段时间MAIN01: MOV TMOD,#01H ;设置定时器t0工作方式1 MOV TL0,#21H MOV TH0,#0F9H ;音调1对应初值f921h SETB TR0 ;启动t0工作

14、WAIT1:JNB TF0,WAIT1 ;定时未到,循环等待 CLR TF0 ;定时到,清tf0 CPL P1.7 ;由p1.7输出,信号取反 DJNZ R3,MAIN01 MOV A,#0F9H ACALL SHOW LJMP KEYPRO KEYP02:SETB P1.7 ;音调2的方波发生 MOV R3,#100MAIN02: MOV TMOD,#01H MOV TL0,#0E1H MOV TH0,#0F9H SETB TR0WAIT2:JNB TF0,WAIT2 CLR TF0 CPL P1.7 DJNZ R3,MAIN02 MOV A,#0A4H ACALL SHOW LJMP KE

15、YPROKEYP03:SETB P1.7 ;音调3的方波发生 MOV R3,#100MAIN03: MOV TMOD,#01H MOV TL0,#8CH MOV TH0,#0FAH SETB TR0WAIT3:JNB TF0,WAIT3 CLR TF0 CPL P1.7 DJNZ R3,MAIN03 MOV A,#0B0H ACALL SHOW LJMP KEYPROKEYP04:SETB P1.7 ;音调4的方波发生 MOV R3,#100 SETB P1.6MAIN04: MOV TMOD,#01H MOV TL0,#0D8H MOV TH0,#0FAH SETB TR0WAIT4:JNB

16、 TF0,WAIT4 CLR TF0 CPL P1.7 DJNZ R3,MAIN04 MOV A,#99H ACALL SHOW LJMP KEYPROKEYP05:SETB P1.7 ;音调5的方波发生 MOV R3,#100MAIN05: MOV TMOD,#01H MOV TL0,#68H MOV TH0,#0FBH SETB TR0WAIT5:JNB TF0,WAIT5 CLR TF0 CPL P1.7 DJNZ R3,MAIN05 MOV A,#92H ACALL SHOW LJMP KEYPROKEYP06:SETB P1.7 ;音调6的方波发生 MOV R3,#100 MAIN0

17、6: MOV TMOD,#01H MOV TL0,#0E9H MOV TH0,#0FBH SETB TR0WAIT6:JNB TF0,WAIT6 CLR TF0 CPL P1.7 DJNZ R3,MAIN06 ACALL SHOW MOV A,#82H LJMP KEYPROKEYP07:SETB P1.7 ;音调7的方波发生 MOV R3,#100MAIN07: MOV TMOD,#01H MOV TL0,#5BH MOV TH0,#0FCH SETB TR0WAIT7:JNB TF0,WAIT7 CLR TF0 CPL P1.7 DJNZ R3,MAIN07 MOV A,#0F8H ACA

18、LL SHOW LJMP KEYPROKEYP08:SETB P1.7 ;音调I的方波发生 MOV R3,#100MAIN08: MOV TMOD,#01H MOV TL0,#8FH MOV TH0,#0FCH SETB TR0WAIT8:JNB TF0,WAIT8 CLR TF0 CPL P1.7 DJNZ R3,MAIN08 MOV A,#80H ACALL SHOW LJMP KEYPROJIELI:JMP KEYPROMUSTART1: ;歌曲1的播放程序 MOV R0,#00H ;节拍表指针置零 MOV R1,#00H ;音符表指针置零RTAB:MOV A,R0 MOV DPTR,#

19、RYTH MOVC A,A+DPTR MOV R2,A ;查表法将一个节拍数据取出放R2计数器中TTAB:MOV A,R1 MOV DPTR,#TONE MOVC A,A+DPTR MOV R3,A ;取出音符表高8位 INC R1 ;指针加1 MOV A,R1 MOV DPTR,#TONE MOVC A,A+DPTR MOV R4,A ;取出低8位 SETB P1.7 ;输出相应音调的方波LOOP:MOV R5,#3BHMAIN:MOV TMOD,#01H MOV TL0,R4 MOV TH0,R3 SETB TR0WAIT:JNB TF0,WAIT CLR TF0 CPL P1.7MAYA

20、:JB P1.2,MAYB ;判断1.2,1.4口是否有为1 JB P1.4,MAYB LJMP RA MAYB:JB P3.4,JIELI ;判断3.4,3.5口是否有为1 JB P3.5,JIELI LJMP MUSTART2 ;3.4,3.5口皆为0则放第二首歌RA: MOV A,#86H ;显示E ACALL SHOW DJNZ R5,MAIN ;无打断则继续放第一首歌 DJNZ R2,LOOPINC R0INC R1 ;两个表的指针都加1CJNE R1,#166,RTAB ;判断是否取完LJMP KEYPRO;知足音符表TONE2:; 1 7. 1 5 5 1 7. 1 3 DB 0

21、F9H,21H,0F8H,0B6H,0F9H,21H,0FBH,68H,0FBH,68H,0F9H,21H,0F8H,0B6H,0F9H,21H,0FAH,8CH; 1 7. 1 5. 3 2 6. 7. 1 2 DB 0F9H,21H,0F8H,0B6H,0F9H,21H,0F6H,0D4H,0FAH,8CH,0F9H,0E1H,0F7H,0D1H,0F8H,0B6H,0F9H,21H,0F9H,0E1H; 1 7. 1 5 5 6 7 i 5DB 0F9H,21H,0F8H,0B6H,0F9H,21H,0FBH,68H,0FBH,68H,0FBH,0E9H,0FCH,5BH,0FCH,8F

22、H,0FBH,68H; 6 7 i 5 3 3 4 3 6. 2 1DB 0FBH,0E9H,0FCH,5BH,0FCH,8FH,0FBH,68H,0FAH,8CH,0FAH,8CH,0FAH,0D8H,0FAH,8CH,0F7H,0D1H,0F9H,0E1H,0F9H,21H; 1 i 7 6 4 2 5. 7 6 5 2 1 DB 0F9H,21H,0FCH,8FH,0FCH,5BH,0FBH,0E9H,0FAH,0D8H,0F9H,0E1H,0FDH,6EH,0FCH,5BH,0FBH,0E9H,0FBH,68H,0F9H,0E1H,0F9H,21H; 2 3 4 4 6 5 3 2 3

23、 3 4 5 DB 0F9H,0E1H,0FAH,8CH,0FAH,0D8H,0FAH,0D8H,0FBH,0E9H,0FBH,68H,0FAH,8CH,0F9H,0E1H,0FAH,8CH,0FAH,8CH,0FAH,0D8H,0FBH,68H; 1 i 7 6 4 7 i 2 5 2 7 i DB 0F9H,21H,0FCH,8FH,0FCH,5BH,0FBH,0E9H,0FAH,0D8H,0FCH,5BH,0FCH,8FH,0FCH,0EFH,0FBH,68H,0FCH,0EFH,0FCH,5BH,0FCH,8FH; 6 7 i 6 7 i 2 5 DB 0FBH,0E9H,0FCH,0

24、EFH,0FCH,8FH,0FBH,0E9H,0FCH,5BH,0FCH,8FH,0FCH,0EFH,0FBH,68H;知足节拍表RYTH2:DB 08,04,04,08,12,08,04,04,20DB 08,04,04,06,09,04,04,04,04,20DB 08,04,04,08,12,10,07,07,20DB 10,08,08,08,04,06,06,04,03,04,05DB 04,06,06,08,08,05,04,05,05,06,08,08DB 04,05,08,04,05,08,04,05,08,04,05,06DB 04,05,06,10,08,06,06,12,0

25、9,07,06,15DB 04,04,14,04,04,14,05,22MUSTART3: ;歌曲3的播放程序 MOV R0,#00H ;节拍表指针置零 MOV R1,#00H ;音符表指针置零RTAB3:MOV A,R0 MOV DPTR,#RYTH3 MOVC A,A+DPTR MOV R2,A ;查表法将一个节拍数据取出放R2计数器中TTAB3:MOV A,R1 MOV DPTR,#TONE3 MOVC A,A+DPTR MOV R3,A ;取出音符表高8位 INC R1 ;指针加1 MOV A,R1 MOV DPTR,#TONE3 MOVC A,A+DPTR MOV R4,A ;取出低

26、8位 SETB P1.7 ;输出相应音调的方波LOOP3:MOV R5,#3BHMAIN3:MOV TMOD,#01H MOV TL0,R4 MOV TH0,R3 SETB TR0WAIT33:JNB TF0,WAIT33 CLR TF0 CPL P1.7MAYA2:JB P1.5,MAYB2 JB P1.6,MAYB2 ;判断1.5,1.6口是否有1 LJMP RB1MAYB2:JB P1.2,BACK1 JB P1.4,BACK1 LJMP MUSTART1 ;1.2,1.4口皆为0则放第一首歌BACK1:LJMP JIELIRB1: MOV A,#86H ACALL SHOW DJNZ

27、R5,MAIN3 ;无打断则继续放第三首歌 DJNZ R2,LOOP3INC R0INC R1 ;两个表的指针都加1CJNE R1,#166,RTAB3 ;判断是否取完LJMP KEYPRO2.Proteus仿真1)创建一个Keil 应用程序(1)新建一个工程项目文件;(2)为工程选择保存位置,且命名(最好在一个新建文件夹中);(3)为工程项目设置调试环境;因芯片为AT89C52,选择设备Atmel下AT89C52(4)新建一个新文件并输入程序代码;(5)另存创建的源程序项目文件到同一个文件夹,后缀.asm;(6)把源程序文件添加到项目中。2)编译连接环境设置 为产生.hex输出文件,按如下图

28、对工程目标进行设定:输出.hex文件,点击编译,没有问题就可以直接运行了。3)仿真点击proteus软件中电路图芯片位置,导入该hex,运行即可。3.外接单片机使用方法(1)连接好实验仪与主机的RS-232通信电缆和电源;(2)把实验仪的工作模式选择开关切换到LOAD处,复位系统使实验仪工作于下载状态;(3)运下载软件并装载hex文件:把用户程序经过编译后生成的HEX文件下载,将实验版工作模式选择开关拨至“LOAD”位置,按下复位开关“RESET”,系统复位后,实验仪将执行P87C52X2中的下载监控程序,实现与上位机进行通信,完成下载程序的功能;(4)keil设置:为目标选项参数设置:-设置

29、,根据所连计算机插口,选择COM口;点击调试-运行,即可;若要停止,点击调试-停止运行;(5)脱机运行程序:正确连接实验仪与主机的RS-232通信电缆和电源;把实验仪的工作模式选择开关切换到RUN处,复位系统使实验仪工作于脱机运行状态。五、实验感想纵观这次实验,自我感觉收获很大。因为单片机课程本身实用性就很强,在课堂理论讲解时的硬件结构,指令系统,程序结构,存储器扩展技术等部分内容,均让我在本次实验中有了切身的理解和应用体会。 首先是单片机的焊接,因为有电路图,所以焊接没有什么难度。但是,同样的的焊接方法,我焊接好的单片机却出故障而不能调试,在多方查找症结无果后,我借用他人单片机对我的程序进行了调试。此外我还对基本程序和新程序做了仿真。仿真使用的是proteus软件,需要点击芯片导入hex文件。我先对一些基本小程序做出仿真,大获成功。在本文中我挑选了

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

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