|
|
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;?
????}?
} |
|