在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用單片機設計打鈴器的程序

Wildesbeast ? 來源:單片機教程網 ? 作者:單片機教程網 ? 2020-06-21 11:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

硬件結構: PA0-5對應6個LED數顯管的位 ,PC0-7對應各LED數顯管的段 ,PB4-7為鍵盤。

軟件描述: 上電后,時鐘從00.00.00(時/分/秒)自動走時,在走時狀態時 , 按PB4(設定;鍵)超過3秒可循環選擇調整時間/工作參數 ,接著按PB5以確定選擇的操作 ,進入調整操作后 ,;按PB5選擇欲調整參數,按PB6(增加鍵)完成調整參數操作 。按PB7,進入時控運行,PB1亮,;再按PB7停止時控運行,回顯走時。在定時到時,PB0點亮。

;*************************************************************************************

.device AT90S8515

.include “8515def.inc”

.equ DISBUF = $0060 ;顯示緩沖區起始地址

.equ TIMEDIS = $0066 ;時鐘時分秒存放單元

.equ XSDBZ = $0073 ;小數點位標志

.equ DISTBL = $0f00 ;顯示字符編碼表起始地址

.equ TIMECTR = $0010 ;32段時間控制表首址(EEPRON)

.equ TIMECBZ = $0080 ;控制時間到標志

.cseg

.org $0000

rjmp RESET

.org $0007

rjmp TIM0_OVF

;****單片機打鈴器設計主程序***************************************************************************

.def cntms =r9

.def hour =r10

.def minute =r11

.def second =r12

.def EEdwr =r16

.def EEawr =r17

.def EEawrh =r18

.def EEdrd =r16

.def EEard =r17

.def EEardh =r18

.def temp =r20

.def temp1 =r21

.def temp2 =r22

.def temp3 =r23

.def temp4 =r24

.def TIM0INT =r19

.org $0020

RESET: ldi temp,low(ramend) ;設置堆棧指針

out spl,temp

ldi temp,high(ramend)

out sph,temp

ldi temp,0b11111111 ;設置各口線輸入輸出狀態

out ddra,temp

ldi temp,0b00000011

out ddrb,temp

ldi temp,0b11111111

out ddrc,temp

ldi zl,TIMECBZ

clr zh

clr temp

st y,temp

clr r9 ;清各工作寄存器

clr r10

clr r11

clr r12

clr r13

clr r14

clr r15

clr r16

clr r17

clr r18

clr r19

clr r25

ldi temp,$5

out tccr0,temp ;T0設置ck/1024分頻

ldi temp,256-195

out tcnt0,temp ;裝T0時間常數

res1: ldi temp,$02 ;允許T0中斷,并計時

out timsk,temp

sei ;開中斷

res2: clr r6

clr r7

sbi PORTb,1

sbi PORTB,0

res3: ldi temp,$af

res4: rcall colodis ;時鐘走時顯示

dec temp

brne res4

sbis pinb,7 ;鍵掃描

rjmp PB7M

sbis pinb,4

rjmp BP4M ;去參數設置

rjmp res3

;****《系統功能程序》

.org $0080 ;定義系統功能程序存放區首址

;****32點打鈴器工作程序*************************************************************************

PB7M: cbi PORTb,1 ;置運行指示燈亮

clr r25

clr r7

GNCX11:ldi r17,TIMECTR ;首個控制點EEPRON地址

clr r18

lsl r25

lsl r25

add r17,r25 ;取得EEPRON中控制點地址(Aj=A0+4*j),A=(r17),j=(r25)

lsr r25

lsr r25

rcall EERead

cpi r16,0

breq GNCX12 ;r16=(r17)=0為“ON”

inc r25

cpi r25,31

brmi GNCX11

rjmp GNCX16

GNCX12:inc r17

rcall EERead

cp r16,r10

brne GNCX13

inc r17

rcall EERead

cp r16,r11

brne GNCX14

inc r17

rcall EERead

mov r7,r16

inc r7

cbi PORTb,0

