回答

收藏

单片机实现数字钟

其他 其他 2711 人阅读 | 0 人回复 | 2007-08-07

1.实验任务?

(1.开机时,显示12:00:00的时间开始计时;

(2.P0.0/AD0控制“秒”的调整,每按一次加1秒;?

(3.P0.1/AD1控制“分”的调整,每按一次加1分;?

(4.P0.2/AD2控制“时”的调整,每按一次加1个小时;?

2.电路原理图




3.?系统板上硬件连线?

(1.???????把“单片机系统”区域中的P1.0-P1.7端口用8芯排线连接到“动态数码显示”区域中的A-H端口上;

(2.???????把“单片机系统:区域中的P3.0-P3.7端口用8芯排线连接到“动态数码显示”区域中的S1-S8端口上;?

(3.???????把“单片机系统”区域中的P0.0/AD0、P0.1/AD1、P0.2/AD2端口分别用导线连接到“独立式键盘”区域中的SP3、SP2、SP1端口上;?

4.?相关基本知识?

(1.???????动态数码显示的方法

(2.???????独立式按键识别过程?

(3.???????“时”,“分”,“秒”数据送出显示处理方法?

5.?程序框图?

 ?
6.?汇编源程序?

SECOND??????????EQU?30H?

MINITE?????????????????????EQU?31H?

HOUR????????????EQU?32H?

HOURK??????????BIT?P0.0?

MINITEK?????????BIT?P0.1?

SECONDK????????BIT?P0.2?

DISPBUF????????????????????EQU?40H?

DISPBIT????????????EQU?48H?

T2SCNTA??????????EQU?49H?

T2SCNTB?????????EQU?4AH?

TEMP??????????????????????EQU?4BH?

??

????????ORG?00H?

????????LJMP?START?

????????ORG?0BH?

????????LJMP?INT_T0?

START:??MOV?SECOND,#00H?

????????MOV?MINITE,#00H?

????????MOV?HOUR,#12?

????????MOV?DISPBIT,#00H?

????????MOV?T2SCNTA,#00H?

????????MOV?T2SCNTB,#00H?

????????MOV?TEMP,#0FEH?

????????LCALL?DISP?

????????MOV?TMOD,#01H?

????????MOV?TH0,#(65536-2000)?/?256?

????????MOV?TL0,#(65536-2000)?MOD?256?

????????SETB?TR0?

????????SETB?ET0?

????????SETB?EA?

WT:?????JB?SECONDK,NK1?

????????LCALL?DELY10MS?

????????JB?SECONDK,NK1?

????????INC?SECOND?

????????MOV?A,SECOND?

????????CJNE?A,#60,NS60?

????????MOV?SECOND,#00H?

NS60:???LCALL?DISP?

????????JNB?SECONDK,$?

NK1:????JB?MINITEK,NK2?

????????LCALL?DELY10MS?

????????JB?MINITEK,NK2?

????????INC?MINITE?

????????MOV?A,MINITE?

????????CJNE?A,#60,NM60?

????????MOV?MINITE,#00H?

NM60:???LCALL?DISP?

????????JNB?MINITEK,$?

NK2:????JB?HOURK,NK3?

????????LCALL?DELY10MS?

????????JB?HOURK,NK3?

????????INC?HOUR?

????????MOV?A,HOUR?

????????CJNE?A,#24,NH24?

????????MOV?HOUR,#00H?

NH24:???LCALL?DISP?

????????JNB?HOURK,$?

NK3:????LJMP?WT?

DELY10MS:?

????????MOV?R6,#10?

D1:?????MOV?R7,#248?

????????DJNZ?R7,$?

????????DJNZ?R6,D1?

????????RET?

DISP:???

????????MOV?A,#DISPBUF?

????????ADD?A,#8?

????????DEC?A?

????????MOV?R1,A?

????????MOV?A,HOUR?

????????MOV?B,#10?

????????DIV?AB?

????????MOV?@R1,A?

????????DEC?R1?

????????MOV?A,B?

????????MOV?@R1,A?

????????DEC?R1?

????????MOV?A,#10?

????????MOV@R1,A?

????????DEC?R1?

????????MOV?A,MINITE?

????????MOV?B,#10?

????????DIV?AB?

????????MOV?@R1,A?

????????DEC?R1?

????????MOV?A,B?

????????MOV?@R1,A?

????????DEC?R1?

????????MOV?A,#10?

????????MOV@R1,A?

????????DEC?R1?

????????MOV?A,SECOND?

????????MOV?B,#10?

????????DIV?AB?

????????MOV?@R1,A?

????????DEC?R1?

????????MOV?A,B?

????????MOV?@R1,A?

????????DEC?R1?

????????RET?

INT_T0:?

????????MOV?TH0,#(65536-2000)?/?256?

????????MOV?TL0,#(65536-2000)?MOD?256?

????????MOV?A,#DISPBUF?

????????ADD?A,DISPBIT?

????????MOV?R0,A?

????????MOV?A,@R0?

????????MOV?DPTR,#TABLE?

????????MOVC?A,@A+DPTR?

????????MOV?P1,A?

????????MOV?A,DISPBIT?

????????MOV?DPTR,#TAB?

????????MOVC?A,@A+DPTR?

????????MOV?P3,A?

????????INC?DISPBIT?

????????MOV?A,DISPBIT?

????????CJNE?A,#08H,KNA?

????????MOV?DISPBIT,#00H?

KNA:????INC?T2SCNTA?

????????MOV?A,T2SCNTA?

????????CJNE?A,#100,DONE?

????????MOV?T2SCNTA,#00H?

????????INC?T2SCNTB?

????????MOV?A,T2SCNTB?

????????CJNE?A,#05H,DONE?

????????MOV?T2SCNTB,#00H?

????????INC?SECOND?

????????MOV?A,SECOND?

????????CJNE?A,#60,NEXT?

????????MOV?SECOND,#00H?

????????INC?MINITE?

????????MOV?A,MINITE?

????????CJNE?A,#60,NEXT?

????????MOV?MINITE,#00H?

????????INC?HOUR?

????????MOV?A,HOUR?

????????CJNE?A,#24,NEXT?

????????MOV?HOUR,#00H?

NEXT:???LCALL?DISP?

DONE:???RETI?

TABLE:??DB?3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H?

TAB:????DB?0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH?

????????END?

??

7.?C语言源程序?

#include??

unsigned?char?code?dispcode[]={0x3f,0x06,0x5b,0x4f,?

???????????????????????????????0x66,0x6d,0x7d,0x07,?

???????????????????????????????0x7f,0x6f,0x77,0x7c,?

???????????????????????????????0x39,0x5e,0x79,0x71,0x00};?

unsigned?char?dispbitcode[]={0xfe,0xfd,0xfb,0xf7,?

?????????????????????????????0xef,0xdf,0xbf,0x7f};?

unsigned?char?dispbuf[8]={0,0,16,0,0,16,0,0};?

unsigned?char?dispbitcnt;?

??

unsigned?char?second;?

unsigned?char?minite;?

unsigned?char?hour;?

unsigned?int?tcnt;?

unsigned?char?mstcnt;?

??

unsigned?char?i,j;?

??

void?main(void)?

{?

??TMOD=0x02;?

??TH0=0x06;?

??TL0=0x06;?

??TR0=1;?

??ET0=1;?

??EA=1;?

??

??while(1)?

????{?

??????if(P0_0==0)?

????????{?

??????????for(i=5;i>0;i--)?

??????????for(j=248;j>0;j--);?

??????????if(P0_0==0)?

????????????{?

??????????????second++;?

??????????????if(second==60)?

????????????????{?

??????????????????second=0;?

????????????????}?

??????????????dispbuf[0]=second%10;?

??????????????dispbuf[1]=second/10;?

??????????????while(P0_0==0);?

????????????}?

????????}?

??????if(P0_1==0)?

????????{?

??????????for(i=5;i>0;i--)?

??????????for(j=248;j>0;j--);?

??????????if(P0_1==0)?

????????????{?

??????????????minite++;?

??????????????if(minite==60)?

????????????????{?

??????????????????minite=0;?

????????????????}?

??????????????dispbuf[3]=minite%10;?

??????????????dispbuf[4]=minite/10;?

??????????????while(P0_1==0);?

????????????}?

????????}?

??????if(P0_2==0)?

????????{?

??????????for(i=5;i>0;i--)?

??????????for(j=248;j>0;j--);?

??????????if(P0_2==0)?

????????????{?

??????????????hour++;?

??????????????if(hour==24)?

????????????????{?

??????????????????hour=0;?

????????????????}?

??????????????dispbuf[6]=hour%10;?

??????????????dispbuf[7]=hour/10;?

??????????????while(P0_2==0);?

????????????}?

????????}?

????}?

}?

void?t0(void)?interrupt?1?using?0?

{?

??mstcnt++;?

??if(mstcnt==8)?

????{?

??????mstcnt=0;?

??????P1=dispcode[dispbuf[dispbitcnt]];?

??????P3=dispbitcode[dispbitcnt];?

??????dispbitcnt++;?

??????if(dispbitcnt==8)?

????????{?

??????????dispbitcnt=0;?

????????}?

????}?

??tcnt++;?

??if(tcnt==4000)?

????{?

??????tcnt=0;?

??????second++;?

??????if(second==60)?

????????{?

??????????second=0;?

??????????minite++;?

??????????if(minite==60)?

????????????{?

??????????????minite=0;?

??????????????hour++;?

??????????????if(hour==24)?

????????????????{?

??????????????????hour=0;?

????????????????}?

????????????}?

????????}?

??????dispbuf[0]=second%10;?

??????dispbuf[1]=second/10;?

??????dispbuf[3]=minite%10;?

??????dispbuf[4]=minite/10;?

??????dispbuf[6]=hour%10;?

??????dispbuf[7]=hour/10;?

????}?

}
分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条