• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 匯編電子鐘的設(shè)計(jì)

    匯編電子鐘的設(shè)計(jì)

    作者: 時(shí)間:2012-09-17 來(lái)源:網(wǎng)絡(luò) 收藏

    8.jpg寫(xiě)在前面: ­
    前天晚上斷網(wǎng)之后閑來(lái)無(wú)事忽然心血來(lái)潮想起和誰(shuí)說(shuō)過(guò)以我現(xiàn)在的水平做個(gè)時(shí)鐘沒(méi)有什么問(wèn)題,就準(zhǔn)備將它實(shí)現(xiàn)了。借用老師的學(xué)習(xí)板子,一直搞到凌晨2點(diǎn)做出了一個(gè)24小時(shí)的計(jì)數(shù)器顯示,因?yàn)闆](méi)有學(xué)過(guò)按鍵的使用方法,昨天實(shí)驗(yàn)課下課后問(wèn)了老師,她給出了查詢方式。昨晚搞了下,可以置數(shù),但是不能實(shí)現(xiàn)0~60范圍加,只能0~99加。今天上午在老師的指導(dǎo)下,終于可以了,總算沒(méi)有食言啊。呵呵,下面貼出程序了。
    先來(lái)個(gè)效果圖:

    本文引用地址:http://www.czjhyjcfj.com/article/170853.htm


    mini_second equ 30h ;設(shè)置0.05秒、秒、分、時(shí)的地址 ­

    second equ 31h ­

    minute equ 32h ­

    clock equ 33h ­

    k1 equ p3.2 ;設(shè)置按鍵地址,為外部中斷口int0和int1 ­

    k2 equ p3.3 ­

    ­

    org 0000h ­

    ljmp start ­

    org 000bh ­

    ljmp t0_x ;使用中斷計(jì)時(shí) ­

    org 0050h ­

    start: mov mini_second,#00h ;清零 ­

    mov second,#00h ­

    mov minute,#00h ­

    mov clock,#00h ­

    mov tmod,#01h ;置工作方式1,開(kāi)定時(shí)器 ­

    mov th0,#3ch ­

    mov tl0,#0b0h ­

    setb ea ­

    setb et0 ­

    setb tr0 ­

    start1: lcall show_led ;主程序跳轉(zhuǎn)程序顯示 ­

    lcall key_d ;置數(shù)程序 ­

    ljmp start1 ;一直循環(huán)顯示 ­

    t0_x: ­

    push acc ;保護(hù)現(xiàn)場(chǎng) ­

    push psw ­

    mov th0,#3ch ;置初值,這個(gè)不是很準(zhǔn)確, ­

    mov tl0,#0b4h ;估計(jì)一分鐘慢個(gè)2~3秒 ­

    inc mini_second ­

    mov a,mini_second ­

    cjne a,#20,ret0 ;20次為1秒,沒(méi)有20次均跳出中斷重新跳 ­

    mov mini_second, #00h ­

    mov a,second ­

    add a,#01h ­

    da a ­

    mov second,a ­

    cjne a,#60h,ret0 ;1秒后出循環(huán),每秒后秒清零,跳到分計(jì)時(shí)加1 ­

    mov second,#00h ­

    mov a,minute ­

    add a,#01h ;分同秒 ­

    da a ­

    mov minute,a ­

    cjne a,#60h,ret0 ­

    mov minute,#00h ­

    mov a,clock ­

    add a,#01h ­

    da a ­

    mov clock,a ­

    cjne a,#24h,ret0 ­

    mov clock,#00h ­

    ret0: pop psw ;結(jié)束保護(hù),跳出 ­

    pop acc ­

    reti ­

    nop ­

    nop ­

    nop ­

    ;======================================顯示子程序 ­

    show_led: ­

    mov a,second ;個(gè)位秒顯示 ­

    anl a,#0fh ­

    mov 40h,a ­

    clr p1.5 ;片選數(shù)碼管 ­

    clr p1.6 ­

    setb p1.7 ­

    mov a,40h ­

    lcall led_x ­

    lcall delay ­

    mov a,second ;十位秒顯示 ­

    anl a,#0f0h ­

    swap a ­

    mov 41h,a ­

    setb p1.5 ­

    clr p1.6 ­

    setb p1.7 ­

    mov a,41h ­

    lcall led_x ­

    lcall delay ­

    ­

    mov a,minute ;個(gè)位分顯示 ­

    anl a,#0fh ­

    mov 42h,a ­

    setb p1.5 ­

    setb p1.6 ­

    setb p1.7 ­

    mov a,42h ­

    lcall led_x ­

    lcall delay ­

    mov a,minute ;十位分顯示 ­

    anl a,#0f0h ­

    swap a ­

    mov 43h,a ­

    clr p1.5 ­

    clr p1.6 ­

    clr p1.7 ­

    mov a,43h ­

    lcall led_x ­

    lcall delay ­

    ­

    mov a,clock ;個(gè)位時(shí)顯示 ­

    anl a,#0fh ­

    mov 44h,a ­

    clr p1.5 ­

    setb p1.6 ­

    clr p1.7 ­

    mov a,44h ­

    lcall led_x ­

    lcall delay ­

    mov a,clock ;十位時(shí)顯示 ­

    anl a,#0f0h ­

    swap a ­

    mov 45h,a ­

    setb p1.5 ­

    setb p1.6 ­

    clr p1.7 ­

    mov a,45h ­

    lcall led_x ­

    lcall delay ­

    ret ­

    ­

    led_x: mov dptr,#led_data ­

    movc a,@a+dptr ­

    mov p0,a ­

    ret ­

    ;====================================延遲子程序 ­

    delay: mov r7,#10 ­

    de1: mov r6,#100 ;延時(shí)1ms多一點(diǎn),因?yàn)榫д駷?1.0592MHZ ­

    djnz r6,$ ­

    djnz r7,de1 ­

    ret ­

    ;===================================數(shù)碼管的段選碼 ­

    led_data: db 0c0h,0f9h,0a4h,0b0h,099h,92h,82h,0f8h,80h,90h ­

    ;=====================================置數(shù)子程序 ­

    key_d: jnb k1,key1 ­

    jnb k2,key2 ­

    ret ­

    key1: mov a,minute ;查詢方式 ————> 分位置數(shù) ­

    clr c ;清零進(jìn)位,防止干擾da和cjne指令的操作 ­

    inc a ;累加器自加一 ,此為加法置數(shù) ­

    da a ;十進(jìn)制處理 ­

    cjne a, #60h, k_01 ;判斷是否為60,為60清零,跳出 ­

    mov a,#00h ­

    k_01: mov minute,a ­

    jnb k1,$ ­

    ret ­

    ­

    key2: mov a,clock ;時(shí)位 置數(shù)同上 ­

    clr c ­

    inc a ­

    da a ­

    cjne a, #24h,k_11 ­

    mov a,#00h ­

    k_11: mov clock,a ­

    jnb k2,$ ­

    ret ­
    本程序如有雷同,純屬不可能 ?

    我的不夠成熟或稱之為幼稚的編程,鄭文老師的獨(dú)特學(xué)習(xí)板子(顯示數(shù)碼管是p0口,片選竟然是用p1口3個(gè)I/O口接138,——!這個(gè)獨(dú)特焊接方式讓我程序?qū)懙眠@么長(zhǎng)),鄭子含老師對(duì)我置數(shù)程序的修改,才出來(lái)的程序,雖然不是什么成功,至少是一個(gè)開(kāi)始,我會(huì)繼續(xù)瘋下去的。這個(gè)時(shí)鐘的弊端挺多的,比如置數(shù)的時(shí)候,會(huì)有閃屏現(xiàn)象,程序我會(huì)再改進(jìn)的。 ?

    后記:對(duì)于院系電子競(jìng)賽我的失敗我得向我的組員道歉,雖然我知道那些所謂成功的幾組也比我們好不到哪里去(看過(guò)答辯了),但是我會(huì)繼續(xù)我們的課題,加油吧 ?

    編譯工具:wave6000 ?

    燒制工具:stc-isp(話說(shuō)國(guó)產(chǎn)的stc公司要統(tǒng)一全球51市場(chǎng),呵呵) 、RS232串口



    關(guān)鍵詞: 設(shè)計(jì) 電子鐘 匯編

    評(píng)論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 全南县| 姜堰市| 理塘县| 福建省| 漳浦县| 隆安县| 安平县| 文成县| 文登市| 油尖旺区| 柳江县| 平远县| 清河县| 河南省| 增城市| 宝兴县| 尚义县| 大连市| 通州市| 鄂伦春自治旗| 枣阳市| 长沙县| 讷河市| 嵩明县| 岳西县| 北海市| 探索| 祁东县| 宾川县| 外汇| 清原| 包头市| 富源县| 长宁县| 柯坪县| 介休市| 阿巴嘎旗| 西宁市| 德安县| 上栗县| 通辽市|