1、项目六 电子时钟的制作,LED数码显示电路的制作,任务二,程序调试与烧写,任务四,1秒定时闪烁电路的制作,任务一,电子时钟的制作,任务三,键盘接口电路及编程,知识点二,相关指令,知识点四,LED数码管接口电路及编程,知识点一,MCS-51单片机定时/计数器,知识点三,项目五 地震报警器的制作,项目学习目标,任务一 一秒定时闪烁电路的制作,任务要求,单片机的P2.0作输出口,接一个LED发光二极管,通过编程实现发光二极管以1s为周期,亮0.5s,灭0.5s。,项目基本技能,1硬件电路制作,(1)电路原理图,(2)制作要点及元器件清单,1秒定时闪烁参考程序,ORG 0000H ;程序开始 LJMP
2、 START ;转初始化程序 ORG 001BH ;定时/计数器1中断入口地址 LJMP RT1 ;转定时/计数器1中断服务程序 ORG 0030H ;初始化程序开始 START: MOV TMOD,#10H ;定时/计数器1,工作方式1 MOV TH1,#3CH ;设置计数初值 MOV TL1,#0B0H ;设置计数初值 MOV R2,#05H ;设置记录中断次数初值 SETB EA ;开启总中断允许 SETB ET1 ;开启定时/计数器1中断允许 SETB TR1 ;启动定时/计数器1 MAIN: NOP ;主程序不执行任何任务,只是等待中断 LJMP MAIN,2程序编写,1秒定时闪烁参
3、考程序,;中断服务程序 RT1: MOV TH1,#3CH ;定时/计数器1中断服务子程序,置计数初值 MOV TL1,#0B0H DJNZ R2,BACK ;中断次数少于5次直接返回 MOV R2,#05H ;重新置中断次数初值 CPL P2.0 ;P2.0取反 BACK:RETI ;中断返回 END,任务二 LED数码显示电路的制作,任务要求,单片机的P0口作输出口,接一个数码管,通过编程实现数码管循环显示十进制数字09。单片机的P0口作输出口,接两个数码管,通过编程实现数码管循环显示十进制数字059。,1LED显示器静态显示09,(1)硬件电路制作,(2)软件设计,NUM EQU 40h
4、 ;定义数字变量 ORG 0000H LJMP START ;转移到初始化程序 ORG 0030H START: MOV NUM,#00H ;初始化变量初值 MAIN: MOV A,NUM ;数字送入A MOV DPTR,#CHAR ;字型码首地址存放DPTR MOVC A,A+DPTR ;数字对应字型码送入A MOV P0,A ;字型码送P0口显示 LCALL DELAY ;延时 MOV A,NUM ;数字送入A INC A ;加1 CJNE A,#0AH,AA ;不等于10转AA BB: MOV A,#00H ;等于10,送初值0 AA: MOV NUM,A ;保存数字 LJMP MAIN
5、 ;循环,继续显示,DELAY: MOV R7,#1EH ;延时子程序 D3: MOV R6,#21H D2: MOV R5,#0FAH D1: DJNZ R5,D1 DJNZ R6,D2 DJNZ R7,D3 RET CHAR: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳型字型码表 END,2LED显示器动态显示059,(1)硬件电路制作,(2)软件设计,SEC EQU 42H ;秒位变量 SEC_1 EQU 40H ;秒BCD码个位 SEC_2 EQU 41H ;秒BCD码十位 ORG 0000H LJMP START ;到主程序
6、 ORG 000BH LJMP CT0S ;到定时器0的中断服务程序 ORG 0030H START: MOV R3,#20 ;初始化R3(20次50ms的中断) MOV TMOD,#01H ;T0工作方式1,定时50ms MOV TH0,#04BH MOV TL0,#0FFH SETB EA ;开总中断 SETB ET0 MOV SEC,#00H ;开定时器0中断 SETB TR0 ;启动定时器 MAIN: LCALL BCD8421 LCALL DISPLAY ;调显示子程序 LJMP MAIN,DELAY: MOV R7,#255 ;延时子程序 D1: DJNZ R7,D1 RET CT
7、0S: PUSH A ;1s的中断服务程序 MOV TH0,#04BH MOV TL0,#0FFH DJNZ R3,EE ;不到1s,中断返回 MOV R3,#20 MOV A,SEC INC A ;秒加1 MOV SEC,A ;保存秒数值 CJNE A,#60,EE MOV SEC,#00H ;满60s置0 EE: POP A RETI BCD8421:MOV A,SEC MOV B,#0AH DIV AB MOV SEC_1,B MOV SEC_2,A RET,DISPLAY: ;秒显示子程序 MOV P2,#00H MOV A,SEC_2 ;显示秒的十位 MOV DPTR,#CHAR M
8、OVC A,A+DPTR MOV P0,A MOV P2,#02H LCALL DELAY MOV A,SEC_1 ;显示秒的个位 MOVC A,A+DPTR MOV P0,A MOV P2,#01H LCALL DELAY RET CHAR: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳型字型码表 END,任务三 电子时钟的制作,任务要求,单片机的P0口作段控,P2口作位控,接6个数码管,通过编程实现6位数码电子时钟功能。,1硬件电路制作,(1)电路原理图,CPU,按键,显示电路,(2)制作要点及元器件清单,(1)程序流程图,2程序编
9、写,(2)参考程序,;变量定义和内存分配 KEY_BUF EQU 33H ;键盘缓冲区 KEYTEMP EQU 34H ;临时按键值 HOUR EQU 40H ;小时变量 MIN EQU 41H ;分钟变量 SEC EQU 42H ;秒变量 HOUR_1 EQU 50H ;小时BCD码个位 HOUR_2 EQU 51H ;小时BCD码十位 MIN_1 EQU 52H ;分钟BCD码个位 MIN_2 EQU 53H ;分钟BCD码十位 SEC_1 EQU 54H ;秒BCD码个位 SEC_2 EQU 55H ;秒BCD码十位 SW1 BIT P1.0 ;小时加1按键 SW2 BIT P1.1 ;
10、小时减1按键 SW3 BIT P1.2 ;分钟加1按键 SW4 BIT P1.3 ;分钟减1按键 ORG 0000H LJMP START ;转移到初始化程序 ORG 000BH LJMP CT0S ;到定时器0的中断服务程序,ORG 0030H START: ;初始化部分 MOV 33H,#00H ;初始化缓冲区 MOV HOUR,#12 ;初始时间12:30:00 MOV MIN,#30 MOV SEC,#00 MOV R3,#20 ;初始化R3(20次50ms的中断) MOV TMOD,#01H ;初始化T0定时器,T0工作方式1 ,定时50ms MOV TH0,#04BH ;送定时器初
11、值 MOV TL0,#0FFH SETB EA ;开总中断 SETB ET0 ;开定时器0中断 SETB TR0 ;启动定时器 MAIN: LCALL KEYPRESS ;调按键处理子程序 LCALL BCD8421 ;调BCD码转换子程序 LCALL DISPLAY ;调显示子程序 LJMP MAIN,DELAY: MOV R7,#255 ;延时子程序 D2: DJNZ R7,D2 RET KEYPRESS: ;按键处理子程序,P1口为按键的接口 SETB SW1 ;设置为输入 JB SW1,KEY1 ;按键没有按下,查询下一按键 LCALL DELAY ;若按下,延时去抖 JB SW1,K
12、EY1 MOV A,HOUR ;小时变量送入A INC A ;小时数加1 MOV HOUR,A ;保存小时数 CJNE A,#24,KEY0 ;如果不等于24,等待按键释放 MOV HOUR,#00H ;如果等于24,则使小时数等于0 KEY0: LCALL DISPLAY ;调显示起延时去抖作用,保证扫描显示不停止 JNB SW1,KEY0 ;没有释放,继续等待 LCALL DISPLAY JNB SW1,KEY0 KEY1: SETB SW2 JB SW2,KEY2 LCALL DELAY JB SW2,KEY2 MOV A,HOUR DEC A ;小时变量减1 MOV HOUR,A CJ
13、NE A,#255,KEY10 ;0减1等于255 MOV HOUR,#23,KEY10: LCALL DISPLAY JNB SW2,KEY10 LCALL DISPLAY JNB SW2,KEY10 KEY2: SETB SW3 JB SW3,KEY3 LCALL DELAY JB SW3,KEY3 MOV A,MIN INC A ;分钟变量加1 MOV MIN,A CJNE A,#60,KEY20 MOV MIN,#00H KEY20: LCALL DISPLAY JNB SW3,KEY20 LCALL DISPLAY JNB SW3,KEY20 KEY3: SETB SW4 JB SW
14、4,KRET LCALL DELAY JB SW4,KRET MOV A,MIN DEC A ;分钟变量减1 MOV MIN,A CJNE A,#255,KEY30 ;0减1等于255 MOV MIN,#59 KEY30: LCALL DISPLAY JNB SW4,KEY30 LCALL DISPLAY JNB SW4,KEY30 KRET: RET,CT0S: ;走时部分。延时1s,秒加1,秒满60,分钟加1,分钟满60,小时加1 PUSH A ;保护现场 MOV TH0,#04BH ;重新送定时器初值 MOV TL0,#0FFH DJNZ R3,TIMEEND ;中断次数不足20次直接返
15、回 MOV R3,#20 ;中断次数满20次为1s,重新送计数初值 MOV A,SEC ;秒增加1 INC A MOV SEC,A CJNE A,#60,TIMEEND MOV SEC,#00H MOV A,MIN ;秒满60,分钟加1 INC A MOV MIN,A CJNE A,#60,TIMEEND MOV MIN,#00H MOV A,HOUR ;分钟满60,小时加1 INC A MOV HOUR,A CJNE A,#24,TIMEEND MOV HOUR,#00H TIMEEND:POP A ;恢复现场 RETI,;BCD码转换子程序,变量不大于60,没有百位 BCD8421:MOV
16、 A,HOUR MOV B,#0AH DIV AB ;除以10,商为十位,余数为个位 MOV HOUR_2,A MOV HOUR_1,B MOV A,MIN MOV B,#0AH DIV AB MOV MIN_2,A MOV MIN_1,B MOV A,SEC MOV B,#0AH DIV AB MOV SEC_2,A MOV SEC_1,B RET,DISPLAY:;以下是显示子程序,P0口输出段码,P2口输出位码, MOV P2,#00H ;显示小时的部分 MOV DPTR,#CHAR MOV A,HOUR_2 MOVC A,A+DPTR MOV P0,A MOV P2,#02H LCAL
17、L DELAY MOV A,HOUR_1 MOVC A,A+DPTR MOV P0,A MOV P2,#01H LCALL DELAY ;显示分钟的部分 MOV A,MIN_2 MOVC A,A+DPTR MOV P0,A MOV P2,#08H LCALL DELAY MOV A,MIN_1 MOVC A,A+DPTR MOV P0,A MOV P2,#04H LCALL DELAY,;显示秒的部分 MOV A,SEC_2 MOVC A,A+DPTR MOV P0,A MOV P2,#20H LCALL DELAY MOV A,SEC_1 MOVC A,A+DPTR MOV P0,A MOV
18、 P2,#10H LCALL DELAY RET CHAR:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳型字型码表 END,任务四 程序调试与烧写,使用仿真器调试程序。程序调试完成后,使用编程器将编译的十六进制文件烧写入单片机,将单片机从编程器上取下,插入电路板的IC插座,给电路板接上5V电源,观察电路运行情况。,知识点一 LED数码管接口电路及编程,项目基本知识,1数码管简介,显示字形码,(1)LED数码管静态显示接口,2LED数码管静态显示,(2)LED数码管静态显示编程,字形码存放在数据表格中,通常在DPTR内存放数据表格首地址,
19、A存放要显示的数据,利用MOVC A,A+DPTR这条指令查找字形码。,(1)LED数码管动态显示接口,3LED数码管动态显示,(2)LED数码管动态显示编程,动态扫描频率太低,LED数码管将出现闪烁现象;频率太高,由于每个LED数码管点亮的时间太短,LED数码管的亮度太低,无法看清。因此,在编程时,常采用调用延时子程序来达到要求的保持时间,一般取几毫秒为宜。,知识点二 键盘接口电路及编程,1键盘工作原理,机械式按键在按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。抖动时间的长短与开关的机械特性有关,一般为510ms。,2独立式按键,对于独立式按键
20、主程序可以采用不断查询的方法来进行处理,即如果只有一个独立式按键,检测是否闭合,如果闭合,则去除键抖动后再执行按键程序;如果有多个独立式按键,可以依次逐个查询处理。,知识点三 MCS-51单片机定时/计数器,1定时、计数的概念,(1)计数概念 (2)计数器的容量 (3)定时 (4)溢出 (5)任意定时及计数的方法,(1)定时/计数器的方式控制字,2定时/计数器概述,(2)定时/计数器的4种工作方式, 工作方式0。 定时/计数器的工作方式0称为13位定时/计数方式。它由TL的低5位和TH的8位构成13位的计数器,TL的高3位未用。 工作方式1。 工作方式1是16位的定时/计数方式,M1M0为01
21、,其他特性与工作方式0相同。 工作方式2。 工作方式2是16位加法计数器,TH0和TL0具有不同功能,其中,TL0是8位计数器,TH0是重置初值的8位缓冲器。方式2具有初值自动装入功能,每当计数溢出,就会打开高、低8位之间的开关,预置数进入低8位。这是由硬件自动完成的,不需要由人工干预。 工作方式3。 定时/计数器工作于方式3时,定时器T0被分解成两个独立的8位计数器TL0和TH0。,(1)定时/计数器的初始化,3定时/计数器初始化及应用, 确定工作方式对TMOD赋值。如“MOV TMOD #10H”,表明定时器1工作在方式1,且工作在定时器方式。 预置定时或计数的初值直接将初值写入TH0、T
22、L0或TH1、TL1。 根据需要开启定时/计数器中断直接对IE寄存器赋值。如MOV IE,#82H,表明允许定时器T0中断。 启动定时/计数器工作将TR0或TR1置“1”。,解:因方式0采用13位计数器,其最大定时时间为:81921s = 8.192ms,因此,定时时间不可能像方式1一样选择50ms,但可选择定时时间为5ms,再循环200次。定时时间选定后,再确定计数值为5000,则定时器1的初值为: X = M计数值= 8192 5000 = 3192 = C78H = 0110001111000B 因13位计数器中TL1的高3位未用,应填写0,TH1占高8位,所以,X的实际填写值应为: X
23、 = 0110001100011000B = 6318H 即TH1 = 63H,TL1 = 18H,又因采用方式0定时,故TMOD = 00H。,例6.1 用定时器1方式0实现1s的延时。,(2)定时/计数器的编程和应用,解:要在P1.0得到周期为2ms的方波,只要使P1.0端口每隔1ms取反一次 即可。 设置T0的方式字。T0的方式字为:TMOD00H。 TMOD.0、TMOD.1 M1M0=00,T0工作在方式0; TMOD.2 =0,T0为定时状态; TMOD.3 GATE=0,表示计数不受控制; TMOD.4TMOD.7可为任意字,因不用T1,这里均取“0”值。 计算1ms定时T0的初
24、值。晶振频率为6MHz,则机器周期为2s,设T0的初值为X,则:(213 X)2106=1103,这样X7692D1111000001100B0F00CH。 因此,TH0的初值为F0H,TL0的初值为0CH。 编程。,例6.2 利用T0方式0产生1ms的定时,在P1.0端口上输出周期为2ms的方波。设晶振频率为6MHz。,知识点四 相关指令,1MOVC A,A+DPTR 把A+DPTR所指外部程序存储单元的值送A,常用于查找存放在程序存储器中的表格。 2JZ rel 累加器A判0指令,若(A)=0,则PCPC+rel,否则程序顺序执行。 3CJNE A,#data,rel 比较转移指令,若A#
25、data,则PCPC+rel,否则顺序执行;若 A#data,则CY=1,否则CY=0。 4DJNZ Rn,rel RnRn1,若Rn0,则PCPC+rel, 否则顺序执行。DJNZ指令通常用于循环程序中控制循环次数。,5JB bit,rel 位转移指令,若bit=1,则PCPC+rel,否则顺序执行。 6JC rel 若CY=0,则PCPC+rel,否则顺序执行。 7DB 格式:标号: DB 字节数据表 定义字节数据伪指令,常用来定义数据表格。 如CHAR:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;表示从标号CHAR开始的地方将数据从左到右依次存放在指定地址单元。 8EQU 格式:符号名 EQU 表达式 符号定义伪指令,常用来定义变量,将表达式的值定义为一个指定的符号名。,