内蒙古工业大学单片机实训蜂鸣器、按键、数码管显Word版_第1页
内蒙古工业大学单片机实训蜂鸣器、按键、数码管显Word版_第2页
内蒙古工业大学单片机实训蜂鸣器、按键、数码管显Word版_第3页
内蒙古工业大学单片机实训蜂鸣器、按键、数码管显Word版_第4页
内蒙古工业大学单片机实训蜂鸣器、按键、数码管显Word版_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学校代码: 10128单片机工程实践好好学习不准抄袭!题 目: 仪表参数设定(任务二) 组长:指导教师:刘伟、裴岩、斯日古楞、杨传颖、韩海波、高鹏 、郭慧(研)、胡元元(研)设计时间:2013年6月17日2012年6月29日0 / 37设计目的:通过一个以8 位单片机为核心的模拟量数字表的硬件调试过程,掌握具有七段LED 显示、蜂鸣器自检、键盘自检的单片机应用系统的设计思想和方法。同时用单片机实现一个模拟的乒乓球游戏机。学习应用系统软件的模块化设计方法,通过源程序的编辑、汇编或编译、链接、仿真调试,完成给定的任务。通过上述过程提高学生工程实践能力和素质。一、 设计任务:要求明确设计任务内容及任

2、务分工等;(内容小四号宋体字)1、 基本任务: 完成蜂鸣器、键盘、七段LED 显示器、AD7109的自检程序设计。 (1)蜂鸣器自检 要求:利用程序实现两种以上声音。 (2)键盘自检 要求:确定键盘正确。 (3)七段LED 显示器自检 要求:确定LED 显示器每一段均正确。 。 主任务:题目10:乒乓球游戏机难度系数:9功能: 1、用5个LED显示器作为乒乓球台,用LED显示器的中间横线“一”代表乒乓球 2、用两个按键代表球拍。 3、比赛规则:当“一”到了最左侧LED时,左侧要及时击球,右侧同理。 4、输赢判断:当乒乓球到达某一侧时,若提前或滞后按键(击球),则为输,用声音和显示来表示。 5、

3、球速要随着比赛回合的增加而加快,击球判断时间逐渐减小。 6*、可以显示比分。硬件环境:键盘、LED显示器、喇叭等2.任务分工:组长:张勤伟负责主程序的编写以及定时计数器有关控制反应时间以及球速的编写及调用 组员:武松负责编写键盘采集程序编写 组员:张子阳负责编写各程序所用延时子程序和蜂鸣器的程序的编写二、 框图:要求包括自检任务和主任务的框图1、 硬件编程框图及相关说明喇叭自检硬件框图:P2.3 P2.3置0后,喇叭会发声,P2.3置1后,喇叭不响。键盘自检硬件框图:P1LEDP2.5P2.6P2.7K1,K2,K3,K4的开关值对应P1口的低4位,而自检开关由高4位控制。然而,此程序要求保护

4、自检开关,检验K1,K2,K3,K4的正确性。调用SEL8可以打开74HC245L的三态门。然后将最终表现结果巧妙的利用LED或喇叭表现出来。七段LED显示器自检硬件框图:字型口P0.7P0.0P0字位口P2.7P2.6P2.5RR.abhCOMa f b g e c d h反相驱动器2803P0.7P0.0P0+5VQ1DT1SEL1A Y0B Y1C Y2 138 Y7 P2.7P2.6P2.5P0口负责字型口,P2口负责字位口,实验中的数码管都是共阳极的。通过中断控制模数转换,采集模拟的电压量,转换为用LED显示出来的数字信号量。2、 主程序框图、子程序框图及相关说明 1)乒乓球主程序框

5、图:LED从左到右依次亮比赛开始初始化程序判断发球权LED从右到左依次亮A发球B发球B接到球? A接到球?蜂鸣器响,A加1分蜂鸣器响,B加一分A得11分?B得11分?显示比分,A胜显示比分,B胜比赛结束加速加速YYNNYYNN2)子程序框图判断发球权框图判断jufaq=0开始Clr faqiu从左向右发球Stb faqiu从右向左发球是否乒乓球做一程序(右移同理)延时打开三态门K1是否按下下几位同理选用SEL1,打开SEL8K1是否按下加速,右移B加一分,蜂鸣器响B加一分开始开显示“一”选通SEL5第一位显示YYNN接球过程框图:选通SEL1启动定时计数器0(溢出次数为n)SEL1所接LED亮

