1、单片机课程设计北京联合大学实 训 报 告课程(项目)名称: 计算机原理及应用课程设计 学 院: 自动化 专 业: 自动化 班 级: 0910030206 学 号: 200910032638 姓 名: 徐琪 成 绩: 2012年07月05日一、任务与目的:1.任务:根据课堂教学内容设计一个电子钟;2.教学目的:(1)了解与掌握利用单片机开发产品的基本流程和方法,熟练的掌握开发工具的使用。(2)通过实现一个完整的工程项目,加深学生对单片机知识的理解和运用能力,提高学生软硬件设计,编程,系统调试的综合实践能力。(3)提高学生对设计方案调研,论证,修改及撰写说明文档的能力。(4)实现验证性实验到设计性
2、实验的过渡。二、实验原理(条件)实验环境及条件:1.计算机及串口下载线;2软件环境:万利仿真软件,kill C或proteus3硬件电路: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完成进入设置;进行数字十位和个位设置;存储,启动等动
3、作; 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, 编写定
4、时器初始化程序:3, 编写中断处理程序,在中断中实现,计数,十进制调整,:4, 编写拆字,查表程序:5, 将指定内容送显:6, 利用串行通讯,在程序需要的地方设置通讯程序将关键寄存器内容传至ISP窗口,监测执行结果,修改以上程序直至正常工作。(注:本试验可以采用两种方法来做:1软件计数法,2定时中断法)四、硬件图:1.实验硬件:电工电子实验板;2.实验原理图:图一 PLC图 五程序流程图:主程序框图: 中断程序框图: 串行发送程序:设计方案:1、秒计数器为40H,每到1秒40H单元内容加1.2、显示区设置为30H至35H(存放LED显示字型码)3、2EH单元的第0位、第1位、第2位为标志位,其
5、位地址为 75H、76H、77H位地址 77H 76H 75H 74H 73H 72H 71H 70H2EH 单元 当75H=1,有键按下;当75H=0,无键按下 当76H=1,1秒到 ;当76H=0, 1秒未到当77H=1,蜂鸣开始;当77H=0,蜂鸣结束4、p1口作为数据输出口,p2口为共阴数码管位选信号(1)P 1口经7407(同相OC驱动器,要接上拉电阻)控制数码管各个字段的亮灭,“1”时亮,为“0”时灭。07的字形码为: 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;80FH的字形码为:7FH,6FH,77H,7CH,39H,5EH,79H,71H ;(2)p2口
6、线经7406(反相驱动器)后接共阴数码管位选段,故P2.0P2.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,不鸣响。六结语:体会与收获通过本次试验,我掌握了利用单片机开发产品的基本流程和方法,并且熟练的掌握开发工具的使用。我小组通过实现一个完整的工程项目,加深了对单片机知识的理解和运用能力,也提高了我们的综合实践能力。在实验过程中,通过编写试验程序,提高了我对设计方案调研,论证
7、,修改及撰写说明文档的能力。这次实验也为我今后的学习打下了基础,并且提高了我们的团结协作能力。附录:一程序清单:(加注释) ORG 0000H LJMP MAIN ORG 000BH LJMP AAT ORG 0023H LJMP BBUMAIN: MOV 2EH,#00H ;标志寄存器清零 MOV 40H,#00H ;计数器清零 MOV 41H,#00H MOV 28H,#00H MOV 30H,#3FH ;十位存入0 MOV 31H,#3FH ;个位存入0 MOV 32H,#3FH ;十位存入0 MOV 33H,#3FH ;个位存入0 MOV R0,#200 ; 显示200次(5ms*20
8、0=1s) MOV R3,#2 MOV TH0,#0ECH ;定时器0计时5毫秒 MOV TL0,#78H MOV TH1,#0FDH ;波特率9600 MOV TL1,#0FDH MOV TMOD,#00100001B ;T1方式2计时,T0方式1定时 MOV IE,#10000010B ;开定时器0和串口中断 SETB TR0 SETB TR1 MOV SCON,#01000000B ;串口方式1工作 MOV P2,#01H ;显示口初始化 MOV R7,#200 ;定时蜂鸣1秒,200*5ms=1sAA: JNB 75H,AA1 ;若无键按下,调拆字显示程序 JNB 76H,AA1 ;有
9、键按下,且0.5s未到,调拆字显示程序 JB 77H,AA1 ;2s到且蜂鸣开始,调拆字显示程序 MOV A,40H ADD A,#1 DA A ;对A进行十进制调整 MOV 40H,A CLR 76H ;76H请零,为下一个0.5秒做准备 CJNE A,#60H,AA1 ;判断A是否到60 CLR P0.3 ;启动蜂鸣 SETB 77H ;77H置1,蜂鸣开始 MOV 40H,#00H MOV A,#00H MOV A,41H ADD A,#1 DA A ;对A进行十进制调整 MOV 41H,A CJNE A,#60H,AA1 ;判断A是否到60 SETB 28H AA1: LCALL CH
10、AIZI AA2: MOV SBUF,2EH ;(2EH)标志位,向主机发送串口 WAIT1: JNB T1,WAIT1 MOV SBUF,40H ;(40H)秒计数值,串口向主机发送 WAIT2: JNB T1,WAIT2 MOV SBUF,30H ;(30H)十位显示代码, WAIT3: JNB T1,WAIT3 MOV SBUF,31H ;(31H)个位显示代码, WAIT4: JNB T1,WAIT4 MOV SBUF,41H ;(40H)秒计数值,串口向主机发送 WAIT5: JNB T1,WAIT5 MOV SBUF,32H ;(30H)十位显示代码, WAIT6: JNB T1,
11、WAIT6 MOV SBUF,33H ;(31H)个位显示代码, WAIT7: JNB T1,WAIT7 SJMP AA ;返回 CHAIZI: MOV A,40H MOV R1,#50H MOV R1,#00 XCHD A,R1 ;低半字节互换 MOV B,A MOV A,R1 LCALL CHABIAO MOV 30H,A ;秒的低位送显示 MOV A,B SWAP A ;半字节交换 LCALL CHABIAO MOV 31H,A ;秒的高位送显示MOV A,#00H MOV A,41H MOV R1,#50H MOV R1,#00 XCHD A,R1 ;低半字节互换 MOV B,A MO
12、V A,R1 LCALL CHABIAO MOV 32H,A ;秒的低位送显示 MOV A,B SWAP A ;半字节交换 LCALL CHABIAO MOV 33H,A ;秒的高位送显示 RET CHABIAO: MOV DPTR,#TABL MOVC A,A+DPTR RETTABL: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHAAT: JB 70H,AAT4 JB 71H,AAT1 JB 77H,AAT3 ;T0中断程序 JB 28H,AAT4 MOV TH0,#0ECH ;重装初值,定时下一个5ms MOV TL0,#78H JNB 75H,A
13、AT1 ;无键按下显示00 DJNZ R0,AAT1 ;定时未到显示原有内容,1s定时未到,转AAT1 MOV R0,#200 ;1s定时到,重置初值 SETB 76H ;秒标志置1 SJMP AAT1AAT3: MOV TH0, #0ECH ;定时器0计时毫秒 MOV TL0,#78H DJNZ R7,AAT1 ;1s未到转AAT1 MOV R7,#200 ;1s到置初值 DJNZ R3,AAT3 MOV R7,#200 MOV R3,#2 MOV 30H,#3FH ;回到初态 MOV 31H,#3FH MOV 40H,#2 SETB P0.3 ;关蜂鸣 CLR 77H ;77H清零,蜂鸣结
14、束,为下一个蜂鸣做准备 CLR 70H RETI AAT4: MOV TH0, #0ECH ;定时器0计时毫秒 MOV TL0,#78H MOV R7,#200 ;1s到置初值 MOV R0,#50 MOV R3,#2 MOV 30H,#3FH ;回到初态 MOV 31H,#3FH MOV 40H,#00H MOV 32H,#3FH ;回到初态 MOV 33H,#3FH MOV 41H,#00H SETB P0.3 ;关蜂鸣 CLR 28H CLR 75H ;75H清零,为下一个按键做准备 CLR 77H ;77H清零,蜂鸣结束,为下一个蜂鸣做准备 CLR 70H CLR 71HAAT1: J
15、NB P2.0,AAT11 ;判断送显 MOV P1,32H MOV P2,#00000010B JB 75H,RET2 ;若20H=1,有键按下则返回 MOV A,P0 ;读取键值 ANL A,#00000010B JNZ RET2 SETB 75H SJMP RET2AAT11: JNB P2.1,AAT12 ;判断送显 MOV P1,31H MOV P2,#00000100B JB 75H,RET2 ;若75H=1,有键按下则返回 MOV A,P0 ;读取键值 ANL A,#00000001B JNZ RET2 SETB 75H SJMP RET2AAT12: JNB P2.2,AAT13 ;判断送显 MOV P1,30H MOV P2,#00001000B SJMP RET2AAT13: MOV P1,33H MOV P2,#00000001B JB 75H,RET2 ;若75H=1,有键按下则返回 MOV A,P0 ;读取键值 ANL A,#00000010B JNZ RET2 SETB 75H SJMP RET2 RET2: RETIBBU: CLR TI ;清发送标志 RETI END 二参考资料单片机初级教程第二版 张迎新 等编著