www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]/********************************************ht9200A/ht9170程序雙音多頻接收發(fā)射程序********************************************/sbit DATA= P3^7 ;sbit CLK= P3^6 ;sbit CE= P2^7 ;/***********************

/********************************************

ht9200A/ht9170程序

雙音多頻接收發(fā)射程序

********************************************/

sbit DATA= P3^7 ;

sbit CLK= P3^6 ;

sbit CE= P2^7 ;

/*******************************************

DTMF 數(shù)據(jù)口:P0^0 ~ P0^3

*******************************************/

sbit DV= P2^6 ;

sbit OE= P3^2 ;

//sbit PWDN= P3^6 ;

//sbit INH= P3^7 ;

sbit DXC= P3^5 ;

sbit RING = p3^0 ;

#ifndefTRUE

defineTRUE1 ;

#endif

#ifndefFALSE

defineFALSE0 ;

#endif

uchar idata Check0 ;

uchar idata Counter0 ;

uchar idata Check1 ;

uchar idata Counter1 ;

uchar idata Check3 ;

uchar idata Counter3 ;

uchar code Table_DTMF[] = {0x0a,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0d,0x0e,0x0f,0x00,0x0b,0x0c} ;

//0123456789ABCD*#

void senddata_ht9200(uchar in)

{

uchar i;

for(i=0;i<5;i++)

{

if(((in>>i)&0x01) == 1)

DATA = 1 ;

elseDATA = 0 ;

CLK = 0 ;

CLK = 1 ;

}

}

/******************************************

發(fā)送子程序

in 為要發(fā)送的數(shù) 0-15

******************************************/

void send_ht9200(uchar in)

{

CE= 0 ;

CLK= 1 ;

time(50) ;//delay about 6 ms

EA = 0 ;

senddata_ht9200(Table_DTMF[in]) ;

EA = 1 ;

delay(100) ;//delay about 100 ms

CE= 1 ;

}

/*****************************************

DTMF 讀程序

返回 DTMF值

*****************************************/

uchar DTMF_read(void)

{

uchar temp ;

uchar i ;

EA = 0 ;

P0 = 0xff ;

OE = 1 ;

ACC = ACC ;

temp = P0&0x0f ;

OE = 0 ;

EA = 1 ;

for(i=0;i<16;i++)

{

if(temp == Table_DTMF[i])

return i ;

}

return(0xff) ;

}

/******************************************

初始化檢測(cè)程序

******************************************/

void checkRING_Init()

{

Check0 = 2 ;

Counter0 = 20 ;

}

void checkDV_Init()

{

Check1 = 2;

Counter1 = 20;

}

void checkDXC_Init()

{

Check3 = 2 ;

Counter3 = 20 ;

}

/***************************************

檢測(cè)有無(wú)振鈴RING 程序

返回TRUE :有

FALSE:無(wú)

***************************************/

uchar check_RING(void)//

{

uchar flag ;

flag = RING ;//check RING

if((flag == 0)&&(Counter0 < 30))

Counter0 ++ ;

if((flag == 1)&&(Counter0 > 0))

Counter0 -- ;

if(Counter0 == 30)

{

Counter0 = 20 ;

if(flag != Check0)

{

Check0 = flag ;

return TRUE ;

}

else return FALSE;

}

else if(Counter0 == 0)

{

Counter0 = 20 ;

Check0 = 1;

return FALSE;

}

else

return FALSE ;

}

/***************************************

檢測(cè)有無(wú)DTMF信號(hào) DV 程序

返回TRUE :有

FALSE:無(wú)

***************************************/

uchar check_DV(void)//

{

uchar flag ;

flag = DV ;//check DV

if((flag == 1)&&(Counter1<30))

Counter1 ++ ;

if((flag == 0)&&(Counter1 >0))

Counter1 -- ;

if(Counter1 == 30)

{

Counter1 = 20 ;

if(flag != Check1)

{

Check1 = flag ;

return TRUE ;

}

elsereturn FALSE ;

}

else if(Counter1 == 0)

{

Counter1 = 20 ;

Check1= 0 ;

return FALSE ;

}

else return FALSE ;

}

/***************************************

檢測(cè)有無(wú)掉線信號(hào) DXC 程序

返回TRUE :有

FALSE:無(wú)

***************************************/

uchar check_DXC(void)//

