单片机工程实践.docx
- 文档编号:27486805
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:17
- 大小:19.15KB
单片机工程实践.docx
《单片机工程实践.docx》由会员分享,可在线阅读,更多相关《单片机工程实践.docx(17页珍藏版)》请在冰豆网上搜索。
单片机工程实践
设计目的:
通过一个以8位单片机为核心的模拟量数字表的硬件调试过程,掌握具有七段LED显示、键盘、蜂鸣器等接口电路的单片机应用系统的设计思想和方法。
学习应用系统软件的模块化设计方法,通过源程序的编辑、汇编或编译、链接、仿真调试,完成给定的任务。
提高工程实践能力和素质。
一、设计任务:
设计内容:
模拟全自动洗衣机的功能:
(1)用显示器表示工作进程和电机正反转
(2)工作过程与全自动洗衣机相同
任务分工:
①蜂鸣器自检(李二冬主编)
②键盘自检(郑晓军主编)
③LED自检(董振主编)
④洗衣机:
a框图编写(董振)
b启动、进水(郑晓军)
c洗涤、排水(董振)
d甩干(李二冬)
e汇总(董振、李二冬、郑晓军)
f打字,制作实践报告书(董振)
三、框图(包括自检和任务的框图):
1、硬件编程框图及相关说明(图1)
2、主程序框图、子程序框图及相关说明(图2,图3,图4,图5,图6,图7)
P0
硬件框图
单片机89C51
ULN2803
LED段选
P2
74LS138
LED位选
K1——K4
拨盘
74LS245
P1
P2.5
P2.6
P2.7
图1
主程序框图
开始
启动?
检测K1
N
Y
注水
N
水满?
检测K2
Y
置正反转总循环次数
洗涤
正转
延时,显示
反转
延时,显示
N
次数减1后为0?
Y
Y
N
Y
N
正转
置正转次数
水空?
放水
检测K3
甩干
次数减1后为0?
图2
正/反转子程序框图
开始
置循环总数
查表1
正转显示
查表次数减1后为0?
N
Y
查表3
倒计时显示
循环次数减1
查表2
反转显示
查表次数减1后为0?
N
Y
查表3
倒计时显示
循环次数减1为0?
N
结束
Y
结束
图3
LED自检程序框图
开始
置循环次数
查表
依次选位后并显示段
指针加一
循环次数减一
减为0?
N
Y
图4
键盘自检程序框图
开始
是否有键按下?
N
蜂鸣器响子程序
Y
图5
蜂鸣器子程序开始
关闭蜂鸣器
延时delayN
打开蜂鸣器
N
减一后为0?
Y
结束
子程序框图
图6
Y
蜂鸣器自检程序框图(两个声音)
图7
四、程序清单
(一)模拟全自动洗衣机程序
MOVP0,#0H;关显示
START1:
LCALLSEL8;打开245
MOVP1,#0FFH;P1口输入
MOVA,P1;采集key1的状态
LCALLSEL7;关闭245
CJNEA,#0FEH,START1;判key1是否按下
CLRP2.3;蜂鸣
LCALLDELAY;延时
SETBP2.3
START2:
LCALLSEL8;打开245
MOVP1,#0FFH;P1口输入
MOVA,P1;采集key1的状态
LCALLSEL7;关闭245
CJNEA,#0FDH,START2;判key2是否按下
MOVP0,#0FFH;p0口输入
MOVP0,#9EH;字型3送p0口
ACALLQWE4;选位
ACALLDELAY;延时
MOVP0,#7EH;字型0送p0口
ACALLQWE5;延时
ACALLDELAY;选位
XIDI:
MOVR0,#0H;赋初值
MOVR1,#06H;置正(反)传次数
MOVR2,#0H;赋初值
MOVR3,#014H;置正反转总循环次数
MOVP0,#0FFH;p0口输入
LOOP:
MOVA,R0;正传
MOVDPTR,#TAB1
MOVCA,@A+DPTR
MOVP0,A
ACALLQWE2
ACALLDELAY
INCR0
DJNZR1,LOOP
MOVR0,#0H
MOVR1,#06H
ACALLSTOP1
LOOP1:
MOVA,R0;反转
MOVDPTR,#TAB2
MOVCA,@A+DPTR
MOVP0,A
ACALLQWE3
ACALLDELAY
INCR0
DJNZR1,LOOP1
MOVR0,#0H
MOVR1,#06H
ACALLSTOP2
STOP1:
MOVA,R2;倒计时显示
MOVDPTR,#TAB3
MOVCA,@A+DPTR
MOVP0,A
ACALLQWE4
ACALLDELAY
INCR2
DJNZR3,LOOP1
STOP2:
MOVA,R2;倒计时显示
MOVDPTR,#TAB3
MOVCA,@A+DPTR
MOVP0,A
ACALLQWE5
ACALLDELAY
INCR2
DJNZR3,LOOP
CLRP2.3
ACALLDELAY
SETBP2.3
START3:
LCALLSEL8;打开245
MOVP1,#0FFH;P1口输入
MOVA,P1;采集key3的状态
LCALLSEL7;关闭245
CJNEA,#0FCH,START3;判key3是否按下
CLRP2.3;蜂鸣
LCALLDELAY;延时
SETBP2.3
SHUAI:
MOVR0,#0H;甩干
MOVR1,#06H
MOVR4,#0AH;置循环次数
MOVP0,#0FFH
LOOP2:
MOVA,R0
MOVDPTR,#TAB1
MOVCA,@A+DPTR
MOVP0,A
ACALLQWE2
ACALLDELAY
INCR0
DJNZR1,LOOP2
MOVR0,#0H
MOVR1,#06H
DJNZR4,LOOP2
SJMPSTART1
TAB1:
DB02H,04H,08H,10H,20H,40H;表1
TAB2:
DB40H,20H,10H,08H,04H,02H;表2
TAB3:
DB0B6H,0DEH,0B6H,0FEH,0B6H,0EH,0B6H,0FAH,0B6H,0DAH,0B6H,0CCH,0B6H,9EH,
0B6H,0B6H,0B6H,0CH,0B6H,7EH;表3
DELAY:
MOVR5,#05H;延时
LOOP5:
MOVR6,#0FAH
LOOP6:
MOVR7,#0FAH
LOOP7:
DJNZR7,LOOP7
DJNZR6,LOOP6
DJNZR5,LOOP5
RET
QWE1:
CLRP2.5;选第一位
CLRP2.6
CLRP2.7
RET
QWE2:
CLRP2.5;选第二位
CLRP2.6
SETBP2.7
RET
QWE3:
CLRP2.5;选第三位
SETBP2.6
CLRP2.7
RET
QWE4:
CLRP2.5;选第四位
SETBP2.6
SETBP2.7
RET
QWE5:
SETBP2.5;选第五位
CLRP2.6
CLRP2.7
RET
SEL7:
CLRP2.7;关闭三态门
SETBP2.6
SETBP2.5
RET
SEL8:
SETBP2.7;打开三态门
SETBP2.6
SETBP2.5
RET
(2)键盘自检程序
MAIN:
LCALLSAMPLE;检测有无按键按下
CPLA
JZMAIN
LCALLBEEP;如果检测到按键则调用蜂鸣器
SJMPMAIN
SAMPLE:
MOVP0,#0;键采样
LCALLSEL8
MOVP1,#0FFH
MOVA,P1
LCALLSEL7
RET
SEL7:
CLRP2.7
SETBP2.6
SETBP2.5
RET
SEL8:
SETBP2.7
SETBP2.6
SETBP2.5
RET
BEEP:
CLRP2.3;蜂鸣器子程序
ACALLDELAY1
SETBP2.3
ACALLDELAY1
RET
DELAY1:
MOVR3,#5H;延时子程序
LOOP1:
MOVR4,#3CH
LOOP2:
DJNZR4,LOOP2
DJNZR3,LOOP1
RET
(三)蜂鸣器自检的具体程序:
START:
SETBP2.3 ;蜂鸣器的主程序
ACALLDELAY1
CLR P2.3
ACALLDELAY1
SETBP2.3
ACALLDELAY2
CLR P2.3
ACALLDELAY1
SJMP START
DELAY1:
MOVR6,#20H ;延时子程序1
LOOP1:
MOVR7,#20H
LOOP2:
NOP
DJNZR7,LOOP2
DJNZR6,LOOP1
RET
DELAY2:
MOVR6,#015H ;延时子程序2
LOOP3:
MOVR7,#015H
LOOP4:
NOP
DJNZR7,LOOP4
DJNZR6,LOOP3
RET
(4)LED自检程序
ST:
SETBP2.3;关蜂鸣器
MOVP0,#0FFH;p0口输入
MOVDPTR,#TAB;表头地址放寄存器
MOVA,#0H;赋初值
MOVR4,#08H;置循环次数
START:
MOVCA,@A+DPTR;查表,依次选位并显示相同字段
MOVP0,A
ACALLQWE1
ACALLDELAY
MOVP0,A
ACALLQWE2
ACALLDELAY
MOVP0,A
ACALLQWE2
ACALLDELAY
MOVP0,A
ACALLQWE3
ACALLDELAY
MOVP0,A
ACALLQWE4
ACALLDELAY
MOVP0,A
ACALLQWE5
ACALLDELAY
INCDPTR;指针加1
MOVA,#0H
DJNZR4,START;循环次数减1
SJMPST
TAB:
DB01H,02H,04H,08H
DB10H,20H,40H,80H
DELAY:
MOVR5,#02H;延时
LOOP5:
MOVR6,#0FFH
LOOP6:
MOVR7,#0FFH
LOOP7:
DJNZR7,LOOP7
DJNZR6,LOOP6
DJNZR5,LOOP5
RET
QWE1:
CLRP2.5;选第一位
CLRP2.6
CLRP2.7
RET
QWE2:
CLRP2.5;选第二位
CLRP2.6
SETBP2.7
RET
QWE3:
CLRP2.5;选第三位
SETBP2.6
CLRP2.7
RET
QWE4:
CLRP2.5;选第四位
SETBP2.6
SETBP2.7
RET
QWE5:
SETBP2.5;选第五位
CLRP2.6
CLRP2.7
RET
5、设计体会
短短两周的单片机课程训练虽然已经结束了,但它带给我了很多的启示和体会,同时也遇到了许多问题,在本次事件中我主要负责编写主程序及其框图,以及连接了各个子程序。
在这过程中我主要遇到了以下几个问题:
一、如何使程序简单而调用最少的子程序;
二、如何在连接时避免各个标号,因为其延时了程序的重复出现;
三、通过这次试训,我感受到了团队合作的重要意义,而且明白了只有通过真正的实践活动才能把课本知识彻底地领悟。
作为组长,我也明白了如何根据每个队员的能力和兴趣合理分工才能每个人都忙起来从而共同完成任务。
李二冬
短短两个星期的单片机工程实训让我发现想要真正的去掌握一门技术,不去付出一些艰辛和努力是不可能有收获的。
首先单片机是一门应用性和实践性很强的学科,要多动手,多做实验。
有一些问题自己想的是一个方面,而实际编译起来却有着不少的困难。
例如最后的任务模拟全自动洗衣机,在刚拿到题目的时候自己有很多的想法,但是当按照自己的想法编译的时候却有很多的问题,只能恨自己能力不够,编不出来。
在单片机课程中,我们只是粗略的了解了一些单片机的硬件基础,通过实践我加深了对单片机的认识,我掌握了寄存器的寻址方式和查表,这对我编大程序的很有帮助,我是真正从实践中学会了单片机这门课程。
印象最深刻的是我们的第一个程序并不理想,原因是我并没有了解延时程序和中断处理,没有达到两种声音的效果,后来随着实践的进行,我们了解到要通过计算来编延时程序,同时还要注意指令的周期。
通过后来我去图书馆查阅资料,我学会了很多课堂上并没有认识到的知识。
最后,我发现在这两周的学习过程中,我们更懂得合作的重要意义。
最后的大程序并没有实现进水和出水的显示,只是用蜂鸣声进行模拟,我真的希望能多给些时间,让我们循序渐进,最后收获更多的成果。
董振
在实训过程中,我们组出现一些问题,并因此产生一些感想:
一、曾因为实现蜂鸣器程序出现了不同意见,也曾因为分工不同争执,但是经过坦诚的交流后,问题总是能够得到解决.在对待同一问题上有不同的意见时,应当耐心地倾听对方的思路,一味地坚持自己的“高见”,而不换位思考,只会浪费整个团队的时间,因此本次实训作为我们大学生活里仅有的团队合作活动之一,极大地提高了我们与人合作的能力.
二、在这次实训中我深刻意识到在编程之前首先要有对自己所编程序负责的态度,确定一个完整的思路,模拟洗衣机应尽可能地考虑实际洗衣服过程中的情况.另外应当不断借助参考资料和浏览网页拓宽思路.
三、在这次实训中,许多同学在编程过程中出现了许多低级错误,这是由于平时没有搞懂基本概念导致的.希望在以后的课程中,老师多加一些基础程序的课堂练习,或者课后作业,让同学们把功夫花在平时,不至于在实际操作中出现不必要的耽误.
郑晓军
六、参考资料
1、《单片机系统综合设计与实践》教材主编:
裴岩刘利民内蒙古大学出版社。
2、《单片机与应用技术》教材主编:
吴黎明科学出版社。
3、《单片机实践应用与技术》教材主编:
马长林、陈怡、程利民清华大学出版社。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 工程 实践
![提示](https://static.bdocx.com/images/bang_tan.gif)