機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
用51單片機(jī)做的拉幕式數(shù)碼顯示課程設(shè)計(jì)
用51單片機(jī)做的拉幕式數(shù)碼顯示課程設(shè)計(jì)
 更新時(shí)間:2010-1-11 16:39:30  點(diǎn)擊數(shù):0
【字體: 字體顏色

1.  實(shí)驗(yàn)任務(wù) 


用AT89S51單片機(jī)的P0.0/AD0-P0.7/AD7端口接數(shù)碼管的a-h(huán)端,8位數(shù)碼管的S1-S8通過(guò)74LS138譯碼器的Y0-Y7來(lái)控制選通每個(gè)數(shù)碼管的位選端。AT89S51單片機(jī)的P1.0-P1.2控制74LS138的A,B,C端子。在8位數(shù)碼管上從右向左循環(huán)顯示“12345678”。能夠比較平滑地看到拉幕的效果。


2. 電路原理圖

 

 


3. 系統(tǒng)板上硬件連線


(1.       把“單片機(jī)系統(tǒng)”區(qū)域中的P0.0/AD0-P0.7/AD7用8芯排線連接到“動(dòng)態(tài)數(shù)碼顯示”區(qū)域中的a-h(huán)端口上;


(2.       把“三八譯碼模塊”區(qū)域中的Y0-Y7用8芯排線連接到“動(dòng)態(tài)數(shù)碼顯示”區(qū)域中的S1-S8端口上;


(3.       把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0-P1.2端口用3根導(dǎo)線連接到“三八譯碼模塊”區(qū)域中的A、B、C“端口上;


4. 程序設(shè)計(jì)方法


動(dòng)態(tài)數(shù)碼顯示技術(shù):如何進(jìn)行動(dòng)態(tài)掃描,由于一次只能讓一個(gè)數(shù)碼管顯示,因此,要顯示8位的數(shù)據(jù),必須經(jīng)過(guò)讓數(shù)碼管一個(gè)一個(gè)輪流顯示才可以,同時(shí)每個(gè)數(shù)碼管顯示的時(shí)間大約在1ms到4ms之間,所以為了保證正確顯示,我必須每隔1ms,就得刷新一個(gè)數(shù)碼管。而這刷新時(shí)間我們采用單片機(jī)的定時(shí)/計(jì)數(shù)器T0來(lái)控制,每定時(shí)1ms對(duì)數(shù)碼管刷新一次,T0采用方式2。在進(jìn)行數(shù)碼顯示的時(shí)候,要對(duì)顯示單元開(kāi)辟8個(gè)顯示緩沖區(qū),每個(gè)顯示緩沖區(qū)裝有顯示的不同數(shù)據(jù)即可。


5. 程序框圖

  

 主程序框圖

  

 


中斷服務(wù)程序

 


 


6. 匯編源程序


DISPBUF         EQU 30H


DISPCNT         EQU 38H


DISPBIT         EQU 39H


T1CNTA          EQU 3AH


T1CNTB          EQU 3BH


CNT             EQU 3CH


 


                ORG 00H


              LJMP START


                ORG 0BH


                LJMP INT_T0


START:          MOV DISPCNT,#8


                MOV A,#10


                MOV R1,#DISPBUF


LP:             MOV @R1,A


                INC R1


                DJNZ DISPCNT,LP


                MOV DISPBIT,#00H


                MOV T1CNTA,#00H


                MOV T1CNTB,#00H


                MOV CNT,#00H


                MOV TMOD,#01H


                MOV TH0,#(65536-1000) / 256


                MOV TL0,#(65536-1000) MOD 256


                SETB TR0


                SETB ET0


                SETB EA


                SJMP $


 


INT_T0:


                MOV TH0,#(65536-1000) / 256


                MOV TL0,#(65536-1000) MOD 256


                MOV A,DISPBIT


                ADD A,#DISPBUF


                MOV R0,A


                MOV A,@R0


                MOV DPTR,#TABLE


                MOVC A,@A+DPTR


                MOV P0,A


                MOV A,P1


                ANL A,#0F8H


                ADD A,DISPBIT


                MOV P1,A                


                INC DISPBIT


                MOV A,DISPBIT


                CJNE A,#08H,NEXT


                MOV DISPBIT,#00H


NEXT:           INC T1CNTA


                MOV A,T1CNTA


                CJNE A,#50,LL1


                MOV T1CNTA,#00H


                INC T1CNTB


                MOV A,T1CNTB


                CJNE A,#8,LL1


                MOV T1CNTB,#00H


                INC CNT


                MOV A,CNT


                CJNE A,#9,LLX


                MOV CNT,#00H


                MOV A,CNT


LLX:            CJNE A,#01H,NEX1


                MOV 30H,#8


LL1:            LJMP DONE


NEX1:           CJNE A,#02H,NEX2


                MOV 31H,#8


                MOV 30H,#8


                LJMP DONE


NEX2:           CJNE A,#03H,NEX3


                MOV 32H,#8


                MOV 31H,#8


                MOV 30H,#8


                LJMP DONE


NEX3:           CJNE A,#04H,NEX4


                MOV 33H,#8


                MOV 32H,#8


                MOV 31H,#8


                MOV 30H,#8


                LJMP DONE


NEX4:           CJNE A,#05H,NEX5


                MOV 34H,#8


                MOV 33H,#8


                MOV 32H,#8


                MOV 31H,#8


                MOV 30H,#8


                LJMP DONE


NEX5:           CJNE A,#06H,NEX6


                MOV 35H,#8


                MOV 34H,#8


                MOV 33H,#8


                MOV 32H,#8


                MOV 31H,#8


                MOV 30H,#8


                LJMP DONE


NEX6:           CJNE A,#07H,NEX7


                MOV 36H,#8


                MOV 35H,#8


                MOV 34H,#8


                MOV 33H,#8


                MOV 32H,#8


                MOV 31H,#8


                MOV 30H,#8


                LJMP DONE


NEX7:           CJNE A,#08H,NEX8


                MOV 37H,#8


                MOV 36H,#8


                MOV 35H,#8


                MOV 34H,#8


                MOV 33H,#8


                MOV 32H,#8


                MOV 31H,#8


                MOV 30H,#8


                LJMP DONE


NEX8:           CJNE A,#00H,DONE


                MOV 37H,#10


                MOV 36H,#10


                MOV 35H,#10


                MOV 34H,#10


                MOV 33H,#10


                MOV 32H,#10


                MOV 31H,#10


                MOV 30H,#10


LL:             LJMP DONE


DONE:           RETI


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


                END


7. C語(yǔ)言源程序


#include <AT89X51.H>


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


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


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


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


unsigned char dispbitcode[]={0xf8,0xf9,0xfa,0xfb,


                             0xfc,0xfd,0xfe,0xff};


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


unsigned char dispbitcnt;


unsigned int t02scnt;


unsigned char t5mscnt;


unsigned char u;


unsigned char i;


 


void main(void)


{


  TMOD=0x02;


  TH0=0x06;


  TL0=0x06;


  TR0=1;


  ET0=1;


  EA=1;


  while(1);


}


 


void t0(void) interrupt 1 using 0


{


  t5mscnt++;


  if(t5mscnt==4)


    {


      t5mscnt=0;


      P0=dispcode[dispbuf[dispbitcnt]];


      P1=dispbitcode[dispbitcnt];


      dispbitcnt++;


      if(dispbitcnt==8)


        {


          dispbitcnt=0;


        }


    }


  t02scnt++;


  if(t02scnt==1600)


    {


      t02scnt=0;


      u++;


      if(u==9)


        {


          u=0;


        }


      for(i=0;i<8;i++)


        {


          dispbuf[i]=16;


        }


      for(i=0;i<u;i++)


        {


          dispbuf[i]=8;


        }


    }


}

 

  • 上一篇: 用AT89S51單片機(jī)來(lái)制作的手動(dòng)計(jì)數(shù)器
  • 下一篇: 沒(méi)有了
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1