日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

警笛声c语言程序,PIC警笛声音的程序

發布時間:2024/9/19 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 警笛声c语言程序,PIC警笛声音的程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介:在這里給大家提供一個PIC警笛聲音的程序。

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

LIST P=16F84A,R=DEC ;定義器件,默認為十進制

;-----------------------------------------------------

__CONFIG B\'11111111110001\';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC

;沒有代碼保護

;看門狗關閉

;上電廷時器開啟

;振蕩器模式為XT

;-----------------------------------------------------

RTCC EQU 01H ;定義各寄存器

PC EQU 02H

STATUS EQU 03H

C EQU 0

RP0 EQU 5

;----------------------

PORTA EQU 05H

TRISA EQU 05H

;-----------------------

SOUNDDELAY1 EQU 10H ;聲音頻率變化計數器,從1.8~3.55KHZ

FRE_COUNT EQU 11H ;同一頻率的重復次數保存地址

FRE_REPEAT EQU 12H

SOUND_TEMP EQU 13H

TEMP EQU 14H ;暫存寄存器

S_LOOP EQU 46 ;93-47=46

S_MAX EQU 93 ;最低頻率1.8K 93*3=280US*2

S_MIN EQU 47 ;最高頻率3.55K 47*3=140*2

S_REPEAT EQU 4 ;同一頻率重復次數

;--------------------

ORG 0000H

MAIN

CLRF PORTA ;初始化IO口

BSF STATUS,RP0 ;設置數據寄存器體1

MOVLW 0000000B

MOVWF TRISA ;設置RA端口全部為輸出

BCF STATUS,RP0 ;恢復數據寄存器體0

LOOP

CALL SOUND200MS ;調用報警200MS子程序

GOTO LOOP ;反復循環報警

;-------------------------------

SOUND200MS

MOVLW S_LOOP

MOVWF FRE_COUNT ;46=93-47 最低頻率的計數減去最高頻率的計數等于頻率變化的次數

SOUND_LH_LP

MOVLW S_REPEAT ;同一頻率重復次數送FRE_REPEAT

MOVWF FRE_REPEAT

MOVFW FRE_COUNT

ADDLW S_MIN ;計數值加最小值

MOVWF TEMP

REPEAT0_LP

MOVFW TEMP

BSF PORTA,0

CALL SOUNDDELAY0 ;廷時W*3US

BCF PORTA,0

MOVFW TEMP

CALL SOUNDDELAY0

DECFSZ FRE_REPEAT,1 ;每四次減頻率計數一次

GOTO REPEAT0_LP

DECFSZ FRE_COUNT,1

GOTO SOUND_LH_LP

SOUND_HL

MOVLW S_LOOP

MOVWF FRE_COUNT ;46=93-47

SOUND_HL_LP

MOVLW S_REPEAT ;同一頻率重復次數送FRE_REPEAT

MOVWF FRE_REPEAT

MOVFW FRE_COUNT

SUBLW S_MAX ;最大值減計數值

MOVWF TEMP

REPEAT1_LP

MOVFW TEMP

BSF PORTA,0

CALL SOUNDDELAY0 ;廷時W*3US

BCF PORTA,0

MOVFW TEMP

CALL SOUNDDELAY0

DECFSZ FRE_REPEAT,1;四次減頻率計數一次

GOTO REPEAT1_LP

DECFSZ FRE_COUNT,1

GOTO SOUND_HL_LP

SOUND_END

RETLW 0

;------------------------------

SOUNDDELAY0

MOVWF SOUNDDELAY1 ;廷時W*3US+1US

SOUNDDELAYUS_1

DECFSZ SOUNDDELAY1,1

GOTO SOUNDDELAYUS_1

RETLW 0

;------------------------

END

-----------------------------------------------------------------------------

;ST套件產生450hz低音

;本實例的目的是讓大家學會用單片機產生聲音的方法,學會計算程序所用時間

;本實例的功能是能PIC16F84產生低音,

;450HZ,相當于450HZ的方波信號發生器。

;程序復位后,蜂鳴器開始發音

;燒寫時應注意:配置位已經在程序中寫明,加載HEX文件時會自動加載,燒寫時不用再手動設置配置位。

;實驗時請注意套件跳線選擇;

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

LIST P=16F84A,R=DEC ;定義器件,默認為十進制

;-----------------------------------------------------

__CONFIG B\'11111111110001\';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC

;沒有代碼保護

;看門狗關閉

;上電廷時器開啟

;振蕩器模式為XT

;-----------------------------------------------------

RTCC EQU 01H ;定義各寄存器

PC EQU 02H

STATUS EQU 03H

C EQU 0

RP0 EQU 5

;----------------------

PORTA EQU 05H

TRISA EQU 05H

;-----------------------

