单片机工程实践报告.docx

上传人:b****5 文档编号:11665048 上传时间:2023-03-29 格式:DOCX 页数:13 大小:93.43KB
下载 相关 举报
单片机工程实践报告.docx_第1页
第1页 / 共13页
单片机工程实践报告.docx_第2页
第2页 / 共13页
单片机工程实践报告.docx_第3页
第3页 / 共13页
单片机工程实践报告.docx_第4页
第4页 / 共13页
单片机工程实践报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

单片机工程实践报告.docx

《单片机工程实践报告.docx》由会员分享,可在线阅读,更多相关《单片机工程实践报告.docx(13页珍藏版)》请在冰豆网上搜索。

单片机工程实践报告.docx

单片机工程实践报告

 

 

单片机工程实践

(第7组)

组长:

乒乓球游戏机(任务十)

王伟男(电子08-1班)学号:

200810203017

周秀丽(电子08-1班)学号:

200820203071

徐菡卿(电子08-1班)学号:

200810203033

斯日古楞、高鹏、韩海波、陈宇(研)

设计时间:

2011年3月7日~2011年3月18日

设计目的:

用单片机实现一个模拟的乒乓球游戏机

设计任务:

任务内容:

开发LED显示模块加速模块、显示模块、蜂鸣器模块

任务分配:

组长:

王伟男负责主程序的编写以及定时器和中断的编写及联调组员:

徐菡卿负责编写键盘采集程序编写

组员:

周秀丽负责编写延时子程序和蜂鸣器的程序的编写

框图(包括自检和任务的框图):

 

主程序框图、子程序框图及相关说明

(1)主程序框图

乒乓球向左移的子程序框图(乒乓球向右移动的程序同理):

分数显示子程序:

 

键盘自检:

 

LED自检程序:

 

四、

程序清单:

・***************************************************************************

***********************

;#######功能:

实现模拟乒乓球游戏机功能

;##############CPU:

AT80C51

;##############晶振频率11.0592MHz

;##############开发环境:

伟福ICE

;########返回值:

;########设计人:

刘红喜、王欣冉、郭兴荣

;########组别:

一组

;########游戏规则:

当按下k3键时游戏开始,首先从左侧发球,其中k1和k4键分别代表左侧球拍和右侧####

;#################当左侧球拍提前击球或者滞后击球都会为对方加分,接住球不计分,右侧同理########

;#################当接住球后开始加速,但是当提前击球或者滞后击球则停止加速球的运动###########

;#################规定每局打20次,在20次结束后开始显示比分

###################################

************************

score_leftequ30h;uint_leftequ31h;decade_leftequ32h;score_rightequ33h;uint_rightequ34h;decade_rightequ35h;定义右侧分数十位缓存区

定义左侧分数缓存区左侧得分的个位缓存区左侧得分的十位缓存区定义右侧分数缓存区

定义右侧的分缓存区

定义蜂鸣器端口定义k1位定义k2位定义k3位定义k4位定义拨盘

speedequ36h;定义球移动速度缓存区speed2equ37htimesequ38h;为发球的次数开辟缓存区beepbitp2.3;k1bitp1.0;k2bitp1.1;k3bitp1.2;k4bitp1.3;sw1bitp1.4;sw2bitp1.5sw3bitp1.6sw4bitp1.7org00hajmpmainorg0bhajmptimer0;timer0为定时器0子程序

org30h;错开中断入口地址

;下面是主程序##################

;#######################################

main:

init:

movp1,#0ffh;

movp0,#00h;

setbp2.3;

movscore_left,#0h;

movuint_left,#0h;

movdecade_left,#0h

movscore_right,#0h;

movuint_right,#0h;

movdecade_right,#0h;

键盘端口初始化

关数码管

关闭蜂鸣器

初始化分数

初始化左侧分数个位

初始化右侧分数

初始化右侧个位分数

初始化右侧分数十位

movspeed,#60;初始化球的移动速度movtimes,#20;每局打20下

movTMOD,#01h设置定时计数器方式1movTH0,#0b1h

movTL0,#0e0h;定时20msmovIE,#82h;开总中断和定时计数器0中断movr7,#0h;

start:

jbk3,start;

lcalldelay2;

jbk3,start;

初始化r7

启动判断开关

延时去抖动

如果k3键按下则继续执行,否则返回

lcallwin_buzzer;*****************************************;乒乓球左移程序;此段程序用于将“球”向左移动

led_left:

movp0,#80h;送入“一”

djnztimes,led_left1;判断是否为20次lcallscore_display_leftled_left1:

