《单片机实训指导书(共8页).doc》由会员分享,可在线阅读,更多相关《单片机实训指导书(共8页).doc(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上单片机实训指导书一、实训的性质、目的及任务:1、课程性质:本课程属专业技能实操课。2、课程目的:使学生熟悉单片机实用技术的开发过程,提高汇编语言的编写能力,提高对汇编语言的编辑、汇编、调试运行等技能,通过实际应用和亲身体验,加深对所学知识的理解,增强动手能力3、 课程任务:通过本课程实训使学生熟悉单片机的基本知识,能利用单片机技术制作简单电子技术产品,培养和锻炼学生进行调试、检测和分析的能力。二、适合专业: 电子信息技术/生产过程自动化三、主要仪器设备:单片机仿真器一台、电脑一台、导线等。四、实训项目与内容提要附表:单片机原理与应用课程实训项目名称及时间安排序号实训项
2、目名称 实训项目的内容提要时间 1彩灯的制作通过并行I/O口控制8个发光二极管,输出两种或三种节日灯,并利用外中断,在两种或三种状态之间切换。根据题目,编写汇编程序。编辑、汇编、连接、装载程序,调试运行,直至成功。1.52电子钟的制作用单片机实现由LED数码管显示的秒表,并设置清零键或者暂停键。根据题目,编写汇编程序。编辑、汇编、连接、装载程序,调试运行,校准时间。23动态显示器的制作用单片机实验1616矩阵LED的显示,要求:动态显示完整的英文/中文字符和图形。根据题目,编写汇编程序。编辑、汇编、连接、装载程序,调试运行,直至成功。1.5五、成绩评定:实训结束,由实训指导教师按如下几点对学生
3、进行考核。出勤,占总成绩的20%;认真程度,占总成绩的20%;实训报告,占总成绩的30%;考核,占总成绩的30%。评定等级分为优、良、中、合格、不合格五种。实训参考资料任务一:单片机上电,单灯按1HZ频率循环,一旦按下P3.2所接的按键,发光二极管按双灯循环,松开此键,单灯继续原来的循环。控制程序专心-专注-专业ORG 0000H LJMP MAIN ORG 0003H LJMP INT_0 ORG 001BH LJMP DELAYMAIN: SETB IT0 MOV TMOD,#01H MOV TL0,#00H MOV TH0,#4CH SETB PT0 SETB EA SETB EX0 S
4、ETB ET0 MOV B,#20 SETB TR0 MOV A,#0FEHBEGIN: MOV P1,A CJNE B,#00,$ MOV B,#20 RL A SJMP BEGININT_0: PUSH ACCMOV A,#0FBHLOOP: MOV P1,ACJNE B,#00,$ MOV B,#20 RL A JNB P3.2,LOOP POP ACC RETIDELAY: MOV TL0,#00H MOV TH0,#4CH DJNZ B,LOOP1 LOOP1: RETI END任务二:51单片机秒表程序,以8位LED右边2位显示秒,左边6位显示0,实现秒表计时显示。以44矩阵键盘的
5、KE0、KE1、KE2等3键分别实现启动、停止、清零等功能。方法:用单片机定时器T0中断方式,实现1秒定时;利用单片机定时器1方式3计数,实现60秒计数。用动态显示方式实现秒表计时显示,用键盘扫描方式取得KE0、KE1、KE2的键值,用键盘处理程序实现秒表的启动、停止、清零等功能。按照上述思路可编制源程序如下: ORG 0000H AJMPMAIN ORG000BH AJMPCONT ;主程序 ;初始化程序MAIN:MOVTMOD,#61H;置T0方式1定时,T1方式2计数 MOVTH0,#3CH;T0置初值 MOVTL0,#0B0H MOVTH1,#0C4H;T1置初值 MOVTL1,#0C
6、4H MOVDPTR,#4400H;8155控制口地址送DPTR MOVA,#43H;设置8155工作方式字 MOVXDPTR,A;设置PA、PB口输出,PC口输入 MOV20H,#00H;60秒计数单元置初值 MOV21H,#14H ;50ms计数单元置初值 MOVSP,#3FH;堆栈指针置初值 MOVR2,#08H;LED待显示位数送R2 MOVR0,#30H ;显示缓冲区首址送R0 STAR:MOVR0,#00H;显示缓冲区清零 INCR0 DJNZR2,STAR CLRA;累加器清零 ;键盘查询程序 KEY: ACALLKS;调按键查询子程序判是否有键按下 JNZK1;有键按下转移 A
7、CALLDISP;无键按下,调显示子程序延时 AJMPKEY;继续查询按键 ;键盘扫描程序 K1: ACALLDISP;键盘去抖延时 ACALLDISP ACALLKS;再次判别是否有键按下 JNZK2;有键按下转移 AJMPKEY;无按键,误读,继续查询按键 K2: MOVR3,#0FEH;首列扫描字送R3 MOVR4,#00H;首列号送R4 K3: MOVDPTR,#4401H;PA口地址送DPTR,开始列扫描 MOVA,R3 MOVXDPTR,A;列扫描字送PA口 INCDPTR;指向PC口 INCDPTR MOVXA,DPTR;读取行扫描值 JBACC.0,L1;第0行无键按下,转查第
8、1行 MOVA,#00H;第0行有键按下,行首键号送A AJMPLK;转求键号 L1: JBACC.1,L2;第1行无键按下,转查第2行 MOVA,#08H;第1行有键按下,行首键号送A AJMPLK;转求键号 L2: JBACC.2,L3;第2行无键按下,转查第3行 MOVA,#10H;第2行有键按下,行首键号送A AJMPLK;转求键号 L3: JBACC.3,NEXT;第3行无键按下,转查下一列 MOVA,#18H;第3行有键按下,行首键号送A AJMPLK LK: ADDA,R4;形成键码送A PUSHACC;键码入栈保护 K4: ACALLDISP ACALLKS;等待键释放 JNZ
9、K4;未释放,等待 POPACC;键释放,弹栈送A AJMPPR;转键盘处理程序 NEXT:INCR4;修改列号 MOVA,R3 JNBACC.3,KEY;4列扫描完返回按键查询状态 RLA;未扫描完,改为下列扫描字 MOVR3,A;扫描字暂存R3 AJMPK3;转列扫描程序 ;键盘处理程序 PR: CJNEA,#00H,PR01;不是KE0键码,转KE1键 AJMPKE0;转KE0键处理程序 PR01:CJNEA,#01H,PR02;不是KE1键码,转KE2键 AJMPKE1;转KE1键处理程序 PR02:CJNEA,#02H,PR03;不是KE2键码,返回按键查询 AJMPKE2;转KE2
10、键处理程序 PR03:AJMPKEY KE0: SETBTR0;启动定时器T0 SETBTR1;启动定时器T1 SETBET0;允许定时器T0中断 SETBEA;开中断 AJMPKEY;返回键盘查询状态 KE1: CLREA;关中断 CLRET0;禁止定时器T0中断 CLRTR1;关定时器T1 CLRTR0;关定时器T0 AJMPKEY KE2: CLREA;关中断 AJMPMAIN;返回主程序进行初始化 ;按键查询子程序 KS: MOVDPTR,#4401H;置8155PA口地址 MOVA,#00H MOVXDPTR,A;全扫描字#00H送PA口 INCDPTR;指向PC口 INCDPTR
11、MOVXA,DPTR;读入PC口状态 CPLA;变正逻辑,高电平表示有键按下 ANLA,#0FH;屏蔽高4位 RET;返回,A0表示有键按下 ;LED动态显示子程序 DISP:PUSHACC;A入栈保护 SETBRS0;保护第0组工作寄存器,启用第1组工作寄存器 MOVR2,#08H ;LED待显示位数送R2 MOVR1,#00H;设定显示时间 MOVR3,#7FH;选中最右端LED MOVR0,#30H;显示缓冲区首址送R0 MOVA,R0;秒显示个位送A DISP1:MOVDPTR,#TAB;指向字形表首址 MOVCA,A+DPTR;查表取得字形码 MOVDPTR,#4402H;指向815
12、5PB口(段码口) MOVXDPTR,A;字形码送PB口 MOVA,R3;取位选字 MOVDPTR,#4401H;指向8155PA口(位选口) MOVXDPTR,A;位码送PA口 DJNZR1,$;延时0.5ms DJNZR1,$;延时0.5ms RRA;位选字移位 MOVR3,A;移位后的位选字送R3 INCR0;指向下一位缓冲区地址 MOVA,R0;缓冲区数据送A DJNZR2,DISP1;未扫描完,继续循环 CLRRS0;恢复第0组工作寄存器 POPACC;A弹栈,恢复现场 RET TAB:DB3FH,06H,5BH,4FH,66H;共阴极LED字形表 DB6DH,7DH,07H,7FH
13、,6FH ;定时器中断服务程序 CONT:PUSH ACC;保护现场 MOV TH0,#3CH;定时器T1重置初值 MOV TL0,#0B0H MOV A,20H;秒计数器送A AJMP CONT1REN:AJMP REN1 CONT1:DJNZ21H,REN;1秒定时未到,中断返回 MOV21H,#14H;重置50ms计数初值 CLRP3.5;软件产生定时器T1计数脉冲 NOP NOP SETBP3.5 INCA;1秒计数值加1 DAA;换算为10进制计数 JBCTF1,CONT2;60秒到,转清零 CONT3:MOV20H,A;计数值送60秒计数单元20H ANLA,#0FH;屏蔽高4位
14、MOV30H,A;秒表个位待显示数据送显示缓冲区 MOVA,20H SWAPA;60秒计数单元高、低4位数据互换 ANLA,#0FH;屏蔽高4位 MOV31H,A;秒表十位待显示数据送显示缓冲区 AJMPREN1 CONT2:MOVA,#00H AJMPCONT3 REN1:POPACC;恢复现场 RET;中断返回 END任务三:由点阵显示汉字并轮回滚动,显示程序字库中的汉字 杭州西湖,浙江天煌!库中的汉字代码,显示不同的汉字。接线:最小系统的P0口接JD15,P3口接JD14,P1.0P1.3分别接AD ORG 0000H START: MOV A,#0FFH ;开机初始化,清除画面 MOV
15、 P0,A ;清除P0口 ANL P3,#00 ;清除P2口 MOV R2,#200 D1: MOV R3,#248 ;延时 DJNZ R3,$ DJNZ R2,D1 MOV 20H,#00H ;取码指针的初值L1: MOV R1,#100 ;每个字的停留时间L2: MOV R6,#16 ;每个字16个码 MOV R4,#00H ;扫描指针清零 MOV R0,20H ;取码指针存入R0L3: MOV A,R4 ;扫描指针存入A MOV P1,A ;开三极管扫描输出 INC R4 ;扫描下一个 MOV A,R0 MOV DPTR,#TABLE ;取数据代码上半部分 MOVC A,A+DPTR M
16、OV P0,A ;查表送P0口 INC R0 MOV A,R0 MOV DPTR,#TABLE ;取数据代码下半部分 MOVC A,A+DPTR MOV P3,A ;查表送P2口 INC R0 MOV R3,#02 D2: MOV R5,#248 DJNZ R5,$ DJNZ R3,D2 MOV A,#00H MOV P0,A ANL P3,#00H DJNZ R6,L3 ;16个码是否完成? DJNZ R1,L2 ;每个字的停留时间是否到了? MOV 20H,R0 CJNE R0,#0FFH,L1 ;8个字的256个码检测是否送完 ? JMP START TABLE: DB 08H,20H,
17、08H,0C0H,0BH,00H,0FFH,0FFH ;杭 DB 09H,01H,08H,82H,10H,04H,13H,0F8H DB 92H,00H,72H,00H,12H,00H,17H,0FCH DB 32H,02H,10H,02H,00H,0EH,00H,00H DB 01H,00H,0EH,02H,00H,0CH,0FFH,0F0H ;州 DB 00H,00H,08H,00H,06H,00H,00H,00H DB 7FH,0FCH,00H,00H,08H,00H,06H,00H DB 00H,00H,0FFH,0FFH,00H,00H,00H,00H DB 20H,00H,23H,
18、0FFH,22H,02H,22H,0AH ;西 DB 22H,12H,3FH,0E2H,22H,02H,22H,02H DB 22H,02H,3FH,0E2H,22H,12H,22H,12H DB 22H,02H,67H,0FFH,22H,00H,00H,00H DB 08H,20H,84H,3FH,46H,40H,68H,80H ;湖 DB 09H,0FEH,09H,04H,0FFH,04H,09H,04H DB 0BH,0FDH,09H,02H,7FH,0FCH,44H,42H DB 44H,41H,0FFH,0FEH,40H,00H,00H,00H DB 08H,20H,44H,20H,
19、26H,7FH,30H,80H ;浙 DB 09H,42H,08H,41H,0FFH,0FEH,08H,82H DB 09H,04H,3FH,0F8H,22H,00H,22H,00H DB 43H,0FFH,46H,00H,02H,00H,00H,00H DB 08H,20H,84H,20H,46H,7FH,60H,80H ;江 DB 01H,04H,20H,04H,20H,04H,20H,04H DB 20H,04H,3FH,0FCH,20H,04H,20H,04H DB 60H,04H,20H,0CH,00H,04H,00H,00H DB 02H,01H,42H,01H,42H,02H,42H,04H ;天 DB 42H,08H,42H,30H,42H,0C0H,7FH,00H DB 42H,0C0H,42H,30H,42H,08H,42H,04H DB 0C2H,02H,46H,03H,02H,02H,00H,00H DB 01H,02H,0EH,04H,00H,08H,0FFH,0F0H ;煌 DB 08H,0AH,10H,86H,3EH,92H,2AH,92H DB 6AH,92H,0AAH,0FEH,2AH,92H,2AH,0B2H DB 7EH,92H,20H,86H,00H,02H,00H,00H END
限制150内