单片机项目教学案例汇编

来源:村官 发布时间:2020-09-22 点击:

  案例一 单片机最小系统设计

 功能要求

 设计一个单片机最小系统;

 通过锁存器实现地址信息和数据信息的隔离。

 硬件电路设计

 1、方案设计结构示意图:

 电路设计原理图:

 参考程序

 ORG 0000H

 JMP MAIN

 ORG 0040H

 MAIN:

  MOV SP,#07H

  MOV DPTR,#0FF45H

  MOV A,#88H

  MOVX @DPTR,A

  SJMP $

  END

 

  案例二 信号灯控制

 功能要求

 设计一个延时程序,使与P1.0相连的发光二极管每隔1秒亮一次;

 采用循环控制,使8个发光二极管呈跑马灯方式闪烁,其中发光二

  极管点亮时长为1秒,熄灭时长为2秒。

 硬件电路设计

 1、电路设计原理图

 参考程序

 org 0000h

  ljmp start

  org 100h

  start:

  mov dptr,#tab

  mov a,#0

  mov r3,#8

 loop4: mov 30h,a

  movc a,@a+dptr

  mov p1,a

  lcall delay

  mov a,30h

  inc a

  mov 30h,a

  movc a,@a+dptr

  mov p1,a

  lcall delay

  lcall delay

  mov a,30h

  inc a

  djnz r3,loop4

  ljmp start

  delay:

  mov r7,#100

  loop2:mov r6,#100

 loop1: mov r5,#49

  djnz r5,$

  djnz r6,loop1

  djnz r7,loop2

  ret

  tab: db 0feh,0ffh,0fdh,0ffh,0fbh,0ffh,0f7h,0ffh

  db 0efh,0ffh,0dfh,0ffh,0bfh,0ffh,07fh ,0ffh

  End

 

  案例三 交通灯控制

 功能要求

 利用单片机设计制作具有下列功能的交通灯:

 自动计时,由两位数码管静态显示;

 发光二极管分四组分别代表东、南、西、北四个方向交通灯,东、西方向红灯亮时,南北方向绿灯亮;反之南北方向红灯亮时,东西方向绿灯亮;小灯每30S交替一次。

 硬件电路设计

 参考程序

 ORG 0000H

 LJMP START

 ORG 0100H

 BCD1 EQU 50H

 BCD2 EQU 51H

 START: MOV SP,#60H

 STATE0:MOV A,#0F6H ;初始状态全红灯

 MOV P1,A

 MOV R2,#1 ;延时1秒

 S0: LCALL BINBCD

 LCALL DISPLAY

 LCALL DELAY

 DJNZ R2,S0

 STATE1:MOV A,#0F5H ;南北绿灯,东西红灯

 MOV P1,A

 MOV R2,#20 ;延时20秒

 S1:LCALL BINBCD

 LCALL DISPLAY

 LCALL DELAY

 DJNZ R2,S1

 STATE2:MOV A,#0F3H ;南北黄灯,东西红灯

 MOV P1,A

 MOV R2,#5 ;延时5秒

 S2:LCALL BINBCD

 LCALL DISPLAY

 LCALL DELAY

 DJNZ R2,S2

 STATE3:MOV A,#0EEH ;南北红灯,东西绿灯

 MOV P1,A

 MOV R2,#20 ;延时20秒

 S3:LCALL BINBCD

 LCALL DISPLAY

 LCALL DELAY

 DJNZ R2,S3

 STATE4:MOV A,#0DEH ;南北红灯,东西黄灯

 MOV P1,A

 MOV R2,#5 ;延时5秒

 S4:LCALL BINBCD

 LCALL DISPLAY

 LCALL DELAY

 DJNZ R2,S4

 LJMP STATE1 ;转至状态1

 DELAY:MOV R7,#20 ;1秒延时子程序

 D1:MOV R6,#200

 D2:MOV R5,#123

 NOP

 DJNZ R5,$

 DJNZ R6,D2

 DJNZ R7,D1

 RET

 BINBCD: MOV A,R2 ;二进制转换非压缩BCD码子程序

  MOV B,#10

  DIV AB

  MOV BCD2,A ;存十位BCD码

  MOV BCD1,B ;存个位BCD码

  RET

 DISPLAY: MOV A,BCD1 ;显示子程序

  MOV DPTR,#TAB

  MOVC A,@A+DPTR ;查个位字形码

  MOV P2,A

  MOV A,BCD2

  MOVC A,@A+DPTR ;查十位字形码

  MOV P0,A

  RET

  TAB: DB 0C0H,0F9H,0A4H,0B0H,99H

  DB 92H,82H,0F8H,80H,90H

  END

  案例四 简易电子密码锁设计

 功能要求

 初始状态下显示屏显示“HELLO”,并保持显示5秒后清屏;

 如果密码输入错误则显示“ERROR”,并保持显示5秒后清屏;

 如果密码输入正确则显示“RIGHT”,并保持显示5秒后清屏 。

 硬件电路设计

 系统方案设计理论图

 键盘电路图

 数码管显示电路

 参考程序

 *******************************************************

 ;以下8个字节存放8位数码管的段码

 LED_BIT_1 EQU 30H

 LED_BIT_2 EQU 31H

 LED_BIT_3 EQU 32H

 LED_BIT_4 EQU 33H

 LED_BIT_5 EQU 34H

 LED_BIT_6 EQU 35H

 LED_BIT_7 EQU 36H

 LED_BIT_8 EQU 37H

 ;以下6个字节存放初始密码

 WORD_1 EQU 38H

 WORD_2 EQU 39H

 WORD_3 EQU 3AH

 WORD_4 EQU 3BH

 WORD_5 EQU 3CH

 WORD_6 EQU 3DH

 ;以下6个字节存放用户输入的6位密码

 KEY_1 EQU 3EH

 KEY_2 EQU 3FH

 KEY_3 EQU 40H

 KEY_4 EQU 41H

 KEY_5 EQU 42H

 KEY_6 EQU 43H

 ;******************************************************

 CNT_A EQU 44H

 CNT_B EQU 45H

 KEY_CNT EQU 46H ;已输出的密码位数

 LINE EQU 47H ;按键行号

 ROW EQU 48H ;按键列号

 VAL EQU 49H ;键值

 ;******************************************************

 ;以下为初始化程序,包括数据存储空间初始化,设置初始密码

  ORG 00H

  SJMP START

  ORG 0050H

 START:MOV SP,#60H

 MOV CNT_A,#00H ;程序初始化

  MOV CNT_B,#00H

  MOV KEY_CNT,#00H

  MOV LINE,#00H

  MOV ROW,#00H

  MOV VAL,#00H

  SETB P1.0

  MOV LED_BIT_1,#00H ;段码存储区清0

  MOV LED_BIT_2,#00H

  MOV LED_BIT_3,#00H

  MOV LED_BIT_4,#00H

  MOV LED_BIT_5,#00H

  MOV LED_BIT_6,#00H

  MOV LED_BIT_7,#79H

  MOV LED_BIT_8,#73H

  MOV KEY_1,#00H ;输入密码存储区清0

  MOV KEY_2,#00H

  MOV KEY_3,#00H

  MOV KEY_4,#00H

  MOV KEY_5,#00H

  MOV KEY_6,#00H

  MOV WORD_1,#6 ;设置初始密码为"123456"

  MOV WORD_2,#5

  MOV WORD_3,#4

  MOV WORD_4,#3

  MOV WORD_5,#2

  MOV WORD_6,#1

 

 A0: LCALL DISP

 ;***********************************************************

 ;以下为键盘扫描程序,计算键值并存入VAL

 LSCAN: MOV P3,#0F0H ;扫描行码

  L1: JNB P3.0,L2

  LCALL DLY_S

  JNB P3.0,L2

  MOV LINE,#00H

  LJMP RSCAN

  L2: JNB P3.1,L3

  LCALL DLY_S

  JNB P3.1,L3

  MOV LINE,#01H

  LJMP RSCAN

  L3: JNB P3.2,L4

  LCALL DLY_S

  JNB P3.2,L4

  MOV LINE,#02H

  LJMP RSCAN

  L4: JNB P3.3,A0

  LCALL DLY_S

  JNB P3.3,A0

  MOV LINE,#03H

 RSCAN: MOV P3,#0FH ;扫描列码

  C1: JNB P3.4,C2

  MOV ROW,#00H

  LJMP CALCU

  C2: JNB P3.5,C3

  MOV ROW,#01H

  LJMP CALCU

  C3: JNB P3.6,C1

  MOV ROW,#02H

 CALCU: MOV A,LINE ;计算键值

  MOV B,#03H

  MUL AB

  ADD A,ROW

  MOV VAL,A

 ;**************************************************

 ;以下为按键处理程序,对不同的按键作出响应

  CJNE A,#0AH,J1 ;是否为"CLR"键

  MOV R1,KEY_CNT

  CJNE R1,#00H,J2

  LCALL ALARM_1

  LJMP START

  J2: LCALL SHIFTR

  DEC KEY_CNT

  W00:LCALL DISP ;等待按键抬起

  MOV A,P3

  CJNE A,#0FH,W01

  LJMP A0

  W01:MOV A,P3

  CJNE A,#0F0H,W02

  LJMP A0

  W02:SJMP W00

  J1: MOV A,VAL

  CJNE A,#0BH,J3 ;判断是否为"ENTER"键

  MOV R1,KEY_CNT

  CJNE R1,#06H,J4

  MOV A,WORD_1 ;比较密码

  CJNE A,3EH,J5

  MOV A,WORD_2

  CJNE A,3FH,J5

  MOV A,WORD_3

  CJNE A,40H,J5

  MOV A,WORD_4

  CJNE A,41H,J5

  MOV A,WORD_5

  CJNE A,42H,J5

  MOV A,WORD_6

  CJNE A,43H,J5

  CLR P1.0

  MOV P2,#0ffh

  LCALL DLY_L

  LJMP START

  J5: LCALL ALARM_2

  LJMP START

  J4: LCALL ALARM_1

  LJMP START

  J3: INC KEY_CNT ;按下数字键

  MOV A,KEY_CNT

  CJNE A,#07H,K1

  LCALL ALARM_1

  W10:LCALL DISP ;等待按键抬起

  MOV A,P3

  CJNE A,#0FH,W11

  LJMP START

  W11:MOV A,P3

  CJNE A,#0F0H,W12

  LJMP START

  W12:SJMP W10

 

  K1: LCALL SHIFTL

  W20:LCALL DISP ;等待按键抬起

  MOV A,P3

  CJNE A,#0FH,W21

  LJMP A0

  W21:MOV A,P3

  CJNE A,#0F0H,W22

  LJMP A0

  W22:SJMP W20

  LJMP A0

 

 ALARM_1:LCALL SEC ;操作错误报警

 

  RET

 ALARM_2:LCALL SEC ;密码错误报警

 

  LCALL DLY_L

  RET

 ;**************************************************

 ;音频信号产生程序,用于声音报警

 SEC:

  MOV R2, #100

  SEC_LP:clr P1.7

  LCALL T1MSD

 

  NOP

  setb P1.7

 LCALL T1MSD

  DJNZ R2,SEC_LP

  RET

 ;**************************************************

 ;段码,输入密码左移子程序

 SHIFTL: MOV LED_BIT_6,LED_BIT_5

  MOV LED_BIT_5,LED_BIT_4

  MOV LED_BIT_4,LED_BIT_3

  MOV LED_BIT_3,LED_BIT_2

  MOV LED_BIT_2,LED_BIT_1

  MOV LED_BIT_1,#40H

  MOV KEY_6,KEY_5

  MOV KEY_5,KEY_4

  MOV KEY_4,KEY_3

  MOV KEY_3,KEY_2

  MOV KEY_2,KEY_1

  MOV KEY_1,VAL

  RET

 ;**************************************************

 ;段码,输入密码右移子程序

 SHIFTR: MOV LED_BIT_1,LED_BIT_2

  MOV LED_BIT_2,LED_BIT_3

  MOV LED_BIT_3,LED_BIT_4

  MOV LED_BIT_4,LED_BIT_5

  MOV LED_BIT_5,LED_BIT_6

  MOV LED_BIT_6,#00H

  MOV KEY_1,KEY_2

  MOV KEY_2,KEY_3

  MOV KEY_3,KEY_4

  MOV KEY_4,KEY_5

  MOV KEY_5,KEY_6

  MOV KEY_6,#00H

  RET

 ;**************************************************

 ;以下为数码显示子程序

 DISP: PUSH ACC

  PUSH PSW

  SETB RS0

  MOV R0,#LED_BIT_1

  MOV R2,#8

  MOV R3,#0FEH

 DISP1: mov P2,R3

  MOV P0,@R0

  LCALL DLY_S

  MOV a,R3

  RL A

  MOV R3,A

  INC R0

  djnz R2,DISP1

  POP PSW

  POP ACC

  RET

 ;**********************************************

 T1MSD:MOV R3, #2

  D0:MOV R4, #250

  DJNZ R4, $

  DJNZ R3, D0

  RET

 DLY_S: MOV R6,#10

 D1: MOV R7,#250

  DJNZ R7,$

  DJNZ R6,D1

  RET

 DLY_L: MOV R5,#100

 D2: MOV R6,#100

 D3: MOV R7,#248

  DJNZ R7,$

  DJNZ R6,D3

  DJNZ R5,D2

  RET

 FINI: NOP

  END

  案例五 双机通信

 功能要求

 利用AT89S52串行口,通过双机通信,实现单片机之间数据块的传送

 甲机发送,乙机接收;

 甲机发送地址信息,然后发送一批数据;

 乙机把接收到的地址信息作为存放数据的首地址,然后将数据存入相应单元;

 校验方式:累加校验和。

 硬件电路设计

 硬件电路结构示意图

 参考程序

 发送方:ORG 0000H

  AJMP MAIN

  ORG 0100H

 MAIN: MOV SP,#60H

  MOV SCON,#40H ; 串行口以方式1工作

  MOV TMOD,#20H ; T1以方式2工作

  MOV TH1,#0FDH ; 波特率9600

  MOV TL1,#0FDH

  SETB TR1

  MOV P1,#0FFH

  MOV 30H,#0FFH ;设拨码开关初始值

 K0: MOV A,P1 ;读入拨码开关

  CJNE A,30H,K1 ;判断与前次是不是相同,不同则跳至K1

  SJMP K0

 K1: MOV 30H,A ;存入拨动开关新值

  MOV SBUF,A ;输入SBUF发送

 WAIT: JBC TI,K0 ;是否发送完毕?

  SJMP WAIT

  END

 接收方:ORG 0000H

  AJMP MAIN

  ORG 0100H

 MAIN: MOV SP,#60

  MOV SCON,#50H

  MOV TMOD,#20H

  MOV TH1,#0FDH

  MOV TL1,#0FDH

  SETB TR1

  MOV P1,#0FFH

 K0: JB RI,KK ;是否接收到数据,有则跳至KK

  SJMP K0

 KK: MOV A,SBUF ;将接收到的数据保存到累加器

  MOV P1,A ;输出至P1

  CLR RI ;清除RI

  SJMP K0

  END

  案例六 数字电压表设计

推荐访问:项目教学案例 单片机 汇编 教学案例
上一篇:(创客与创客工坊
下一篇:STEM教育理念如何

Copyright @ 2013 - 2018 优秀啊教育网 All Rights Reserved

优秀啊教育网 版权所有