6、加速K1是否按下SEL1接LED亮定时器重新装入初值不变速重新发球向右移动NY功能:B发球确定A是否正确击中球显示分数框图: 开始 取分数 将分数的十位数与个位 数放入缓存区 显示个位数显示十位数延时喇叭自检的程序框图: 注释:每次循环给R0.R1,R2赋初值0A0H,延时1,延时2,延时3根据标准音符频率得到。开始不响延时1响延时1R0=0不响延时2响延时2R1=0不响延时3响延时3R2=0是是是否否否 LED自检程序框图开始位选第一个LED各段码分别显示及数字并延时0-9送字型显示子程序送01H(小数点亮)送40H(f亮)送10H(d亮)送08H(c亮)送20H(e亮)为选第四个LED位选

7、第五个LED位选第个LED位选第三个LED送02H(a亮)送04H(b亮)各段码分别显示及数字并延时各段码分别显示及数字并延时各段码分别显示及数字并延时各段码分别显示及数字并延时送FFH(8.亮)送80H(g亮)结束此模块返回键盘自检程序框图开始P1=0DH?P1=0FH?P1=07H?C=1?采样显示1,响一声显示2,响两声显示4,响四声显示3,响三声清除高四位YNYYNNNY三、 程序清单:乒乓球游戏机程序score_left equ 30h;定义左侧分数缓存区uint_left equ 31h;左侧得分的个位缓存区decade_left equ 32h;左侧得分的十位缓存区score_r

8、ight equ 33h;定义右侧分数缓存区uint_right equ 34h;定义右侧的分缓存区decade_right equ 35h;定义右侧分数十位缓存区speed equ 36h;定义球移动速度缓存区speed2 equ 37hscore equ 38h;为发球的次数开辟缓存区beep bit p2.3;定义蜂鸣器端口k1 bit p1.0;定义k1位k2 bit p1.1;定义k2位k3 bit p1.2;定义k3位k4 bit p1.3;定义k4位org 00hajmp mainorg 0bhajmp time;time为定时器0子程序org 30h;错开中断入口地址main:

9、init:MOV p1,#0ffh MOV p0,#00h SETB p2.3;关闭蜂鸣器 mov score_left,#0h;初始化分数 mov uint_left,#0h;初始化左侧分数个位 mov decade_left,#0h mov score_right,#0h;初始化右侧分数 mov uint_right,#0h;初始化右侧个位分数 mov decade_right,#0h;初始化右侧分数十位 mov speed,#60;初始化球的移动速度 mov TMOD,#01h;设置定时计数器方式1 mov TH0,#0b1h mov TL0,#0e0h;定时20ms mov n,#50

10、 mov IE,#82h;开总中断和定时计数器0中断 mov R7,#0h;初始化R7start: jb p1.2,start;启动判断开关 lcall delay2;延时去抖动 jb p1.2,start;如果k3键按下则继续执行,否则返回 jb jufaq ,clr faqiu;判断谁的发球权 setb faqiu jb faqiu, yd_left:判断A,B谁发球 yd_rightyd_left:mov p0,#80h ;送入“一” cjne a,#11,led_left1 lcall score_display_left led_left1:acall sel5 acall dela

11、y acall sel8yd_left2:jb k1,yd_left3;如果k1不按下则 lcall delay2 jb k1,yd_left2 lcall yd_left_failyd_left3:acall sel4 acall delay acall sel8yd_left4:jb k1,yd_left5 lcall delay2 jb k1,yd_left4 lcall yd_left_fail;如果在此时按下k1键则跳入输判断子程序yd_left5:acall sel3 acall delay acall sel8yd_left6:jb k1,yd_left7 lcall delay

12、2 jb k1,yd_left6 lcall yd_left_fail;yd_left7:acall sel2 acall delay acall sel8yd_left8:jb k1,yd_left9 lcall delay2 jb k1,yd_left8 lcall led_left_failyd_left9:acall sel1 acall delay acall sel8yd_left10:jb p1.0,yd_left11;如果没有按下键则重新从左发球 lcall delay2 jb p1.0,yd_left10 lcall time;如果接住球启动定时器加速球的速度 ljmp yd