{

uchar flag ;

flag = DXC ;//check DXC

if((flag == 1)&&(Counter3<30))

Counter3 ++ ;

if((flag == 0)&&(Counter3 >0))

Counter3 -- ;

if(Counter3 == 30)

{

Counter3 = 20 ;

if(flag != Check3)

{

Check3 = flag ;

return TRUE ;

}

elsereturn FALSE ;

}

else if(Counter3 == 0)

{

Counter3 = 20 ;

Check3= 0 ;

return FALSE ;

}

else return FALSE ;

}


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

單片機(jī)內(nèi)部有很多的特殊功能寄存器,每個(gè)寄存器在單片機(jī)內(nèi)部都分配有唯一的地址,一般我們會(huì)根據(jù)寄存器功能的不同給寄存器賦予各自的名稱,當(dāng)我們需要在程序中操作這些特殊功能寄存器時(shí),必須要在程序的最前面將這些名稱加以聲明,聲明的...

關(guān)鍵字: C51 數(shù)據(jù)類型 擴(kuò)充定義

數(shù)據(jù)元(Data Element),也稱為數(shù)據(jù)元素,是用一組屬性描述其定義、標(biāo)識(shí)、表示和允許值的數(shù)據(jù)單元,在一定語(yǔ)境下,通常用于構(gòu)建一個(gè)語(yǔ)義正確、獨(dú)立且無(wú)歧義的特定概念語(yǔ)義的信息單元。數(shù)據(jù)元可以理解為數(shù)據(jù)的基本單元,將若...

關(guān)鍵字: C51 數(shù)據(jù)類型

▼點(diǎn)擊下方名片,關(guān)注公眾號(hào)▼歡迎關(guān)注【玩轉(zhuǎn)單片機(jī)與嵌入式】公眾號(hào),回復(fù)關(guān)鍵字獲取更多免費(fèi)資料。回復(fù)【加群】,限時(shí)免費(fèi)進(jìn)入知識(shí)共享群;回復(fù)【3D封裝庫(kù)】,常用元器件的3D封裝庫(kù);回復(fù)【電容】,獲取電容、元器件選型相關(guān)的內(nèi)容...

關(guān)鍵字: C51 MDK RealView

在Keil C51軟件中51單片機(jī)的中斷服務(wù)和外設(shè)驅(qū)動(dòng)程序的開(kāi)發(fā)

關(guān)鍵字: keil5 編譯 C51

Intel公司1980年推出了MCS-51系列單片機(jī):集成 8位CPU、4K字節(jié)ROM、128字節(jié)RAM、4個(gè)8位并口、1個(gè)全雙工串行口、2個(gè)16位定時(shí)/計(jì)數(shù)器。尋址范圍64K,并有控制功能較強(qiáng)的布爾處理器。 80C5...

關(guān)鍵字: C51 KEIL 編程

c上標(biāo)3下標(biāo)5怎么算用計(jì)算機(jī),c上標(biāo)3下標(biāo)5怎么算

關(guān)鍵字: C51 KEIL

▼點(diǎn)擊下方名片,關(guān)注公眾號(hào)▼大家好,很高興和各位一起分享我的第16篇原創(chuàng)文章,喜歡和支持我的工程師,一定記得給我點(diǎn)贊、收藏、分享。加微信[xyzn3333]與作者溝通交流,免費(fèi)獲取更多單片機(jī)與嵌入式的海量電子資料。很多初...

關(guān)鍵字: 51單片機(jī) C51

常看見(jiàn)初學(xué)者要求使用_at_,這是一種謬誤,把C當(dāng)作ASM看待了。在C中變量的定位是編譯器的事情,初學(xué)者只要定義變量和變量的作 用域,編譯器就把一個(gè)固定地址給這個(gè)變量。

關(guān)鍵字: C51 單片機(jī) 誤區(qū) 注意事項(xiàng)

簡(jiǎn)介:編程首要是要考慮程序的可行性,然后是可讀性、可移植性、健壯性以及可測(cè)試性。這是總則。但是很多人忽略了可讀性、可移植性和健壯性(可調(diào)試的方法可能歌不相同),這是不對(duì)的。

關(guān)鍵字: C51 編程規(guī)范 文件配置

如果你用 Keil C51 進(jìn)行編譯,記住一點(diǎn):它不區(qū)分大小寫(xiě)!!!臥槽,今天編程序那個(gè)調(diào)錯(cuò)啊,就因?yàn)橐粋€(gè)數(shù)組名和一個(gè)變量名完全一樣,只是大小寫(xiě)不一樣罷了,標(biāo)準(zhǔn) C 我怎么記得這樣可以啊……上網(wǎng)一查,臥槽,Keil C5...

關(guān)鍵字: C51 單片機(jī) 編程要點(diǎn)
關(guān)閉
關(guān)閉