案例一单片机最小系统设计一、功能要求1、设计一个单片机最小系统;2、通过锁存器实现地址信息和数据信息的隔离。
二、硬件电路设计1、方案设计结构示意图:2、电路设计原理图:三、参考程序ORG 0000HJMP MAINORG 0040HMAIN:MOV SP,#07HMOV DPTR,#0FF45HMOV A,#88HMOVX @DPTR,ASJMP $END案例二信号灯控制一、功能要求1、设计一个延时程序,使与P1.0相连的发光二极管每隔1秒亮一次;2、采用循环控制,使8个发光二极管呈跑马灯方式闪烁,其中发光二极管点亮时长为1秒,熄灭时长为2秒。
二、硬件电路设计1、电路设计原理图三、参考程序org 0000hljmp startorg 100hstart:mov dptr,#tabmov a,#0mov r3,#8loop4: mov 30h,amovc a,@a+dptrmov p1,alcall delaymov a,30hinc amov 30h,amovc a,@a+dptrmov p1,alcall delaylcall delaymov a,30hinc adjnz r3,loop4ljmp startdelay:mov r7,#100loop2:mov r6,#100loop1: mov r5,#49djnz r5,$djnz r6,loop1djnz r7,loop2rettab: db 0feh,0ffh,0fdh,0ffh,0fbh,0ffh,0f7h,0ffhdb 0efh,0ffh,0dfh,0ffh,0bfh,0ffh,07fh ,0ffhEnd案例三交通灯控制一、功能要求利用单片机设计制作具有下列功能的交通灯:1、自动计时,由两位数码管静态显示;2、发光二极管分四组分别代表东、南、西、北四个方向交通灯,东、西方向红灯亮时,南北方向绿灯亮;反之南北方向红灯亮时,东西方向绿灯亮;小灯每30S交替一次。
二、硬件电路设计三、参考程序ORG 0000HLJMP STARTORG 0100HBCD1 EQU 50HBCD2 EQU 51HSTART: MOV SP,#60HSTATE0:MOV A,#0F6H ;初始状态全红灯MOV P1,AMOV R2,#1 ;延时1秒S0: LCALL BINBCDLCALL DISPLAYLCALL DELAYDJNZ R2,S0STATE1:MOV A,#0F5H ;南北绿灯,东西红灯MOV P1,AMOV R2,#20 ;延时20秒S1:LCALL BINBCDLCALL DISPLAYLCALL DELAYDJNZ R2,S1STATE2:MOV A,#0F3H ;南北黄灯,东西红灯MOV P1,AMOV R2,#5 ;延时5秒S2:LCALL BINBCDLCALL DISPLAYLCALL DELAYDJNZ R2,S2STATE3:MOV A,#0EEH ;南北红灯,东西绿灯MOV P1,AMOV R2,#20 ;延时20秒S3:LCALL BINBCDLCALL DISPLAYLCALL DELAYDJNZ R2,S3STATE4:MOV A,#0DEH ;南北红灯,东西黄灯MOV P1,AMOV R2,#5 ;延时5秒S4:LCALL BINBCDLCALL DISPLAYLCALL DELAYDJNZ R2,S4LJMP STATE1 ;转至状态1DELAY:MOV R7,#20 ;1秒延时子程序D1:MOV R6,#200D2:MOV R5,#123NOPDJNZ R5,$DJNZ R6,D2DJNZ R7,D1RETBINBCD: MOV A,R2 ;二进制转换非压缩BCD码子程序MOV B,#10DIV ABMOV BCD2,A ;存十位BCD码MOV BCD1,B ;存个位BCD码RETDISPLAY: MOV A,BCD1 ;显示子程序MOV DPTR,#TABMOVC A,@A+DPTR ;查个位字形码MOV P2,AMOV A,BCD2MOVC A,@A+DPTR ;查十位字形码MOV P0,ARETTAB: DB 0C0H,0F9H,0A4H,0B0H,99HDB 92H,82H,0F8H,80H,90HEND案例四简易电子密码锁设计一、功能要求1、初始状态下显示屏显示“HELLO”,并保持显示5秒后清屏;2、如果密码输入错误则显示“ERROR”,并保持显示5秒后清屏;3、如果密码输入正确则显示“RIGHT”,并保持显示5秒后清屏。
二、硬件电路设计1、系统方案设计理论图(1)键盘电路图(2)数码管显示电路三、参考程序******************************************************* ;以下8个字节存放8位数码管的段码LED_BIT_1 EQU 30HLED_BIT_2 EQU 31HLED_BIT_3 EQU 32HLED_BIT_4 EQU 33HLED_BIT_5 EQU 34HLED_BIT_6 EQU 35HLED_BIT_7 EQU 36HLED_BIT_8 EQU 37H;以下6个字节存放初始密码WORD_1 EQU 38HWORD_2 EQU 39HWORD_3 EQU 3AHWORD_4 EQU 3BHWORD_5 EQU 3CHWORD_6 EQU 3DH;以下6个字节存放用户输入的6位密码KEY_1 EQU 3EHKEY_2 EQU 3FHKEY_3 EQU 40HKEY_4 EQU 41HKEY_5 EQU 42HKEY_6 EQU 43H;******************************************************CNT_A EQU 44HCNT_B EQU 45HKEY_CNT EQU 46H ;已输出的密码位数LINE EQU 47H ;按键行号ROW EQU 48H ;按键列号VAL EQU 49H ;键值;******************************************************;以下为初始化程序,包括数据存储空间初始化,设置初始密码ORG 00HSJMP STARTORG 0050HSTART:MOV SP,#60HMOV CNT_A,#00H ;程序初始化MOV CNT_B,#00HMOV KEY_CNT,#00HMOV LINE,#00HMOV ROW,#00HMOV VAL,#00HSETB P1.0MOV LED_BIT_1,#00H ;段码存储区清0MOV LED_BIT_2,#00HMOV LED_BIT_3,#00HMOV LED_BIT_4,#00HMOV LED_BIT_5,#00HMOV LED_BIT_6,#00HMOV LED_BIT_7,#79HMOV LED_BIT_8,#73HMOV KEY_1,#00H ;输入密码存储区清0MOV KEY_2,#00HMOV KEY_3,#00HMOV KEY_4,#00HMOV KEY_5,#00HMOV KEY_6,#00HMOV WORD_1,#6 ;设置初始密码为"123456"MOV WORD_2,#5MOV WORD_3,#4MOV WORD_4,#3MOV WORD_5,#2MOV WORD_6,#1A0: LCALL DISP;***********************************************************;以下为键盘扫描程序,计算键值并存入VALLSCAN: M OV P3,#0F0H ;扫描行码L1: JNB P3.0,L2LCALL DLY_SJNB P3.0,L2MOV LINE,#00HLJMP RSCANL2: JNB P3.1,L3LCALL DLY_SJNB P3.1,L3MOV LINE,#01HLJMP RSCANL3: JNB P3.2,L4LCALL DLY_SJNB P3.2,L4MOV LINE,#02HLJMP RSCANL4: JNB P3.3,A0LCALL DLY_SJNB P3.3,A0MOV LINE,#03HRSCAN: MOV P3,#0FH ;扫描列码C1: JNB P3.4,C2MOV ROW,#00HLJMP CALCUC2: JNB P3.5,C3MOV ROW,#01HLJMP CALCUC3: JNB P3.6,C1MOV ROW,#02HCALCU: MOV A,LINE ;计算键值MOV B,#03HMUL ABADD A,ROWMOV VAL,A;**************************************************;以下为按键处理程序,对不同的按键作出响应CJNE A,#0AH,J1 ;是否为"CLR"键MOV R1,KEY_CNTCJNE R1,#00H,J2LCALL ALARM_1LJMP STARTJ2: LCALL SHIFTRDEC KEY_CNTW00:LCALL DISP ;等待按键抬起MOV A,P3CJNE A,#0FH,W01LJMP A0W01:MOV A,P3CJNE A,#0F0H,W02LJMP A0W02:SJMP W00J1: MOV A,VALCJNE A,#0BH,J3 ;判断是否为"ENTER"键MOV R1,KEY_CNTCJNE R1,#06H,J4MOV A,WORD_1 ;比较密码CJNE A,3EH,J5MOV A,WORD_2CJNE A,3FH,J5MOV A,WORD_3CJNE A,40H,J5MOV A,WORD_4CJNE A,41H,J5MOV A,WORD_5CJNE A,42H,J5MOV A,WORD_6CJNE A,43H,J5CLR P1.0MOV P2,#0ffhLCALL DLY_LLJMP STARTJ5: LCALL ALARM_2LJMP STARTJ4: LCALL ALARM_1LJMP STARTJ3: INC KEY_CNT ;按下数字键MOV A,KEY_CNTCJNE A,#07H,K1LCALL ALARM_1W10:LCALL DISP ;等待按键抬起MOV A,P3CJNE A,#0FH,W11LJMP STARTW11:MOV A,P3CJNE A,#0F0H,W12LJMP STARTW12:SJMP W10K1: LCALL SHIFTLW20:LCALL DISP ;等待按键抬起MOV A,P3CJNE A,#0FH,W21LJMP A0W21:MOV A,P3CJNE A,#0F0H,W22LJMP A0W22:SJMP W20LJMP A0ALARM_1:LCALL SEC ;操作错误报警RETALARM_2:LCALL SEC ;密码错误报警LCALL DLY_LRET;************************************************** ;音频信号产生程序,用于声音报警SEC:MOV R2, #100SEC_LP:clr P1.7LCALL T1MSDNOPsetb P1.7LCALL T1MSDDJNZ R2,SEC_LPRET;************************************************** ;段码,输入密码左移子程序SHIFTL: MOV LED_BIT_6,LED_BIT_5MOV LED_BIT_5,LED_BIT_4MOV LED_BIT_4,LED_BIT_3MOV LED_BIT_3,LED_BIT_2MOV LED_BIT_2,LED_BIT_1MOV LED_BIT_1,#40HMOV KEY_6,KEY_5MOV KEY_5,KEY_4MOV KEY_4,KEY_3MOV KEY_3,KEY_2MOV KEY_2,KEY_1MOV KEY_1,VALRET;************************************************** ;段码,输入密码右移子程序SHIFTR: MOV LED_BIT_1,LED_BIT_2MOV LED_BIT_2,LED_BIT_3MOV LED_BIT_3,LED_BIT_4MOV LED_BIT_4,LED_BIT_5MOV LED_BIT_5,LED_BIT_6MOV LED_BIT_6,#00HMOV KEY_1,KEY_2MOV KEY_2,KEY_3MOV KEY_3,KEY_4MOV KEY_4,KEY_5MOV KEY_5,KEY_6MOV KEY_6,#00HRET;************************************************** ;以下为数码显示子程序DISP: PUSH ACCPUSH PSWSETB RS0MOV R0,#LED_BIT_1MOV R2,#8MOV R3,#0FEHDISP1: mov P2,R3MOV P0,@R0LCALL DLY_SMOV a,R3RL AMOV R3,AINC R0djnz R2,DISP1POP PSWPOP ACCRET;**********************************************T1MSD:MOV R3, #2D0:MOV R4, #250DJNZ R4, $DJNZ R3, D0RETDLY_S: MOV R6,#10D1: MOV R7,#250DJNZ R7,$DJNZ R6,D1RETDLY_L: MOV R5,#100D2: MOV R6,#100D3: MOV R7,#248DJNZ R7,$DJNZ R6,D3DJNZ R5,D2RETFINI: NOPEND案例五双机通信一、功能要求利用AT89S52串行口,通过双机通信,实现单片机之间数据块的传送(1)甲机发送,乙机接收;(2)甲机发送地址信息,然后发送一批数据;(3)乙机把接收到的地址信息作为存放数据的首地址,然后将数据存入相应单元;(4)校验方式:累加校验和。