rjmp GNCX15

GNCX13:dec r17

inc r25

rjmp GNCX11

GNCX14:dec r17

dec r17

inc r25

rjmp GNCX11

GNCX15:cpi TIM0INT,1

brne GNCX17

clr TIM0INT

dec r7

brne GNCX17

clr r7

sbi PORTb,0

rjmp GNCX16

GNCX17:rcall colodis

sbic pinb,7

rjmp GNCX15

rjmp res2

GNCX16:ldi temp,$5f

GNCX18:rcall colodis

dec temp

brne GNCX18

sbic pinb,7

rjmp GNCX11

rjmp res2

;****單片機打鈴器參數設置

BP4M: ldi temp3,$ff

ldi temp4,$f

BP4M1: nop

rcall colodis

sbic pinb,4

rjmp res1

dec temp3 ;PB4有按下

brne BP4M1

inc temp3

dec temp4

brne BP4M1

ldi temp3,$ff ;超3秒進入

ldi temp4,$f

BP4M2: clr yh

ldi yl,low(DISBUF) ;設置顯示cloc.

ldi temp,25

st y+,temp

st y+,temp

ldi temp,18

st y+,temp

ldi temp,19

st y+,temp

ldi temp,20

st y+,temp

ldi temp,18

st y,temp

ldi zl,low(XSDBZ)

clr zh

ldi temp,0b00100000 ;b0-5對應LED自左到右1-6位的小數點,置“1”在該位置小數點。

st z,temp

rcall display

sbis pinb,5

rjmp cloc ;進入時間設置

dec temp3

brne BP4M2

inc temp3

dec temp4

brne BP4M2

BP4M3: ldi temp3,$ff

ldi temp4,$f

BP4M4: clr yh

ldi yl,low(DISBUF) ;設置顯示labor.

ldi temp,25

st y+,temp

ldi temp,19

st y+,temp

ldi temp,10

st y+,temp

ldi temp,11

st y+,temp

ldi temp,20

st y+,temp

ldi temp,22

st y,temp

ldi zl,low(XSDBZ)

clr zh

ldi temp,0b00100000 ;b0-5對應LED自左到右1-6位的小數點,置“1”在該位置小數點。

st z,temp

rcall display

sbis pinb,5

rjmp GNCS1 ;進入工作參數設置

dec temp3

brne BP4M4

inc temp3

dec temp4

brne BP4M4

sbic pinb,4

rjmp BP4M

rjmp res1

;****時鐘調整******************************************************************

cloc: clr temp

out timsk,temp ;不許T0中斷

cli ;關中斷

rcall colodis

mov temp,r10

clr temp4

ldi temp1,20

ldi temp3,$80

cloc3: ldi yl,low(DISBUF)

add yl,temp4

sbic pinb,5 ;選擇時分秒

rjmp cloc4

dec temp1

brne cloc4

ldi temp1,80

inc temp4

inc temp4

add yl,temp4

cpi yl,$68

brmi cloc4

clr temp4

ldi yl,low(DISBUF)

cloc4: nop

sbic pinb,6 ;調整時分秒值

rjmp cloc8

dec temp3

brne cloc8

ldi temp3,$20

cloc5: cpi yl,$60

brne cloc6

inc r10

mov temp,r10

cpi temp,24

brmi cloc8

clr temp

clr r10

cloc6: cpi yl,$62

brne cloc7

inc r11

mov temp,r11

cpi temp,60

brmi cloc8

clr temp

clr r11

cloc7: cpi yl,$64

brne cloc8

inc r12

mov temp,r12

cpi temp,60

brmi cloc8

clr temp

clr r12

cloc8: cpi yl,$60

brne cloc9

ldi zl,low(XSDBZ)

clr zh

ldi temp,0b00000010 ;b0-5對應LED自左到右1-6位的小數點,置“1”在該位置小數點。

st z,temp

mov r16,r10

rjmp cloc11

cloc9: cpi yl,$62

brne cloc10

ldi zl,low(XSDBZ)

