今天是: <%response.write formatdatetime(date(),1)%> 電子制作天地網站歡迎您的光臨,歡迎提出寶貴意見或建議。本站信息產業部備案: 粵ICP備05114582號
 
00-59秒計時器
0-59s Timer

時間:2014-3-30 17:07:47 來源:互聯網 作者:不詳 編輯: 【關閉


 
1.  實驗任務
如下圖所示,在AT89S51單片機的P0和P2端口分別接有兩個共陰數碼管,P0口驅動顯示秒時間的十位,而P2口驅動顯示秒時間的個位。
2.  電路原理圖
 
00-59秒計時器0-59s Timer
 
 
3.  系統板上硬件連線
(1.       把“單片機系統”區域中的P0.0/AD0-P0.7/AD7端口用8芯排線連接到“四路靜態數碼顯示模塊”區域中的任一個a-h端口上;要求:P0.0/AD0對應著a,P0.1/AD1對應著b,……,P0.7/AD7對應著h。
(2.       把“單片機系統”區域中的P2.0/A8-P2.7/A15端口用8芯排線連接到“四路靜態數碼顯示模塊”區域中的任一個a-h端口上;要求:P2.0/A8對應著a,P2.1/A9對應著b,……,P2.7/A15對應著h。
4.  程序設計內容
(1.       在設計過程中我們用一個存儲單元作為秒計數單元,當一秒鐘到來時,就讓秒計數單元加1,當秒計數達到60時,就自動返回到0,從新秒計數。
(2.       對于秒計數單元中的數據要把它十位數和個數分開,方法仍采用對10整除和對10求余。
(3.       在數碼上顯示,仍通過查表的方式完成。
(4.       一秒時間的產生在這里我們采用軟件精確延時的方法來完成,經過精確計算得到1秒時間為1.002秒。
DELY1S:        MOV R5,#100
D2:                MOV R6,#20
D1:                MOV R7,#248
                     DJNZ R7,$
                     DJNZ R6,D1
                     DJNZ R5,D2
                     RET
5.  程序框圖
 
 00-59秒計時器0-59s Timer
  
6.  匯編源程序
Second                 EQU 30H
                            ORG 0
START:               MOV Second,#00H
NEXT:                MOV A,Second
                           MOV B,#10
                            DIV AB
                            MOV DPTR,#TABLE
                           MOVC A,@A+DPTR
                            MOV P0,A
                            MOV A,B
                           MOVC A,@A+DPTR
                            MOV P2,A
                            LCALL DELY1S
                           INC Second
                            MOV A,Second
                            CJNE A,#60,NEXT
                           LJMP START
DELY1S:             MOV R5,#100
D2:                      MOV R6,#20
D1:                     MOV R7,#248
                            DJNZ R7,$
                            DJNZ R6,D1
                           DJNZ R5,D2
                            RET
TABLE:              DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
                            END
7.  C語言源程序
#include
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,
                            0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char Second;
void delay1s(void)
{
  unsigned char i,j,k;
  for(k=100;k>0;k--)
  for(i=20;i>0;i--)
  for(j=248;j>0;j--);
}
void main(void)
{
  Second=0;
  P0=table[Second/10];
  P2=table[Second%10];
  while(1)
    {
      delay1s();
      Second++;
      if(Second==60)
        {
          Second=0;
        }
      P0=table[Second/10];
      P2=table[Second%10];
    }
}
 

◆相關文章◆
◆ 編輯推薦 ◆
用戶:
更多評論
您要為您所發的言論的后果負責,故請各位遵紀守法并注意語言文明。60個字以內
留言:
驗證碼:
 
 
 

免責聲明:
●本站所有內容均來自網絡,以學習為目的,如果侵犯了您的利益,請來信告知,立即刪除,站長郵件為"diy+dzdiy.com",請將"+"變更為"@"
●電子制作存在風險,請注意人身安全,如果您在根據本站電路進行制作過程中發生傷害,本站不負任何責任。

版權所有:www.dunshaughlingaa.com © 2001-2019 本站信息產業部備案: 粵ICP備05114582號

环球体彩