acallsel5acalldelayacallsel8led_left2:

jbk1,led_left3;

lcalldelay2

jbk1,led_left2lcallled_left_failled_left3:

acallsel4acalldelayacallsel8led_left4:

jbk1,led_left5lcalldelay2

如果k1不按下则

 

如果在此时按下k1键则跳入输判断子程序

jbk1,led_left4acallled_left_fail;

led_left5:

acallsel3acalldelayacallsel8led_left6:

jbk1,led_left7lcalldelay2jbk1,led_left6lcallled_left_fail;

如果没有按下键则重新从左发球

led_left7:

acallsel2acalldelayacallsel8led_left8:

jbk1,led_left9lcalldelay2jbk1,led_left8lcallled_left_failled_left9:

acallsel1acalldelayacallsel8led_left10:

jbk1,led_left11;

nop;较容易出问题处noplcalldelay2jbk1,led_left10acallsel1;开数码管第一位nopacallwin_buzzer

setbtr0;如果接住球启动定时器加速球的速度ljmpled_rightled_left11:

incscore_right

lcallfail_buzzerclrTR0ljmpled_left

;此程序实现乒乓球右移动程序

・*****************************led_right:

movp0,#80h;送入“一”djnztimes,led_right1lcallscore_display_leftled_right1:

acallsel1acalldelayacallsel8

led_right2:

jbk4,led_right3

lcalldelay2

jbk4,led_right2

lcallled_right_failled_right3:

acallsel2

acalldelay

acallsel8led_right4:

jbk4,led_right5lcalldelay2jbk4,led_right4lcallled_right_failled_right5:

acallsel3

acalldelay

acallsel8led_right6:

jbk4,led_right7

lcalldelay2jbk4,led_right6lcallled_right_failled_right7:

acallsel4

acalldelay

acallsel8led_right8:

jbk4,led_right9lcalldelay2jbk4,led_right8

lcallled_right_fail

如果没有按下则重新从有发球

led_right9:

acallsel5acalldelayacallsel8nopnopled_right10:

jbk4,led_right11;

lcalldelay2jbk4,led_right10acallsel5;开数码管第5位nopacallwin_buzzer

setbTR0;如果接住球则启动定时计数器ajmpled_leftled_right11:

incscore_leftlcallfail_buzzerclrTR0ljmpled_right;功能:

对输球进行处理的子程序

;返回值:

右侧分数

led_left_fail:

lcallfail_buzzerincscore_rightclrTR0ajmpled_leftled_right_fail:

lcallfail_buzzerincscore_leftclrTR0ajmpled_right

;下面是所有的子程序sel5:

setbp2.5

clrp2.6

clrp2.7

ret

sel4:

clrp2.5

setbp2.6

setbp2.7

ret

sel3:

clrp2.5

setbp2.6

clrp2.7

ret

sel2:

clrp2.5

clrp2.6

setbp2.7

ret

sel1:

clrp2.5

clrp2.6

clrp2.7

ret

sel8:

setbp2.5;开三态门74hc245

setbp2.6

setbp2.7

ret;分数显示程序;本段程序用来将采集的分数显示到数码管上;接住球的蜂鸣器程序win_buzzer:

movr4,#60movp0,#0ch;在蜂鸣器响的同时让"1"也亮win_buzzer1:

cplbeepacalldelay1

djnzr4,win_buzzer1

ret

;未接住蜂鸣器的程序fail_buzzer:

movr4,#60fail_buzzer1:

cplbeepacalldelay2djnzr4,fail_buzzer1ret;分数显示程序

;本段程序用来将采集的左侧击球分数显示到数码管上

score_display_left:

mova,score_left;

movb,#10divabmovuint_left,b;movdecade_left,a;movDPTR,#tabmova,uint_left;movca,@a+DPTRacallsel3;movp0,a;lcalldelay1movp0,#00h;mova,decade_left

将分数的个位送入相应的缓冲区

将十位送入相应的缓冲区

将个位数送入到a中

开个位显示

显示个位数

关显示以去除虚亮

movca,@a+DPTRacallsel2;movp0,a;lcalldelay1movp0,#00h;

开十位显示

显示十位数

关显示以去除虚亮

sore_display_right:

mova,score_right;movb,#10divabmovuint_right,b;movdecade_right,a;movDPTR,#tabmova,uint_right;movca,@a+DPTR

将分数的个位送入相应的缓冲区

将十位送入相应的缓冲区

将个位数送入到a中

开个位显示显示个位数

