单片机课程设计.docx
《单片机课程设计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计.docx(14页珍藏版)》请在冰豆网上搜索。
单片机课程设计
北京联合大学
实训报告
课程(项目)名称:
计算机原理及应用课程设计
学院:
自动化专业:
自动化
班级:
0910030206学号:
200910032638
姓名:
徐琪成绩:
2012年 07 月 05 日
一、任务与目的:
1.任务:
根据课堂教学内容设计一个电子钟;
2.教学目的:
(1)了解与掌握利用单片机开发产品的基本流程和方法,熟练的掌握开发工具的使用。
(2)通过实现一个完整的工程项目,加深学生对单片机知识的理解和运用能力,提高学生软硬件设计,编程,系统调试的综合实践能力。
(3)提高学生对设计方案调研,论证,修改及撰写说明文档的能力。
(4)实现验证性实验到设计性实验的过渡。
二、实验原理(条件)
实验环境及条件:
1.计算机及串口下载线;
2.软件环境:
万利仿真软件,killC或proteus
3.硬件电路:
51单片机教学实习最小系统板
4.ISP下载软件。
三.实验内容及步骤
(一)实验内容
1、基础部分:
1).用51的p1口作为数据输出口,p2口为共阴数码管位选信号,利用定时器0实现秒计时和显示。
2).上电复位后,显示00,
3).按键按下S2键后开始计数。
采用加法计数形式。
计到60停止。
蜂鸣器鸣响。
4).鸣响2秒后停止,恢复显示00,
5).当再次按下S2键后重复1-4过程。
2、提高部分:
1).利用S2,S4,S6完成进入设置;进行数字十位和个位设置;存储,启动等动作;
2).工作过程如下:
(1)第一次按下S2,进入十位数设置;此时,每按下S4一次,十位数码管显示加1,从0至9滚动显示;
(2)第二次按下S2,十位显示固定在当前值;进入个位数设置;此时,每按下S4一次,个位数码管显示加1,从0至9滚动显示;
(3)第三次按下S2,十位和个位显示数值固定;
(4)设置完成后按下S6,数码管显示00;系统从0计时,当计到设置值时,蜂鸣器响一秒钟;
(5)蜂鸣器停止后,系统显示设置值,再次按下S6可以重新开始计时;或不按下S6,按下S4则重复
(1)至(4)过程。
(二)实验步骤
1,显示区设置为30H至35H,秒计数器为40h,分计数器设为41h,。
2,编写定时器初始化程序:
3,编写中断处理程序,在中断中实现,计数,十进制调整,:
4,编写拆字,查表程序:
5,将指定内容送显:
6,利用串行通讯,在程序需要的地方设置通讯程序将关键寄存器内容传至ISP窗口,监测执行结果,修改以上程序直至正常工作。
(注:
本试验可以采用两种方法来做:
1软件计数法,2定时中断法)
四、硬件图:
1.实验硬件:
电工电子实验板;
2.实验原理图:
图一PLC图
五.程序流程图:
主程序框图:
中断程序框图:
串行发送程序:
设计方案:
1、秒计数器为40H,每到1秒40H单元内容加1.
2、显示区设置为30H至35H(存放LED显示字型码)
3、2EH单元的第0位、第1位、第2位为标志位,其位地址为75H、76H、77H
位地址77H76H75H74H73H72H71H70H
2EH单元
当75H=1,有键按下;当75H=0,无键按下
当76H=1,1秒到;当76H=0,1秒未到
当77H=1,蜂鸣开始;当77H=0,蜂鸣结束
4、p1口作为数据输出口,p2口为共阴数码管位选信号
(1)P1口经7407(同相OC驱动器,要接上拉电阻)控制数码管各个字段的亮灭,“1”时亮,为“0”时灭。
0~7的字形码为:
3FH,06H,5BH,4FH,66H,6DH,7DH,07H;
8~0FH的字形码为:
7FH,6FH,77H,7CH,39H,5EH,79H,71H;
(2)p2口线经7406(反相驱动器)后接共阴数码管位选段,故P2.0~P2.5为“1”时选中数码管,为“0”时未选中数码管。
,P2.0控制最左边的数码,P2.5控制最右边的数码。
5、P2.0、P2.1、P2.2作为键盘列选线,P0.0、P0.1作为键盘行选线,组成2*3=6个键。
6、P0.3控制蜂鸣器发声
P0.3=0,鸣响;P0.3=1,不鸣响。
六.结语:
体会与收获
通过本次试验,我掌握了利用单片机开发产品的基本流程和方法,并且熟练的掌握开发工具的使用。
我小组通过实现一个完整的工程项目,加深了对单片机知识的理解和运用能力,也提高了我们的综合实践能力。
在实验过程中,通过编写试验程序,提高了我对设计方案调研,论证,修改及撰写说明文档的能力。
这次实验也为我今后的学习打下了基础,并且提高了我们的团结协作能力。
附录:
一.程序清单:
(加注释)
ORG0000H
LJMPMAIN
ORG000BH
LJMPAAT
ORG0023H
LJMPBBU
MAIN:
MOV2EH,#00H;标志寄存器清零
MOV40H,#00H;计数器清零
MOV41H,#00H
MOV28H,#00H
MOV30H,#3FH;十位存入0
MOV31H,#3FH;个位存入0
MOV32H,#3FH;十位存入0
MOV33H,#3FH;个位存入0
MOVR0,#200;显示200次(5ms*200=1s)
MOVR3,#2
MOVTH0,#0ECH;定时器0计时5毫秒
MOVTL0,#78H
MOVTH1,#0FDH;波特率9600
MOVTL1,#0FDH
MOVTMOD,#00100001B;T1方式2计时,T0方式1定时
MOVIE,#10000010B;开定时器0和串口中断
SETBTR0
SETBTR1
MOVSCON,#01000000B;串口方式1工作
MOVP2,#01H;显示口初始化
MOVR7,#200;定时蜂鸣1秒,200*5ms=1s
AA:
JNB75H,AA1;若无键按下,调拆字显示程序
JNB76H,AA1;有键按下,且0.5s未到,调拆字显示程序
JB77H,AA1;2s到且蜂鸣开始,调拆字显示程序
MOVA,40H
ADDA,#1
DAA;对A进行十进制调整
MOV40H,A
CLR76H;76H请零,为下一个0.5秒做准备
CJNEA,#60H,AA1;判断A是否到60
CLRP0.3;启动蜂鸣
SETB77H;77H置1,蜂鸣开始
MOV40H,#00H
MOVA,#00H
MOVA,41H
ADDA,#1
DAA;对A进行十进制调整
MOV41H,A
CJNEA,#60H,AA1;判断A是否到60
SETB28H
AA1:
LCALLCHAIZI
AA2:
MOVSBUF,2EH;(2EH)标志位,向主机发送串口
WAIT1:
JNBT1,WAIT1
MOVSBUF,40H;(40H)秒计数值,串口向主机发送
WAIT2:
JNBT1,WAIT2
MOVSBUF,30H;(30H)十位显示代码,
WAIT3:
JNBT1,WAIT3
MOVSBUF,31H;(31H)个位显示代码,
WAIT4:
JNBT1,WAIT4
MOVSBUF,41H;(40H)秒计数值,串口向主机发送
WAIT5:
JNBT1,WAIT5
MOVSBUF,32H;(30H)十位显示代码,
WAIT6:
JNBT1,WAIT6
MOVSBUF,33H;(31H)个位显示代码,
WAIT7:
JNBT1,WAIT7
SJMPAA;返回
CHAIZI:
MOVA,40H
MOVR1,#50H
MOV@R1,#00
XCHDA,@R1;低半字节互换
MOVB,A
MOVA,@R1
LCALLCHABIAO
MOV30H,A;秒的低位送显示
MOVA,B
SWAPA;半字节交换
LCALLCHABIAO
MOV31H,A;秒的高位送显示
MOVA,#00H
MOVA,41H
MOVR1,#50H
MOV@R1,#00
XCHDA,@R1;低半字节互换
MOVB,A
MOVA,@R1
LCALLCHABIAO
MOV32H,A;秒的低位送显示
MOVA,B
SWAPA;半字节交换
LCALLCHABIAO
MOV33H,A;秒的高位送显示
RET
CHABIAO:
MOVDPTR,#TABL
MOVCA,@A+DPTR
RET
TABL:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
AAT:
JB70H,AAT4
JB71H,AAT1
JB77H,AAT3;T0中断程序
JB28H,AAT4
MOVTH0,#0ECH;重装初值,定时下一个5ms
MOVTL0,#78H
JNB75H,AAT1;无键按下显示00
DJNZR0,AAT1;定时未到显示原有内容,1s定时未到,转AAT1
MOVR0,#200;1s定时到,重置初值
SETB76H;秒标志置1
SJMPAAT1
AAT3:
MOVTH0,#0ECH;定时器0计时毫秒
MOVTL0,#78H
DJNZR7,AAT1;1s未到转AAT1
MOVR7,#200;1s到置初值
DJNZR3,AAT3
MOVR7,#200
MOVR3,#2
MOV30H,#3FH;回到初态
MOV31H,#3FH
MOV40H,#2
SETBP0.3;关蜂鸣
CLR77H;77H清零,蜂鸣结束,为下一个蜂鸣做准备
CLR70H
RETI
AAT4:
MOVTH0,#0ECH;定时器0计时毫秒
MOVTL0,#78H
MOVR7,#200;1s到置初值
MOVR0,#50
MOVR3,#2
MOV30H,#3FH;回到初态
MOV31H,#3FH
MOV40H,#00H
MOV32H,#3FH;回到初态
MOV33H,#3FH
MOV41H,#00H
SETBP0.3;关蜂鸣
CLR28H
CLR75H;75H清零,为下一个按键做准备
CLR77H;77H清零,蜂鸣结束,为下一个蜂鸣做准备
CLR70H
CLR71H
AAT1:
JNBP2.0,AAT11;判断送显
MOVP1,32H
MOVP2,#00000010B
JB75H,RET2;若20H=1,有键按下则返回
MOVA,P0;读取键值
ANLA,#00000010B
JNZRET2
SETB75H
SJMPRET2
AAT11:
JNBP2.1,AAT12;判断送显
MOVP1,31H
MOVP2,#00000100B
JB75H,RET2;若75H=1,有键按下则返回
MOVA,P0;读取键值
ANLA,#00000001B
JNZRET2
SETB75H
SJMPRET2
AAT12:
JNBP2.2,AAT13;判断送显
MOVP1,30H
MOVP2,#00001000B
SJMPRET2
AAT13:
MOVP1,33H
MOVP2,#00000001B
JB75H,RET2;若75H=1,有键按下则返回
MOVA,P0;读取键值
ANLA,#00000010B
JNZRET2
SETB75H
SJMPRET2
RET2:
RETI
BBU:
CLRTI;清发送标志
RETI
END
二.参考资料
《单片机初级教程》第二版张迎新等编著