色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    文章

    23343

    瀏覽量

    662322
  • 單片機
    +關注

    關注

    6042

    文章

    44617

    瀏覽量

    637485
  • 寄存器
    +關注

    關注

    31

    文章

    5363

    瀏覽量

    120926
收藏 人收藏

    評論

    相關推薦

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

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

    單片機怎么寫入程序

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

    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 ?1192次閱讀

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    燒錄怎么連接單片機

    型號和開發環境,選擇一個合適的燒錄。例如,如果您使用的是STM32單片機,可以選擇ST-Link燒錄。 安裝驅動程序 在連接燒錄之前,
    的頭像 發表于 08-22 09:25 ?924次閱讀

    基于51單片機8路搶答電路圖proteus仿真及程序

    本資源內容概要:? ? ? ?這是基于51單片機8路搶答電路圖proteus仿真及程序設計包含了電路圖源文件(Altiumdesigner軟件打開)、C語言程序源代碼(keil軟件打
    發表于 06-19 14:15 ?1次下載

    基于51單片機16路搶答電路圖及程序元件清單

    本資源內容概要:? ? ? ?這是基于51單片機16路搶答電路圖及程序設計包含了電路圖源文件(Altiumdesigner軟件打開)、C語言程序源代碼(keil軟件打開)、元件清單(
    發表于 06-19 11:38 ?2次下載
    主站蜘蛛池模板: 99精品欧美一区二区三区美图| 性色AV乱码一区二区三区视频| 果冻传媒在线观看资源七夕| 久久久精品日本一区二区三区| 色综合a在线| 亚洲午夜久久久久久久久电影网| 一级做a爰片久久毛片苍井优| 超碰99热在线精品视频| 国产视频成人| 男人到天堂a在538线| 色噜噜2017最新综合| 5g天天影院天天看天天爽| 国产精品青草久久福利不卡| 久青草国产在线视频| 日韩欧美一区二区三区免费看| 亚洲精品无码专区在线播放| 边摸边吃奶玩乳尖视频| 两个人的视频hd全免费| 亚洲色欲色欲www474ee| 国产乱人伦AV麻豆网| 天天槽任我槽免费| 大屁股国产白浆一二区| 欧洲电影巜肉欲丛林| 亚洲深夜在线| 狠狠狠的在啪线香蕉| 同居了嫂子在线观看| 俄罗斯摘花| 色狠狠一区二区| 福利啪啪吧| 日本xxxx裸体xxxx| jizz日本美女| 色WWW永久免费视频首页| 公交车轮C关老师| 色欲精品国产AV久久久| 成人国产在线观看| 人妻插B视频一区二区三区| av淘宝 在线观看| 日韩在线 无码 精品| 国产人妻人伦精品无码.麻豆| 香蕉免费高清完整| 国产免费怕怕免费视频观看 |