acallsel5;movp0,a;lcalldelay1movp0,#00h;

mova,decade_right

关显示以去除虚亮

movca,@a+DPTR

 

acallsel4;

movp0,a;

lcalldelay1movp0,#00h;

ajmpscore_display_leftret

开十位显示

显示十位数

关显示以去除虚亮

;定时程序中断子程序;为球移动速度进行定时

・***********************

timer0:

pushACC

pushPSWincr7cjner7,#20,exitdecspeedmovr7,#00h

exit:

movTH0,#0b1h;重装初值movTL0,#0e0h;

popPSW

popACC

retidelay:

movr6,speedd1:

movr5,#100d2:

movr4,#60djnzr4,$djnzr5,d2djnzr6,d1retdelay1:

movr0,#20d3:

movr1,#20

djnzr1,$

djnzr0,d3retdelay2:

movr2,#50d4:

movr3,#20

djnzr3,$

djnzr2,d4ret

tab:

db7eh,0ch,0b6h,9eh,0cch,0dah,0fah,0eh,0feh,0deh;0,1,2,3,4,5,6,7,8,9

end

数码管显示

######################################################################################################################################

 

蜂鸣器自检程序:

beePbitp2.3;sbitbeep=P2八3;freequ00horg00h

ajmpmain

org0bh

ajmptimer0

org30h

main:

movTMOD,#01h;0000/0001movTH0,#00hmovTL0,#0ffhmovIE,#82h;1000/0010setbtr0

output:

incfreacalldelay;ajmpoutput

timer0:

pushACCpushPSWmovTH0,#0fehmovTL0,frecplbeeppopPSWpopACCreti

delay:

movr6,#50d5:

movr7,#20d6:

djnzr7,d6djnzr6,d5retend

##############################################################################################################################################################################键盘自检:

k1bitp1.0;定义键盘

k2bitp1.1

k3bitp1.2

k4bitp1.3

sw5bitp1.4;定义拨盘

sw6bitp1.5

sw7bitp1.6

sw8bitp1.7

;键盘定义完毕

beepbitp2.3定义蜂鸣器端口org00hajmpmainorg30hmain:

lcallsel8movp0,#00hmovp1,#Offh;端口初始化且定义p1口为输入口setbbeep初;始化蜂鸣器口nopnopjnbk1,next1jnbk2,next2jnbk3,next3jnbk4,next4ajmpmain

next1:

movpO,#O86h

clrp2.Osetbp2.1setbp2.2setbp2.4next11:

cplbeep

acalldelay1jnbk1,next11ljmpmainret

next2:

movpO,#Odbh

clrp2.1setbp2.Osetbp2.2setbp2.4next22:

cplbeep

acalldelay2jnbk2,next22ljmpmainret

next3:

movpO,#Ocfh

clrp2.2setbp2.Osetbp2.1setbp2.4next33:

cplbeep

acalldelay3jnbk3,next33ljmpmainret

next4:

movpO,#Oe6h

clrp2.4setbp2.Osetbp2.1

setbp2.2next44:

cplbeep

acalldelay4jnbk4,next44ljmpmainretsel8:

setbp2.7

setbp2.6

setbp2.5retdelay1:

movr4,#20d3:

movr5,#20d4:

djnzr5,d4

djnzr4,d3

retdelay2:

movr4,#50d5:

movr5,#20d6:

djnzr5,d6

djnzr4,d5

retdelay3:

movr4,#200d7:

movr5,#20d8:

djnzr5,d8

djnzr4,d7

retdelay4:

movr4,#500d9:

movr5,#50d10:

djnzr5,d10

djnzr4,d9

ret

end

################################################################################################################################################################################LED自检程序

org00h

ajmpmain

org30h

main:

acallsel5

acallnext

acallsel4

acallnext

acallsel3

acallnext

acallsel2

acallnext

acallsel1acallnext

ajmpmainsel5:

setbp2.5

clrp2.6

clrp2.7retsel4:

clrp2.5

setbp2.6

setbp2.7retsel3:

clrp2.5

setbp2.6clrp2.7retsel2:

clrp2.5

clrp2.6setbp2.7retsel1:

clrp2.5p2.6p2.7

delay:

movr6,#50

d1:

movr5,#50

d2:

movr4,#50djnzr4,$djnzr5,d2djnzr6,d1end

见附页

七、参考资料

1、《单片机系统综合设计与实践》教材主编:

裴岩刘利民内蒙古大学出版社。

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

当前位置:首页 > 求职职场 > 简历

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

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