SOUNDDELAY1 EQU 10H ;聲音頻率變化計數器,從1.1K~0.5KHZ

;--------------------

ORG 0000H

MAIN

CLRF PORTA ;初始化IO口

BSF STATUS,RP0 ;設置數據寄存器體1

MOVLW 0000000B

MOVWF TRISA ;設置RA端口全部為輸出

BCF STATUS,RP0 ;恢復數據寄存器體0

SOUND

MOVLW 222 ;450HZ反復循環

BSF PORTA,0

CALL SOUNDDELAY0 ;廷時W*5US

BCF PORTA,0

MOVLW 222

CALL SOUNDDELAY0

GOTO SOUND

;------------------------------

SOUNDDELAY0

MOVWF SOUNDDELAY1 ;廷時W*5US+1US

SOUNDDELAYUS_1

NOP

NOP

DECFSZ SOUNDDELAY1,1

GOTO SOUNDDELAYUS_1

RETLW 0

;------------------------

END

-----------------------------------------------------------------------------

;ST套件產生救護音

;本實例的目的是讓大家學會用單片機產生聲音的方法,學會計算程序所用時間

;本實例的功能是能PIC16F84產生救護音,頻率分兩個1S第一個

;1S頻率是440HZ,第二個1S頻率是180HZ,反復循環

;程序復位后,蜂鳴器開始報警

;燒寫時應注意:配置位已經在程序中寫明,加載HEX文件時會自動加載,燒寫時不用再手動設置配置位。

;實驗時請注意套件跳線選擇;

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

LIST P=16F84A,R=DEC ;定義器件,默認為十進制

;-----------------------------------------------------

__CONFIG B\'11111111110001\';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC

;沒有代碼保護

;看門狗關閉

;上電廷時器開啟

;振蕩器模式為XT

;-----------------------------------------------------

RTCC EQU 01H ;定義各寄存器

PC EQU 02H

STATUS EQU 03H

C EQU 0

RP0 EQU 5

;----------------------

PORTA EQU 05H

TRISA EQU 05H

;-----------------------

SOUNDDELAY1 EQU 10H ;聲音頻率高低電平廷時計數器

FRE_REPEATH EQU 11H ;同一頻率的重復次數外部循環

FRE_REPEATL EQU 12H ;同一頻率的重復次數內部循環

TEMP EQU 14H ;暫存寄存器

;--------------------

ORG 0000H

MAIN

CLRF PORTA ;初始化IO口

BSF STATUS,RP0 ;設置數據寄存器體1

MOVLW 0000000B

MOVWF TRISA ;設置RA端口全部為輸出

BCF STATUS,RP0 ;恢復數據寄存器體0

LOOP

CALL SOUND2S ;調用報警200MS子程序

GOTO LOOP ;反復循環報警

;-------------------------------

SOUND2S ;先440HZ 1S

MOVLW 189

MOVWF TEMP ;440HZ頻率高低電平廷時值送TEMP 1S/[(189*6)US*2]=440HZ

MOVLW 2 ;同一頻率重復次數外部循環送初值

MOVWF FRE_REPEATH

SOUND2S_1

MOVLW 220

MOVFW FRE_REPEATL ;同一頻率重復次數內部循環送初值220*2=440次,440HZ頻率重復440次即1S

REPEAT0_LP

MOVFW TEMP

BSF PORTA,0

CALL SOUNDDELAY0 ;廷時W*6US 440hz正半周

BCF PORTA,0

MOVFW TEMP

CALL SOUNDDELAY0 ;廷時W*6US 440hz負半周

DECFSZ FRE_REPEATL,1

GOTO REPEAT0_LP

DECFSZ FRE_REPEATH,1 ;同一頻率持續1S

GOTO SOUND2S_1

SOUND2S_B ;再180HZ 1S

MOVLW 231

MOVWF TEMP ;180HZ頻率高低電平廷時值送TEMP 1S/[(231*2*6)US*2]=180HZ

MOVLW 180

MOVFW FRE_REPEATL ;同一頻率重復次數送初值180HZ頻率重復180次即1S

REPEAT0_LP_B

MOVFW TEMP

BSF PORTA,0

CALL SOUNDDELAY0 ;廷時W*6US*2 180HZ正半周

MOVFW TEMP

CALL SOUNDDELAY0

BCF PORTA,0

MOVFW TEMP

CALL SOUNDDELAY0 ;廷時W*6US*2 180HZ負半周

MOVFW TEMP

CALL SOUNDDELAY0

DECFSZ FRE_REPEATL,1 ;同一頻率持續1S

GOTO REPEAT0_LP_B

SOUND_END

RETLW 0

;------------------------------

SOUNDDELAY0

MOVWF SOUNDDELAY1 ;廷時W*6US+1US

SOUNDDELAYUS_1

nop

nop

nop