clr zh

ldi temp,0b00001000 ;b0-5對應LED自左到右1-6位的小數點,置“1”在該位置小數點。

st z,temp

mov r16,r11

cloc10: cpi yl,$64

brne cloc11

ldi zl,low(XSDBZ)

clr zh

ldi temp,0b00100000 ;b0-5對應LED自左到右1-6位的小數點,置“1”在該位置小數點。

st z,temp

mov r16,r12

cloc11: rcall bto

st y+,r3

st y,r4

rcall display

sbis pinb,4 ;退出

rjmp cloc12

rjmp cloc3

cloc12: ldi temp,$02

out timsk,temp ;允許T0中斷

sei ;開中斷

rjmp res1

;****32點打鈴器工作參數調整**********************************************************

GNCS1: clr r25 ;首個控制點

clr r22 ;r22為0顯示開關頁面,為1顯示h-xx頁面,為2顯示m-xx頁面,為3顯示c-xx頁面

ldi zl,low(XSDBZ)

clr zh

ldi r19,0b00000010

st z,r19

gncs: ldi r17,TIMECTR ;首個控制點EEPRON地址

clr r18

ldi yl,low(DISBUF) ;設置顯示緩沖區起始地址

clr yh

lsl r25

lsl r25

add r17,r25 ;取得EEPRON中控制點地址(Aj=A0+4*j),A=(r17),j=(r25)

lsr r25

lsr r25

mov r16,r25

rcall bto

st y+,r3

st y+,r4

cpi r22,0

breq kgymxs

cpi r22,1

breq hymxs

cpi r22,2

breq mymxs

cpi r22,3

breq cymxs

clr r22

rjmp gncs

kgymxs: rcall EERead

cpi r16,0

brne offxs

ldi r23,27 ;顯示xx.--on

st y+,r23

st y+,r23

ldi r23,20

st y+,r23

ldi r23,26

st y,r23

rjmp gzcsxs

offxs: ldi r23,27 ;顯示xx.-off

st y+,r23

ldi r23,20

st y+,r23

ldi r23,15

st y+,r23

st y,r23

rjmp gzcsxs

hymxs: ldi r23,28 ;顯示xx.h-aa

st y+,r23

ldi r23,27

st y+,r23

inc r17

rcall EERead

rcall bto

st y+,r3

st y+,r4

dec r17

rjmp gzcsxs

mymxs: ldi r23,26 ;顯示xx.n-aa

st y+,r23

ldi r23,27

st y+,r23

inc r17

inc r17

rcall EERead

rcall bto

st y+,r3

st y+,r4

dec r17

dec r17

rjmp gzcsxs

cymxs: ldi r23,18 ;顯示xx.c-aa

st y+,r23

ldi r23,27

st y+,r23

inc r17

inc r17

inc r17

rcall EERead

rcall bto

st y+,r3

st y+,r4

dec r17

dec r17

dec r17

gzcsxs: ldi r23,40

ldi r24,40

gzcsxs1: rcall display

sbis pinb,5 ;翻頁

rjmp fycz ;有,去翻頁

sbis pinb,6 ;變值

rjmp bzcz ;有,去變值

sbis pinb,4 ;復位

rjmp res1 ;有,去復位

rjmp gncs

fycz: dec r23

brne gzcsxs1

rcall EERead

cpi r16,0

brne fycz1

inc r22

cpi r22,4

brmi fycz2

clr r22

fycz1: inc r25

cpi r25,32

brmi fycz2

clr r25

fycz2: rjmp gncs

bzcz: dec r24

brne gzcsxs1

cpi r22,0

brne bzcz2

bzcz1: rcall EERead

cpi r16,0

breq bzcz11

clr r16

rjmp bzcz12

bzcz11: ldi r16,1

bzcz12: rcall EEWrite

rjmp gncs

bzcz2: add r17,r22

rcall EERead

inc r16

cpi r22,1

breq bzcz21

cpi r16,60

brmi bzcz22

clr r16

