概述: 智能紅外語音警示柱采用C8051單片機(jī)作為處理單元,集成了 MP3、WAV 的硬解碼數(shù)字語音功放,配合廣角度紅外傳感器,驅(qū)動(dòng)紅綠數(shù)碼管作為爆閃提醒。能聯(lián)動(dòng)信號(hào)控制系統(tǒng),實(shí)現(xiàn)一種與交通行人信號(hào)紅綠燈配套使用的聲響提示裝置,使行人橫穿馬路時(shí)更加注意安全,本產(chǎn)品紅外檢測(cè)靈敏,聲音指向性明確,外型美觀大方,安裝簡單。
特點(diǎn): 1、采用高增益大功率的音頻放大; 2、采用紅外數(shù)字脈沖探測(cè),感應(yīng)速度為50-700ms,警戒距離達(dá)30米,兩光束水平光軸范圍180度,上下光軸范圍20度。 3、采用不銹鋼材料通過特殊工藝處理,具有耐腐蝕、防水和防撞等功能; 4、同步紅綠燈信號(hào)顯示,強(qiáng)化行人過街視覺與聽覺雙重輔助提醒; 5、語音簡潔、動(dòng)聽,且音量大小可調(diào),夜間不會(huì)產(chǎn)生噪聲; 6、外形設(shè)計(jì)精致、時(shí)尚、美觀,提升城市交通品質(zhì)與檔次。
制作出來的實(shí)物圖如下:
紅外語音警示柱
單片機(jī)源程序如下:
- #include "include.h"
- #include "sw_uart.h"
- #include "hw_uart.h"
- #include "timer2.h"
- #include "api.h"
- pt pt_comm;
- void init_gpio()
- {
- // P0.0 - Skipped, Open-Drain, Digital
- // P0.1 - Skipped, Open-Drain, Digital
- // P0.2 - Skipped, Open-Drain, Digital
- // P0.3 - Skipped, Open-Drain, Digital
- // P0.4 - TX0 (UART0), Push-Pull, Digital
- // P0.5 - RX0 (UART0), Open-Drain, Digital
- // P0.6 - Skipped, Open-Drain, Digital
- // P0.7 - Skipped, Open-Drain, Digital
- // P1.0 - Skipped, Open-Drain, Digital
- // P1.1 - CEX0 (PCA), Open-Drain, Digital
- // P1.2 - Unassigned, Open-Drain, Digital
- // P1.3 - Unassigned, Open-Drain, Digital
- // P1.4 - Unassigned, Open-Drain, Digital
- // P1.5 - Unassigned, Open-Drain, Digital
- // P1.6 - Unassigned, Push-Pull, Digital
- // P1.7 - Unassigned, Push-Pull, Digital
- // P2.0 - Unassigned, Open-Drain, Digital
- // P2.1 - Unassigned, Open-Drain, Digital
- // P2.2 - Unassigned, Open-Drain, Digital
- // P2.3 - Unassigned, Open-Drain, Digital
- P0MDOUT = 0x10;
- P1MDOUT = 0xC0;
- P0SKIP = 0xCF;
- P1SKIP = 0x01;
- XBR0 = 0x01;
- XBR1 = 0x41;
- }
- void init_sysclock()
- {
- OSCICN = 0x83;
- }
- void init_wtd(void)
- {
- // PCA0MD &= ~0x40; // 向WDTE寫‘0’,禁止WDT
- // PCA0MD = 0x00; // PCA時(shí)鐘源選擇系統(tǒng)時(shí)鐘的12分頻
- // PCA0CPL2 = 0xFF; // 裝入WDT更新偏移值為64.2ms
- // PCA0MD |= 0x40; // 向WDTE寫‘1’,使能WDT
- // Calculate Watchdog Timer Timeout
- // Offset calculated in PCA clocks
- // Offset = ( 256 x PCA0CPL4 ) + 256 - PCA0L
- // = ( 256 x 255(0xFF)) + 256 - 0
- // Time = Offset * (12/SYSCLK)
- // = 255 ms ( PCA uses SYSCLK/12 as its clock source)
- PCA0MD &= 0xBF; // WDTE = 0 (clear watchdog timer enable)
- // PCA0L = 0x00; // Set lower byte of PCA counter to 0
- // PCA0H = 0x00; // Set higher byte of PCA counter to 0
- PCA0CPL4 = 0xFF; // Write offset for the WDT
- PCA0MD |= 0x40; // Enable the WDT
- }
- void feed_wtd(void)
- {
- //CCF2 = 0x00; // Write a 'dummy' value to the PCA0CPH4
- // register to reset the watchdog timer
- // timeout. If a delay longer than the
- // watchdog timer delay occurs between
- // successive writes to this register,
- // the device will be reset by the watch
- // dog timer.
- PCA0CPH4 =0x00;
- }
- unsigned char get_lamp_status(void)
- {
- if(PIN_RED_LAMP==0) return 1;
- else return 0;
- }
- u8 xdata gRxdBuffer[MAX_HDLC_BUF+2]={0};
- u8 xdata gTxdBuffer[MAX_HDLC_BUF+2]={0};
- u8 xdata cmd_buffer[MAX_HDLC_BUF]={0};
- u8 xdata ack_buffer[MAX_HDLC_BUF]={0};
- u8 xdata com_status=RE_SYNC;
- u16 xdata framesize=0;
- //查詢紅燈狀態(tài): 7E FF A0 C0 9F 7E
- //播放第1首01音量: 7E FF A0 C1 01 01 9E 7E
- //播放第1首30音量: 7E FF A0 C1 1E 01 81 7E
- //播放第2首30音量: 7E FF A0 C1 1E 02 82 7E
- //播放第3首30音量: 7E FF A0 C1 1E 03 83 7E
- void delay(unsigned short dly)
- {
- timer timer_delay;
- timer_set(&timer_delay,dly);
- for(;;)
- {
- feed_wtd();
- if(timer_expired(&timer_delay))
- {
- break;
- }
- }
- }
- unsigned short thread_comm(pt *pt)
- {
- u8 ch=0;
- u8 vol=0;
- u8 index=0;
- static u8 red_lamp_status=0;
- static u8 radar_status=0;
- static u8 run=0;
- run=PIN_COM=0;
- PT_BEGIN(pt);
- for(;;)
- {
- PT_YIELD(pt);
- if(PIN_RED_LAMP!=red_lamp_status || PIN_RADAR!=radar_status)
- {
- radar_status = PIN_RADAR;
- red_lamp_status = PIN_RED_LAMP;
-
- //設(shè)置音量
- cmd_buffer[0]=0x7E;
- cmd_buffer[1]=0x03;
- cmd_buffer[2]=0x31;
- cmd_buffer[3]=30; //音量
- cmd_buffer[4]=0xEF;
- sw_uart_send_bytes(cmd_buffer,5);
-
- if(red_lamp_status==0) //檢查 led signal
- {
- if(radar_status!=0) //檢查radar
- {
-
- index=0x03; //闖紅燈
-
- }
- else
- {
- delay(500); //延時(shí)500毫秒
- index=0x01; //紅燈
- delay(4000);
- }
- }
- else
- {
- delay(2500);
- index = 0x02 ; //綠燈
-
- }
- //組織語音播放數(shù)據(jù)
- cmd_buffer[0]=0x7E;
- cmd_buffer[1]=0x04;
- cmd_buffer[2]=0x41;
- cmd_buffer[3]=0x00;
- cmd_buffer[4]=index; //編號(hào)
- cmd_buffer[5]=0xEF;
- sw_uart_send_bytes(cmd_buffer,6);
- }
- }
- PT_END(pt);
- }
- void main(void)
- {
- init_sysclock();
- init_gpio();
- init_timer0();
- init_hw_uart();
- init_sw_uart();
- init_wtd();
-
- PT_INIT(&pt_comm);
- EA=1;
- for(;;)
- {
- thread_comm(&pt_comm);
- feed_wtd();
- }
- }
復(fù)制代碼
所有程序51hei提供下載:
紅外語音系統(tǒng)程序源碼.zip
(106.79 KB, 下載次數(shù): 30)
2021-2-2 17:22 上傳
點(diǎn)擊文件名下載附件
紅外
|