单片机项目教学案例汇编讲课教案Word文件下载.docx
《单片机项目教学案例汇编讲课教案Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机项目教学案例汇编讲课教案Word文件下载.docx(21页珍藏版)》请在冰点文库上搜索。
movr5,#49
djnzr5,$
djnzr6,loop1
djnzr7,loop2
ret
tab:
db0feh,0ffh,0fdh,0ffh,0fbh,0ffh,0f7h,0ffh
db0efh,0ffh,0dfh,0ffh,0bfh,0ffh,07fh,0ffh
End
案例三交通灯控制
利用单片机设计制作具有下列功能的交通灯:
1、自动计时,由两位数码管静态显示;
2、发光二极管分四组分别代表东、南、西、北四个方向交通灯,东、西方向红灯亮时,南北方向绿灯亮;
反之南北方向红灯亮时,东西方向绿灯亮;
小灯每30S交替一次。
ORG0000H
LJMPSTART
ORG0100H
BCD1EQU50H
BCD2EQU51H
START:
MOVSP,#60H
STATE0:
MOVA,#0F6H;
初始状态全红灯
MOVP1,A
MOVR2,#1;
延时1秒
S0:
LCALLBINBCD
LCALLDISPLAY
LCALLDELAY
DJNZR2,S0
STATE1:
MOVA,#0F5H;
南北绿灯,东西红灯
MOVR2,#20;
延时20秒
S1:
LCALLBINBCD
DJNZR2,S1
STATE2:
MOVA,#0F3H;
南北黄灯,东西红灯
MOVR2,#5;
延时5秒
S2:
DJNZR2,S2
STATE3:
MOVA,#0EEH;
南北红灯,东西绿灯
S3:
DJNZR2,S3
STATE4:
MOVA,#0DEH;
南北红灯,东西黄灯
S4:
DJNZR2,S4
LJMPSTATE1;
转至状态1
DELAY:
MOVR7,#20;
1秒延时子程序
D1:
MOVR6,#200
D2:
MOVR5,#123
NOP
DJNZR5,$
DJNZR6,D2
DJNZR7,D1
RET
BINBCD:
MOVA,R2;
二进制转换非压缩BCD码子程序
MOVB,#10
DIVAB
MOVBCD2,A;
存十位BCD码
MOVBCD1,B;
存个位BCD码
RET
DISPLAY:
MOVA,BCD1;
显示子程序
MOVDPTR,#TAB
MOVCA,@A+DPTR;
查个位字形码
MOVP2,A
MOVA,BCD2
查十位字形码
MOVP0,A
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H
DB92H,82H,0F8H,80H,90H
案例四简易电子密码锁设计
1、初始状态下显示屏显示“HELLO”,并保持显示5秒后清屏;
2、如果密码输入错误则显示“ERROR”,并保持显示5秒后清屏;
3、如果密码输入正确则显示“RIGHT”,并保持显示5秒后清屏。
1、系统方案设计理论图
(1)键盘电路图
(2)数码管显示电路
*******************************************************
;
以下8个字节存放8位数码管的段码
LED_BIT_1EQU30H
LED_BIT_2EQU31H
LED_BIT_3EQU32H
LED_BIT_4EQU33H
LED_BIT_5EQU34H
LED_BIT_6EQU35H
LED_BIT_7EQU36H
LED_BIT_8EQU37H
以下6个字节存放初始密码
WORD_1EQU38H
WORD_2EQU39H
WORD_3EQU3AH
WORD_4EQU3BH
WORD_5EQU3CH
WORD_6EQU3DH
以下6个字节存放用户输入的6位密码
KEY_1EQU3EH
KEY_2EQU3FH
KEY_3EQU40H
KEY_4EQU41H
KEY_5EQU42H
KEY_6EQU43H
******************************************************
CNT_AEQU44H
CNT_BEQU45H
KEY_CNTEQU46H;
已输出的密码位数
LINEEQU47H;
按键行号
ROWEQU48H;
按键列号
VALEQU49H;
键值
以下为初始化程序,包括数据存储空间初始化,设置初始密码
ORG00H
SJMPSTART
ORG0050H
MOVSP,#60H
MOVCNT_A,#00H;
程序初始化
MOVCNT_B,#00H
MOVKEY_CNT,#00H
MOVLINE,#00H
MOVROW,#00H
MOVVAL,#00H
SETBP1.0
MOVLED_BIT_1,#00H;
段码存储区清0
MOVLED_BIT_2,#00H
MOVLED_BIT_3,#00H
MOVLED_BIT_4,#00H
MOVLED_BIT_5,#00H
MOVLED_BIT_6,#00H
MOVLED_BIT_7,#79H
MOVLED_BIT_8,#73H
MOVKEY_1,#00H;
输入密码存储区清0
MOVKEY_2,#00H
MOVKEY_3,#00H
MOVKEY_4,#00H
MOVKEY_5,#00H
MOVKEY_6,#00H
MOVWORD_1,#6;
设置初始密码为"
123456"
MOVWORD_2,#5
MOVWORD_3,#4
MOVWORD_4,#3
MOVWORD_5,#2
MOVWORD_6,#1
A0:
LCALLDISP
***********************************************************
以下为键盘扫描程序,计算键值并存入VAL
LSCAN:
MOVP3,#0F0H;
扫描行码
L1:
JNBP3.0,L2
LCALLDLY_S
JNBP3.0,L2
LJMPRSCAN
L2:
JNBP3.1,L3
JNBP3.1,L3
MOVLINE,#01H
L3:
JNBP3.2,L4
JNBP3.2,L4
MOVLINE,#02H
L4:
JNBP3.3,A0
JNBP3.3,A0
MOVLINE,#03H
RSCAN:
MOVP3,#0FH;
扫描列码
C1:
JNBP3.4,C2
LJMPCALCU
C2:
JNBP3.5,C3
MOVROW,#01H
C3:
JNBP3.6,C1
MOVROW,#02H
CALCU:
MOVA,LINE;
计算键值
MOVB,#03H
MULAB
ADDA,ROW
MOVVAL,A
**************************************************
以下为按键处理程序,对不同的按键作出响应
CJNEA,#0AH,J1;
是否为"
CLR"
键
MOVR1,KEY_CNT
CJNER1,#00H,J2
LCALLALARM_1
LJMPSTART
J2:
LCALLSHIFTR
DECKEY_CNT
W00:
LCALLDISP;
等待按键抬起
MOVA,P3
CJNEA,#0FH,W01
LJMPA0
W01:
MOVA,P3
CJNEA,#0F0H,W02
W02:
SJMPW00
J1:
MOVA,VAL
CJNEA,#0BH,J3;
判断是否为"
ENTER"
CJNER1,#06H,J4
MOVA,WORD_1;
比较密码
CJNEA,3EH,J5
MOVA,WORD_2
CJNEA,3FH,J5
MOVA,WORD_3
CJNEA,40H,J5
MOVA,WORD_4
CJNEA,41H,J5
MOVA,WORD_5
CJNEA,42H,J5
MOVA,WORD_6
CJNEA,43H,J5
CLRP1.0
MOVP2,#0ffh
LCALLDLY_L
J5:
LCALLALARM_2
J4:
LCALLALARM_1
J3:
INCKEY_CNT;
按下数字键
MOVA,KEY_CNT
CJNEA,#07H,K1
W10:
CJNEA,#0FH,W11
W11:
CJNEA,#0F0H,W12
W12:
SJMPW10
K1:
LCALLSHIFTL
W20:
CJNEA,#0FH,W21
W21:
CJNEA,#0F0H,W22
W22:
SJMPW20
ALARM_1:
LCALLSEC;
操作错误报警
ALARM_2:
密码错误报警
音频信号产生程序,用于声音报警
SEC:
MOVR2,#100
SEC_LP:
clrP1.7
LCALLT1MSD
NOP
setbP1.7
LCALLT1MSD
DJNZR2,SEC_LP
RET
段码,输入密码左移子程序
SHIFTL:
MOVLED_BIT_6,LED_BIT_5
MOVLED_BIT_5,LED_BIT_4
MOVLED_BIT_4,LED_BIT_3
MOVLED_BIT_3,LED_BIT_2
MOVLED_BIT_2,LED_BIT_1
MOVLED_BIT_1,#40H
MOVKEY_6,KEY_5
MOVKEY_5,KEY_4
MOVKEY_4,KEY_3
MOVKEY_3,KEY_2
MOVKEY_2,KEY_1
MOVKEY_1,VAL
段码,输入密码右移子程序
SHIFTR:
MOVLED_BIT_1,LED_BIT_2
MOVLED_BIT_2,LED_BIT_3
MOVLED_BIT_3,LED_BIT_4
MOVLED_BIT_4,LED_BIT_5
MOVLED_BIT_5,LED_BIT_6
MOVKEY_1,KEY_2
MOVKEY_2,KEY_3
MOVKEY_3,KEY_4
MOVKEY_4,KEY_5
MOVKEY_5,KEY_6
以下为数码显示子程序
DISP:
PUSHACC
PUSHPSW
SETBRS0
MOVR0,#LED_BIT_1
MOVR2,#8
MOVR3,#0FEH
DISP1:
movP2,R3
MOVP0,@R0
LCALLDLY_S
MOVa,R3
RLA
MOVR3,A
INCR0
djnzR2,DISP1
POPPSW
POPACC
**********************************************
T1MSD:
MOVR3,#2
D0:
MOVR4,#250
DJNZR4,$
DJNZR3,D0
DLY_S:
MOVR6,#10
MOVR7,#250
DJNZR7,$
DJNZR6,D1
DLY_L:
MOVR5,#100
MOVR6,#100
D3:
MOVR7,#248
DJNZR6,D3
DJNZR5,D2
FINI:
END
案例五双机通信
利用AT89S52串行口,通过双机通信,实现单片机之间数据块的传送
(1)甲机发送,乙机接收;
(2)甲机发送地址信息,然后发送一批数据;
(3)乙机把接收到的地址信息作为存放数据的首地址,然后将数据存入相应单元;
(4)校验方式:
累加校验和。
1、硬件电路结构示意图
发送方:
AJMPMAIN
ORG0100H
MOVSP,#60H
MOVSCON,#40H;
串行口以方式1工作
MOVTMOD,#20H;
T1以方式2工作
MOVTH1,#0FDH;
波特率9600
MOVTL1,#0FDH
SETBTR1
MOVP1,#0FFH
MOV30H,#0FFH;
设拨码开关初始值
K0:
MOVA,P1;
读入拨码开关
CJNEA,30H,K1;
判断与前次是不是相同,不同则跳至K1
SJMPK0
K1:
MOV30H,A;
存入拨动开关新值
MOVSBUF,A;
输入SBUF发送
WAIT:
JBCTI,K0;
是否发送完毕?
SJMPWAIT
接收方:
MOVSP,#60
MOVSCON,#50H
MOVTMOD,#20H
MOVTH1,#0FDH
JBRI,KK;
是否接收到数据,有则跳至KK
SJMPK0
KK:
MOVA,SBUF;
将接收到的数据保存到累加器
MOVP1,A;
输出至P1
CLRRI;
清除RI
SJMPK0
案例六数字电压表设计