rjmp bzcz22

bzcz21: cpi r16,24

brmi bzcz22

clr r16

bzcz22: rcall EEWrite

sub r17,r22

rjmp gncs

;****顯示子程序***********************************************************************

;*

;* 功能:將SRAM顯示緩沖區存放的數送數碼管顯示

;* 入口:DISBUF---顯示緩沖區起始地址(SRAM)

;* Y--顯示緩沖區的指針

;* DISTBL---顯示字符編碼表起始地址(FLASH)

;* LEDSXW---LED閃顯寄存器位設置

;* XSDBZ----小數點設置

;* 出口:Y--顯示緩沖區的指針,指向高地址

;*

;****程序段

display: nop

push temp

push temp1

push temp2

push temp3

push temp4

push r6

ldi temp1,6

ldi temp3,0b11011111

ldi yl,low(DISBUF)

ldi yh,high(DISBUF)

ldi xl,low(XSDBZ)

clr xh

ld r6,x

disp1: ld temp,y+

ldi zl,low(DISTBL)

ldi zh,high(DISTBL)

add zl,temp

lsl zl

rol zh

lpm

lsr r6

brcc disp2

ldi temp4,0b10000000

or r0,temp4

disp2: out PORTC,r0

in temp2,PORTA

ori temp2,0b00111111

and temp2,temp3

out PORTA,temp2

sec

ror temp3

rcall delay

in temp2,PORTA

ori temp2,0b00111111

out PORTA,temp2 ;關顯示

dec temp1

brne disp1

pop r6

pop temp4

pop temp3

pop temp2

pop temp1

pop temp

ret

;****時鐘顯示子程序*********************************************************************

colodis: push temp

ldi yl,low(DISBUF) ;設置顯示緩沖區起始地址

clr yh

ldi xl,low(TIMEDIS) ;設置時鐘時分秒存放單元

clr xh

ldi zl,low(XSDBZ)

clr zh

ldi temp,0b00001010 ;b0-5對應LED自左到右1-6位的小數點,置“1”在該位置小數點。

st z,temp

rcall ram6ram

rcall display

pop temp

ret

;****延時子程序**********************************************************************

delay: nop ;延時子程序

push temp2

push temp1

ldi temp2,$ff

lp1: ldi temp1,$f

lp2: dec temp1

brne lp2

dec temp2

brne lp1

pop temp1

pop temp2

ret ;子程序返回

;****寫EEPRON子程序*********************************************************************

;*

;*功能:將EEDWR(r16)內容寫入以EEAWR(r18:r17)內容為地址的EEPRON單元內。

;*

;****程序段

EEWrite:sbic EECR,EEWE

rjmp EEWrite

out EEARH,EEawrh

out EEARL,EEawr

out EEDR,EEdwr

sbi EECR,EEMWE

sbi EECR,EEWE

ret

;****讀EEPRON子程序*********************************************************************

;*

;*功能:從以EEARD(r18:r17)內容為地址的EEPRON單元讀區內容送EEDRD(r16)寄存器。

;*

;****程序段

EERead: sbic EECR,EEWE

rjmp EERead

out EEARH,EEardh

out EEARL,EEard

sbi EECR,EERE

sbi EECR,EERE

in EEdrd,EEDR

ret

;****6字節SRAM內容傳送子程序************************************************************

;*

;* 功能:將SRAM內連續6字節由BLOCK1傳送到BLOCK2

;* x---欲傳送6字節起始地址(SRAM)指針

;* y---欲放置6字節起始地址(SRAM)指針

;*

;****程序段

ram6ram:push temp1

push temp2

ldi temp1,$06

ramd1: ld temp2,x+

st y+,temp2

dec temp1

brne ramd1

pop temp2

pop temp1

ret

;****8位二進制數轉3位BCD數子程序********************************************************

;*

;*功能:把一個8位無符號二進制數轉換為3位BCD碼數。

;*入口:r16---內裝8位無符號二進制數。

;*出口:BCD碼放在r2:r3:r4,r2存放百位。