DECFSZ SOUNDDELAY1,1

GOTO SOUNDDELAYUS_1

RETLW 0

;------------------------

END

-----------------------------------------------------------------------------

;ST套件產生開道音

;本實例的目的是讓大家學會用單片機產生聲音的方法,學會計算程序所用時間

;本實例的功能是能PIC16F84產生開道音,每一個3S內頻率

;從1.1K-0.5K勻速減少,反復循環。

;程序復位后,蜂鳴器開始報警

;燒寫時應注意:配置位已經在程序中寫明,加載HEX文件時會自動加載,燒寫時不用再手動設置配置位。

;實驗時請注意套件跳線選擇;

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

LIST P=16F84A,R=DEC ;定義器件,默認為十進制

;-----------------------------------------------------

__CONFIG B\'11111111110001\';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC

;沒有代碼保護

;看門狗關閉

;上電廷時器開啟

;振蕩器模式為XT

;-----------------------------------------------------

RTCC EQU 01H ;定義各寄存器

PC EQU 02H

STATUS EQU 03H

C EQU 0

RP0 EQU 5

;----------------------

PORTA EQU 05H

TRISA EQU 05H

;-----------------------

SOUNDDELAY1 EQU 10H ;聲音頻率變化計數器,從1.1K~0.5KHZ

FRE_COUNT EQU 11H ;同一頻率的重復次數保存地址

FRE_REPEAT EQU 12H

SOUND_TEMP EQU 13H

TEMP EQU 14H ;暫存寄存器

S_LOOP EQU 136 ;250-114=136

S_MAX EQU 250 ;最低頻率0.5K 250*4=1000 *2

S_MIN EQU 114 ;最高頻率1.1K 114*4=456 *2

S_REPEAT EQU 17 ;同一頻率重復次數

;--------------------

ORG 0000H

MAIN

CLRF PORTA ;初始化IO口

BSF STATUS,RP0 ;設置數據寄存器體1

MOVLW 0000000B

MOVWF TRISA ;設置RA端口全部為輸出

BCF STATUS,RP0 ;恢復數據寄存器體0

LOOP

CALL SOUND3S ;調用報警3S子程序

GOTO LOOP ;反復循環報警

;-------------------------------

SOUND3S

MOVLW S_LOOP

MOVWF FRE_COUNT ;136=250-114

SOUND_HL_LP

MOVLW S_REPEAT ;同一頻率重復次數送FRE_REPEAT

MOVWF FRE_REPEAT

MOVFW FRE_COUNT

SUBLW S_MAX ;最大值減計數值

MOVWF TEMP

REPEAT1_LP

MOVFW TEMP

BSF PORTA,0

CALL SOUNDDELAY0 ;廷時W*4US

BCF PORTA,0

MOVFW TEMP

CALL SOUNDDELAY0

DECFSZ FRE_REPEAT,1;17次減頻率計數一次

GOTO REPEAT1_LP

DECFSZ FRE_COUNT,1

GOTO SOUND_HL_LP

SOUND_END

RETLW 0

;------------------------------

SOUNDDELAY0

MOVWF SOUNDDELAY1 ;廷時W*4US+1US

SOUNDDELAYUS_1

NOP

DECFSZ SOUNDDELAY1,1

GOTO SOUNDDELAYUS_1

RETLW 0

;------------------------

END

-----------------------------------------------------------------------------

;ST套件產生汽笛音800HZ

;本實例的目的是讓大家學會用單片機產生聲音的方法,學會計算程序所用時間

;本實例的功能是能PIC16F84產生汽笛音800HZ

;相當于800HZ的方波信號發生器。

;程序復位后,蜂鳴器開始發音

;燒寫時應注意:配置位已經在程序中寫明,加載HEX文件時會自動加載,燒寫時不用再手動設置配置位。

;實驗時請注意套件跳線選擇;

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

LIST P=16F84A,R=DEC ;定義器件,默認為十進制

;-----------------------------------------------------

__CONFIG B\'11111111110001\';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC

;沒有代碼保護

;看門狗關閉

;上電廷時器開啟

;振蕩器模式為XT

;-----------------------------------------------------

RTCC EQU 01H ;定義各寄存器

PC EQU 02H

STATUS EQU 03H

C EQU 0

RP0 EQU 5

;----------------------

PORTA EQU 05H

TRISA EQU 05H

;-----------------------

SOUNDDELAY1 EQU 10H ;聲音頻率變化計數器,從1.1K~0.5KHZ

;--------------------

ORG 0000H

MAIN

CLRF PORTA ;初始化IO口

BSF STATUS,RP0 ;設置數據寄存器體1

MOVLW 0000000B

MOVWF TRISA ;設置RA端口全部為輸出

BCF STATUS,RP0 ;恢復數據寄存器體0

SOUND

MOVLW 125 ;800HZ反復循環