13、_right yd_left11:inc score_right lcall fail_buzzer clr TR0 ljmp led_left;*;此程序实现乒乓球右移动程序;* yd_right:mov p0,#80h ;送入“一” cjne a,#11,led_right1 lcall score_display_leftyd_right1:acall sel1 acall delay acall sel8yd_right2:jb k4,yd_right3 lcall delay2 jb k4,yd_right2 lcall yd_right_failyd_right3:acall se

14、l2 acall delay acall sel8yd_right4:jb k4,yd_right5 lcall delay2 jb k4,yd_right4 lcall yd_right_failyd_right5:acall sel3 acall delay acall sel8yd_right6:jb k4,yd_right7 lcall delay2 jb k4,yd_right6 lcall yd_right_failyd_right7:acall sel4 acall delay acall sel8yd_right8:jb k4,yd_right9 lcall delay2 jb

15、 k4,yd_right8 lcall yd_right_failyd_right9:acall sel5 acall delay acall sel8 nopyd_right10: jb p1.3,yd_right;如果没有按下则重新从有发球 lcall delay2 jb p1.3,yd_right10 nop lcall time;如果接住球则启动定时计数器 ljmp led_left yd_right11:inc score_left lcall fail_buzzer clr TR0 ljmp yd_right ;*;功能:对输球进行处理的子程序;返回值:右侧分数;*yd_left_

16、fail:lcall fail_buzzer inc score_right clr TR0 ajmp yd_leftyd_right_fail:lcall fail_buzzer inc score_left clr TR0 ajmp yd_right;*;下面为所有用到的的子程序;*sel5: setb p2.5 clr p2.6 clr p2.7 retsel4: clr p2.5 setb p2.6 setb p2.7 retsel3: clr p2.5 setb p2.6 clr p2.7 retsel2: clr p2.5 clr p2.6 setb p2.7 retsel1: c

17、lr p2.5 clr p2.6 clr p2.7 retsel8:setb p2.5;开三态门74hc245 setb p2.6 setb p2.7 ret;*;分数显示程序;本段程序用来将采集的分数显示到数码管上;*;接住球的蜂鸣器程序win_buzzer:mov r4,#60 mov p0,#0ch;在蜂鸣器响的同时让1也亮win_buzzer1:cpl beep acall delay1 djnz r4,win_buzzer1 ret;未接住蜂鸣器的程序fail_buzzer:mov r4,#60fail_buzzer1:cpl beep acall delay2 djnz r4,fa

18、il_buzzer1 ret;*;分数显示程序;本段程序用来将采集的左侧击球分数显示到数码管上;*score_display_left: mov a,score_left; mov b,#10 div ab mov uint_left,b;将分数的个位送入相应的缓冲区 mov decade_left,a;将十位送入相应的缓冲区 mov DPTR,#tab mov a,uint_left;将个位数送入到a中 movc a,a+DPTR acall sel3;开个位显示 mov p0,a;显示个位数 lcall delay1 mov p0,#00h;关显示以去除虚亮 mov a,decade_le

19、ft movc a,a+DPTR acall sel2;开十位显示 mov p0,a;显示十位数 lcall delay1 mov p0,#00h;关显示以去除虚亮sore_display_right:mov a,score_right; mov b,#10 div ab mov uint_right,b;将分数的个位送入相应的缓冲区 mov decade_right,a;将十位送入相应的缓冲区 mov DPTR,#tab mov a,uint_right;将个位数送入到a中 movc a,a+DPTR acall sel5;开个位显示 mov p0,a;显示个位数 lcall delay1

20、mov p0,#00h;关显示以去除虚亮 mov a,decade_right movc a,a+DPTR acall sel4;开十位显示 mov p0,a;显示十位数 lcall delay1 mov p0,#00h;关显示以去除虚亮 ajmp score_display_left ret;*;定时计数程序 中断子程序;为球移动速度进行定时,控制反应时间;*time:push ACC push PSW inc r7 cjne r7,#11,exit djnz n ,time exit dec n dec speed mov r7,#00hexit: mov TH0,#0b1h;重装初值 m