;*

;****程序段

bt push r16

clr r2

clr r3

clr r4

rjmp bto2

bto1: inc r2

bto2: subi r16,100

brpl bto1

ldi temp,100

add r16,temp

rjmp bto4

bto3: inc r3

bto4: subi r16,10

brpl bto3

ldi temp,10

add r16,temp

mov r4,r16

pop r16

ret

;****時鐘0中斷服務程序******************************************************

.org $0bf0

TIM0_OVF: push temp

ldi temp,256-195

out tcnt0,temp ;重裝T0時間常數

inc cntms

mov temp,cntms

cpi temp,40

brne timecunt

clr cntms

inc second

mov temp,second

cpi temp,60

brne timecunt

clr second

ldi TIM0INT,1

inc minute

mov temp,minute

cpi temp,60

brne timecunt

clr minute

inc hour

mov temp,hour

cpi temp,24

brne timecunt

clr hour

timecunt: ldi xl, low(TIMEDIS)

clr xh

mov r16,hour

rcall bto

st x+,r3

st x+,r4

mov r16,minute

rcall bto

st x+,r3

st x+,r4

mov r16,second

rcall bto

st x+,r3

st x+,r4

pop temp

reti

;****字形表*****************************************************************

.cseg

.org DISTBL

.dw 0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f

.dw 0x0077,0x007c,0x0039,0x005e,0x0079,0x0071,0x0073,0x0076,0x0058,0x0038

