,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,Click to edit Master title style,九江职业技术学院电气工程系,九江职业技术学院电气工程系,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,Click to edit Master title style,*,情境二,AT89S51,单片机显示接口设计,任务,2.3,秒表的设计与制作,情境二 AT89S51单片机显示接口设计 任务2.3,教学目标,知识目标:,1.,掌握,1s,延时程序设计。,2.,掌握数码管显示程序设计。,技能目标:,1.,制作秒表硬件电路。,2.,掌握显示程序的调试方法。,教学目标知识目标:,工作任务,利用单片机和,2,位,LED,数码管制作一个秒表,其任务要求如下:,1.,显示时间为,0099s,,每秒自动加,1,,计满显示“,FF”,;,2.,设计一个“开始”按钮,S1,和一个“停止”按钮,S2,,按“开始”键,显示秒数从,00,开始;按“停止”键,保持实时时间,停止计时。,工作任务 利用单片机和2位LED数码管制作一个秒表,其任务要,秒表设计与制作,工作任务,硬件制作,软件设计,系统调试,秒表设计与制作 工作任务,秒表的硬件电路设计,秒表的硬件电路设计,秒表的软件设计,秒表设计思路,1s,定时功能,实现基准时间;,秒计数器,实现每隔,1s,加,1,的操作;,显示字型码转换,实现数值与显示字型之间的转换;,显示输出,实现秒计数值的显示输出。,秒表的软件设计 秒表设计思路,流程图,流程图,秒表中的加,1,及,BCD,码转换子程序,NBCD,:,CLR A,CLR C,MOV A,,,N,ADD A,,,#1,DA A,MOV N,,,A,ANL A,,,#0FH,MOV BCD1,,,A,MOV A,,,N,SWAP A,ANL A,,,#0FH,MOV BCD2,,,A,RET,功能:实现秒加,1,功能,并将秒数转换成非压缩,BCD,码。,秒表中的加1及BCD码转换子程序NBCD:CLR A,汇编参考程序,-,主程序,ORG0000H,LJMPMAIN,ORG0030H,N,EQU,5FH,;秒计数器,BCD1,EQU,5EH,;,BCD,码个位数,BCD2,EQU,5DH,;,BCD,码十位数,CRTN1,EQU,5CH,;个位显示码,CRTN2,EQU,5BH,;十位显示码,MAIN,:,MOVSP,,,#60H,MOVN,,,#00H,;秒计数器清零,MOVP0,,,#0C0H,;显示器输入“,0”,MOVP2,,,#0C0H,DELAY,:,MOVR7,,,#04H,;,1s,延时,DL1,:,MOVR6,,,#250,DL2,:,MOVR5,,,#250,DL3,:,NOP,NOP,DJNZR5,,,DL3,JNBP3.2,,,MAIN3,;每,1ms,检测是否停止计时,DJNZ R6,,,DL2,DJNZR7,,,DL1,MOVA,,,N,CJNEA,,,#99H,,,MAIN1,;判断是否超出显示最大值,SJMPMAIN2,MAIN1,:,ACALL NBCD,ACALLTBFLIN,ACALLDISPLAY,LJMPDELAY,MAIN2,:,MOVBCD1,,,#0FH,;显示“,FF”,MOVBCD2,,,#0FH,ACALLTBFLIN,MAIN3,:,ACALL DISPLAY,SJMPMAIN3,汇编参考程序-主程序ORG0000HNOP,参考程序,-,子程序,NBCD,:,CLRA,;,BCD,码转换子程序,CLRC,MOVA,,,N,ADDA,,,#1,DAA,MOVN,,,A,ANLA,,,#0FH,MOVBCD1,,,A,MOVA,,,N,SWAPA,ANLA,,,#0FH,MOVBCD2,,,A,RET,TBFLIN,:,MOVA,,,BCD1,;查显示码,MOVDPTR,,,#DOT,MOVCA,,,A+DPTR,MOVCRTN1,,,A,MOVA,,,BCD2,MOVCA,,,A+DPTR,MOVCRTN2,,,A,RET,DOT,:,DB,0C0H,,,0F9H,,,0A4H,,,0B0H,,,99H,,,92H,,,82H,,,0F8H,DB 80H,,,90H,,,40H,,,79H,,,24H,,,30H,,,86H,,,8EH,DISPLAY,:,MOVP2,,,CRTN1,;输出显示子程序,MOVP0,,,CRTN2,RET,END,参考程序-子程序NBCD:CLRA;BCD码转换,#include,sbit KeyDown=P32;,bit flag;/,是否停止标志,unsigned char code dis_tab10=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90;/,共阳极码表,unsigned char i,Second_Counts;,/1ms,延时函数,void delay_nms(unsigned int i)/,使用,12M,时的延时循环次数,略,/,主程序,int main(void),P0=0 xFF;,P2=0 xFF;,Second_Counts=0;,i=0;,flag=1;/,停止按键未按下,C51,参考程序,#includeC51参考程序,while(1),delay_nms(10);,i+;,if(i=100),Second_Counts+;,i=0;,if(Second_Counts=100)Second_Counts=0;/,计满,100s,清零计数单元,P0=dis_tabSecond_Counts/10;/,分离秒计数值十位并显示,P2=dis_tabSecond_Counts%10;/,分离秒计数值个位并显示,if(!KeyDown)/,停止按键按下,标志清零,停机等待,P0=dis_tabSecond_Counts/10;,P2=dis_tabSecond_Counts%10;,flag=0;,while(!flag);,C51,参考程序(续),while(1)C51参考程序(续),秒表程序仿真,秒表程序仿真,End,!,End!,