BSF PORTA,0

CALL SOUNDDELAY0 ;廷時W*5US

BCF PORTA,0

MOVLW 125

CALL SOUNDDELAY0

GOTO SOUND

;------------------------------

SOUNDDELAY0

MOVWF SOUNDDELAY1 ;廷時W*5US+1US

SOUNDDELAYUS_1

NOP

NOP

DECFSZ SOUNDDELAY1,1

GOTO SOUNDDELAYUS_1

RETLW 0

;------------------------

END

-----------------------------------------------------------------------------

;ST套件產生治安音

;本實例的目的是讓大家學會用單片機產生聲音的方法,學會計算程序所用時間

;本實例的功能是能PIC16F84產生治安音,頻率分兩個0.4s第一個

;0.4S頻率從1.8K-2.2K勻速增加第二個0.4S頻率從2.2K-1.8K勻速減少,

;程序復位后,蜂鳴器開始報警

;燒寫時應注意:配置位已經在程序中寫明,加載HEX文件時會自動加載,燒寫時不用再手動設置配置位。

;實驗時請注意套件跳線選擇;

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

LIST P=16F84A,R=DEC ;定義器件,默認為十進制

;-----------------------------------------------------

__CONFIG B\'11111111110001\';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC

;沒有代碼保護

;看門狗關閉

;上電廷時器開啟

;振蕩器模式為XT

;-----------------------------------------------------

RTCC EQU 01H ;定義各寄存器

PC EQU 02H

STATUS EQU 03H

C EQU 0

RP0 EQU 5

;----------------------

PORTA EQU 05H

TRISA EQU 05H

;-----------------------

SOUNDDELAY1 EQU 10H ;聲音頻率變化計數器,從0.8~2.2KHZ

FRE_COUNT EQU 11H ;同一頻率的重復次數保存地址

FRE_REPEAT EQU 12H

SOUND_TEMP EQU 13H

TEMP EQU 14H ;暫存寄存器

S_LOOP EQU 132 ;208-76=132

S_MAX EQU 208 ;最低頻率0.8K 208*3=624US *2

S_MIN EQU 76 ;最高頻率2.2K 76*3=228 *2

S_REPEAT EQU 5 ;同一頻率重復次數 5*132個變化點*(1S/1.5KHZ)=0.4S

;--------------------

ORG 0000H

MAIN

CLRF PORTA ;初始化IO口

BSF STATUS,RP0 ;設置數據寄存器體1

MOVLW 0000000B

MOVWF TRISA ;設置RA端口全部為輸出

BCF STATUS,RP0 ;恢復數據寄存器體0

LOOP

CALL SOUND800MS ;調用報警800MS子程序

GOTO LOOP ;反復循環報警

;-------------------------------

SOUND800MS

MOVLW S_LOOP

MOVWF FRE_COUNT ;132=208-76 最低頻率的計數減去最高頻率的計數等于頻率變化的次數

SOUND_LH_LP

MOVLW S_REPEAT ;同一頻率重復次數送FRE_REPEAT

MOVWF FRE_REPEAT

MOVFW FRE_COUNT

ADDLW S_MIN ;計數值加最小值

MOVWF TEMP

REPEAT0_LP

MOVFW TEMP

BSF PORTA,0

CALL SOUNDDELAY0 ;廷時W*3US

BCF PORTA,0

MOVFW TEMP

CALL SOUNDDELAY0

DECFSZ FRE_REPEAT,1 ;每五次減頻率計數一次

GOTO REPEAT0_LP

DECFSZ FRE_COUNT,1

GOTO SOUND_LH_LP

SOUND_HL

MOVLW S_LOOP

MOVWF FRE_COUNT ;132=208-76

SOUND_HL_LP

MOVLW S_REPEAT ;同一頻率重復次數送FRE_REPEAT

MOVWF FRE_REPEAT

MOVFW FRE_COUNT

SUBLW S_MAX ;最大值減計數值

MOVWF TEMP

REPEAT1_LP

MOVFW TEMP

BSF PORTA,0

CALL SOUNDDELAY0 ;廷時W*3US

BCF PORTA,0

MOVFW TEMP

CALL SOUNDDELAY0

DECFSZ FRE_REPEAT,1;五次減頻率計數一次

GOTO REPEAT1_LP

DECFSZ FRE_COUNT,1

GOTO SOUND_HL_LP

SOUND_END

RETLW 0

;------------------------------

SOUNDDELAY0

MOVWF SOUNDDELAY1 ;廷時W*3US+1US

SOUNDDELAYUS_1

DECFSZ SOUNDDELAY1,1

GOTO SOUNDDELAYUS_1

RETLW 0

;------------------------

END

總結

以上是生活随笔為你收集整理的警笛声c语言程序,PIC警笛声音的程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。