.dw 0x005c,0x0067,0x0050,0x006e,0x0078,0x0000,0x0054,0x0040,0x0074,0x0000

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • led
    led
    +關注

    關注

    242

    文章

    23820

    瀏覽量

    673372
  • 單片機
    +關注

    關注

    6067

    文章

    44970

    瀏覽量

    649791
  • 寄存器
    +關注

    關注

    31

    文章

    5433

    瀏覽量

    124238
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    STC單片機范例程序

    電子發燒友網站提供《STC單片機范例程序.zip》資料免費下載
    發表于 06-04 16:27 ?4次下載

    2.4寸TFT彩屏配套測試程序-51單片機

    如題,2.4寸TFT彩屏配套測試程序-51單片機
    發表于 06-04 16:26 ?0次下載

    一個基于Cortex的單片機專為USB耳機設備設計的USBCodec芯片

    USBCodec芯片 - CJC6811A是一款基于Cortex的單片機,專為USB耳機設備而設計。它集成了一個32位的RISC CPU和16KB的SRAM、USB、UART、IIC、音頻編解碼、GPIO、定時
    的頭像 發表于 01-15 09:41 ?562次閱讀
    一個基于Cortex的<b class='flag-5'>單片機</b>專為USB耳<b class='flag-5'>機設</b>備設計的USBCodec芯片

    單片機怎么寫入程序

    單片機(Microcontroller Unit,MCU)是一種集成電路芯片,它將計算機的CPU、存儲、輸入/輸出接口等功能集成在一個芯片上。單片機廣泛應用于嵌入式系統和物聯網設備中。編寫
    的頭像 發表于 10-21 11:21 ?2356次閱讀

    8位單片機為何不會被高端單片機取代?

    的控制選擇。 (1)架構:8位單片機通常采用馮諾依曼架構,其中程序和數據存儲共享一條公共總線。它們還有一個哈佛架構,程序和數據存儲
    發表于 09-24 16:51

    用MSP430FR235x單片機設計雙射線煙霧探測模擬前端

    電子發燒友網站提供《用MSP430FR235x單片機設計雙射線煙霧探測模擬前端.pdf》資料免費下載
    發表于 09-14 10:53 ?0次下載
    用MSP430FR235x<b class='flag-5'>單片機設</b>計雙射線煙霧探測<b class='flag-5'>器</b>模擬前端

    keil可以讀出單片機程序

    Keil是一款廣泛應用于單片機程序開發的軟件,它提供了包括C編譯、宏匯編、連接、庫管理和一個功能強大的仿真調試等在內的完整開發方案。然
    的頭像 發表于 09-02 10:32 ?2117次閱讀

    單片機燒錄程序用什么軟件

    單片機燒錄程序單片機開發過程中的一個重要環節,涉及到將編寫好的程序代碼通過燒錄寫入單片機的R
    的頭像 發表于 09-02 10:05 ?3374次閱讀

    單片機燒錄程序可以重新燒嗎

    單片機(Microcontroller Unit, MCU)是一種集成電路芯片,它將計算機的CPU、存儲、輸入/輸出接口等集成在一塊芯片上,用于控制各種電子設備。單片機燒錄程序是指將
    的頭像 發表于 09-02 10:04 ?3080次閱讀

    單片機燒錄程序的線比單片機上的少還能燒錄嗎

    單片機燒錄原理 單片機燒錄是指將編寫好的程序代碼通過一定的方式傳輸到單片機的存儲中,使其能夠按照程序
    的頭像 發表于 09-02 09:54 ?1053次閱讀

    單片機燒錄程序的串口線怎么連接

    單片機開發過程中,燒錄程序是一項重要的工作。而燒錄程序通常需要使用串口線來實現。本文將介紹單片機燒錄程序的串口線連接方法,包括串口線的類型
    的頭像 發表于 09-02 09:50 ?3969次閱讀

    單片機燒錄程序的基本步驟是什么

    單片機燒錄程序單片機開發過程中非常重要的一步,它涉及到將編寫好的程序代碼通過一定的方式傳輸到單片機內部的存儲
    的頭像 發表于 09-02 09:47 ?2702次閱讀

    單片機程序燒錄成功為什么不運行

    燒錄問題 : 確保燒錄過程沒有中斷或錯誤。 檢查燒錄和連接線是否工作正常。 確認燒錄設置(如電壓、波特率等)與單片機兼容。 電源問題 : 檢查單片機是否獲得了正確的電源電壓。 確保
    的頭像 發表于 09-02 09:45 ?4914次閱讀

    stm32單片機燒錄程序會擦除原來的程序

    在STM32單片機燒錄程序的過程中, 通常情況下會擦除原來的程序 ,并將新程序寫入單片機的閃存(Flash)中。這一過程是通過燒錄工具(如S
    的頭像 發表于 09-02 09:42 ?4620次閱讀

    燒錄怎么連接單片機

    型號和開發環境,選擇一個合適的燒錄。例如,如果您使用的是STM32單片機,可以選擇ST-Link燒錄。 安裝驅動程序 在連接燒錄之前,
    的頭像 發表于 08-22 09:25 ?1707次閱讀
    主站蜘蛛池模板: 色婷婷综合和线在线 | 欧美午夜激情影院 | 国产经典一区 | 最近2018年中文字幕大全一 | 7m视频精品凹凸在线播放 | 深爱五月激情 | 99热最新在线| 韩国免费人成在线观看网站 | 色偷偷97| 天天舔天天爽 | 高清色黄毛片一级毛片 | 国产牛仔裤系列在线观看 | 特级aaa毛片 | 经典三级一区二区三区视频 | 午夜一区二区在线观看 | 欧美一级在线观看视频 | 伊人精品网 | 国产日韩欧美一区二区 | 三级黄色短视频 | 一区二区三区高清在线观看 | 六月婷婷综合激情 | 久久狠色噜噜狠狠狠狠97 | 色香视频在线 | 一级片免费观看视频 | 色宅男看片午夜大片免费看 | 五月天六月丁香 | 国产女人水多白浆 | 亚洲一本之道在线观看不卡 | 亚洲国产精品第一页 | 女人69xxx| 欧美色p| 国产综合在线观看 | 永久免费观看黄网站 | www久久久| 亚洲二区在线 | 网站色| 偷偷鲁影院手机在线观看 | 国产三级中文字幕 | 天天天天操 | 久久婷婷国产一区二区三区 | 亚1州区2区三区4区产品 |