21、ov TL0,#0e0h; pop PSW pop ACC retidelay:mov r6,speed d1:mov r5,#100 d2:mov r4,#60 djnz r4,$ djnz r5,d2 djnz r6,d1 retdelay1:mov r0,#20 d3:mov r1,#20 djnz r1,$ djnz r0,d3 retdelay2:mov r2,#50 d4:mov r3,#20 djnz r3,$ djnz r2,d4 rettab: db 7eh,0ch,0b6h,9eh,0cch,0dah,0fah,0eh,0feh,0deh;数码管显示0,1,2,3,4,5,

22、6,7,8,9 end喇叭自检程序清单:BEEP:MOV R0,#0DFH MOV R1,#0DFH MOV R2,#0DFHLOOP1:SETB P2.3 ACALL DELAY1 CLR P2.3 ACALL DELAY1 DJNZ R0,LOOP1 LOOP2:SETB P2.3 ACALL DELAY2 CLR P2.3 ACALL DELAY2 DJNZ R1,LOOP2 LOOP3:SETB P2.3 ACALL DELAY3 CLR P2.3 ACALL DELAY3 DJNZ R2, LOOP3 SJMP BEEPDELAY1:MOV R6,#02H N1:MOV R7,#07

23、BH N2:DJNZ R7,N2 DJNZ R6,N1 RETDELAY2:MOV R4,#02H N3:MOV R5,#0AFH N4:DJNZ R5,N4 DJNZ R4,N3 RETDELAY3:MOV R3,#02H N5:MOV R4,#0DFH N6:DJNZ R4,N6 DJNZ R3,N5 RETLED自检程序清单:键盘自检程序清单:KR245: MOV P0,#0 LCALL SEL8 MOV P1,#0FFH MOV A,P1 ANL A,#0FH CJNE A,#0FH,ZWZ1 SJMP KR245 ZWZ1: LCALL DELAY10 MOV P1,#0FFH MO

24、V A,P1 ANL A,#0FH CJNE A,#0FH,ZW1 SJMP KR245 ZW1: LCALL SEL7 CJNE A,#0DH,ZW2 SJMP Z2 ZW2: JC ZW3 SJMP Z1 ZW3: CJNE A,#07H,Z3 SJMP Z4 Z1:LCALL W1 LCALL LED SJMP KR245 W1:LCALL SEL1 MOV P0,#0CH LCALL BEEP RET Z2: LCALL W2 LCALL LED SJMP KR245 W2:LCALL SEL2 MOV P0,#0B6H LCALL BEEP LCALL BEEP RET Z3:LCA

25、LL W3 LCALL LED SJMP KR245 W3:LCALL SEL3 MOV P0,#9EH LCALL BEEP LCALL BEEP LCALL BEEP RET Z4:LCALL W4 LCALL LED LJMP KR245 W4:LCALL SEL4 MOV P0,#0CCH LCALL BEEP LCALL BEEP LCALL BEEP LCALL BEEP RETBEEP: CLR P2.3 LCALL DELAY1 SETB P2.3 LCALL DELAY1 RETLED: MOV R0,#07H LOOP1: LCALL DELAY DJNZ R0,LOOP1

26、 RET DELAY:MOV R6,#0DEH LOOP3:DJNZ R7,LOOP3 RET DELAY10:MOV R6,#14H LOOP4:MOV R7,#0F8H LOOP5:DJNZ R7,LOOP5 DJNZ R6,LOOP4 RETDELAY1:MOV R6,#0A9H LOOP6:MOV R7,#0B0H LOOP7:DJNZ R7,LOOP7 DJNZ R6,LOOP6 RET SEL1: CLR P2.7 CLR P2.6 CLR P2.5 RETSEL2: SETB P2.7 CLR P2.6 CLR P2.5 RETSEL3: CLR P2.7 SETB P2.6 CLR P2.5 RETSEL4: SETB P2.7 SETB P2.6 CLR P2.5 RETSEL7: CLR P2.7 SETB P2.6 SETB P2.5 RETSEL8: SETB P2.7 SETB P2.6 SETB P2.5 RET要求有明确的程序注解、程序清单可分两栏打印四

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论