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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

32 引脚_函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频方波

發(fā)布時間:2025/3/12 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 32 引脚_函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频方波 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

??void Time0_serve(void ) interrupt 1 using 1 ?

??{

????????TH0=(8192-C)/32; ????//可證明這是13位計數(shù)器TH0高8位的賦初值方法

????????TL0=(8192-C)%32; ????//可證明這是13位計數(shù)器TL0低5位的賦初值方法

?????sound=!sound; ???????//將P3.7引腳取反,輸出音頻方波

??}

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

函數(shù)功能:定時器T1的中斷服務子程序,進行鍵盤掃描,判斷鍵位

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

??void time1_serve(void) interrupt 3 using 2 ???//定時器T1的中斷編號為3,使用第2組寄存器

??{

?????TR1=0; ?????????????????//關閉定時器T0

?????P1=0xf0; ????????????????//所有行線置為低電平“0”,所有列線置為高電平“1”

??if((P1&0xf0)!=0xf0) ?????//列線中有一位為低電平“0”,說明有鍵按下

???{

?????????delay20ms(); ??????????//延時一段時間、軟件消抖

??if((P1&0xf0)!=0xf0) ?????//確實有鍵按下

????{

???????P1=0xfe; ????????????//第一行置為低電平“0”(P1.0輸出低電平“0”)

???????if(P14==0) ??????????//如果檢測到接P1.4引腳的列線為低電平“0”

?????????????keyval=1; ???????????//可判斷是S1鍵被按下

???????????if(P15==0) ????????????//如果檢測到接P1.5引腳的列線為低電平“0”

?????????????keyval=2; ???????????//可判斷是S2鍵被按下

???????????if(P16==0) ????????????//如果檢測到接P1.6引腳的列線為低電平“0”

?????????????keyval=3; ???????????//可判斷是S3鍵被按下

???????????if(P17==0) ???????????//如果檢測到接P1.7引腳的列線為低電平“0”

?????????????keyval=4; ??????????//可判斷是S4鍵被按下

???????????P1=0xfd; ????????????//第二行置為低電平“0”(P1.1輸出低電平“0”)

??????if(P14==0) ??????????//如果檢測到接P1.4引腳的列線為低電平“0”

?????????????keyval=5; ???????????//可判斷是S5鍵被按下

???????????if(P15==0) ????????????//如果檢測到接P1.5引腳的列線為低電平“0”

?????????????keyval=6; ???????????//可判斷是S6鍵被按下

???????????if(P16==0) ????????????//如果檢測到接P1.6引腳的列線為低電平“0”

?????????????keyval=7; ???????????//可判斷是S7鍵被按下

???????????if(P17==0) ???????????//如果檢測到接P1.7引腳的列線為低電平“0”

?????????????keyval=8; ??????????//可判斷是S8鍵被按下

???????????P1=0xfb; ????????????//第三行置為低電平“0”(P1.2輸出低電平“0”)

????if(P14==0) ?????????//如果檢測到接P1.4引腳的列線為低電平“0”

?????????????keyval=9; ?????????//可判斷是S9鍵被按下

???????????if(P15==0) ??????????//如果檢測到接P1.5引腳的列線為低電平“0”

?????????????keyval=10; ????????//可判斷是S10鍵被按下

???????????if(P16==0) ?????????//如果檢測到接P1.6引腳的列線為低電平“0”

?????????????keyval=11; ???????//可判斷是S11鍵被按下

???????????if(P17==0) ?????????//如果檢測到接P1.7引腳的列線為低電平“0”

?????????????keyval=12; ???????//可判斷是S12鍵被按下

???????????P1=0xf7; ????????????//第四行置為低電平“0”(P1.3輸出低電平“0”)

????if(P14==0) ?????????//如果檢測到接P1.4引腳的列線為低電平“0”

?????????????keyval=13; ?????????//可判斷是S13鍵被按下

???????????if(P15==0) ??????????//如果檢測到接P1.5引腳的列線為低電平“0”

?????????????keyval=14; ????????//可判斷是S14鍵被按下

???????????if(P16==0) ?????????//如果檢測到接P1.6引腳的列線為低電平“0”

?????????????keyval=15; ???????//可判斷是S15鍵被按下

???????????if(P17==0) ?????????//如果檢測到接P1.7引腳的列線為低電平“0”

?????????????keyval=16; ???????//可判斷是S16鍵被按下

?????}

}

?????TR1=1; ???????????????????//開啟定時器T1

?????TH1=(65536-500)/256; ?//定時器T1的高8位賦初值

??TL1=(65536-500)%256; ?//定時器T1的高8位賦初值?

?}

//實例80:矩陣式鍵盤實現(xiàn)的電子密碼鎖

#include ??//包含51單片機寄存器定義的頭文件

sbit P14=P1^4; ?????//將P14位定義為P1.4引腳

sbit P15=P1^5; ?????//將P15位定義為P1.5引腳

sbit P16=P1^6; ?????//將P16位定義為P1.6引腳

sbit P17=P1^7; ?????//將P17位定義為P1.7引腳

sbit sound=P3^7; ???//將sound位定義為P3.7

unsigned char keyval; ???//儲存按鍵值

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

函數(shù)功能:延時輸出音頻

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

?void delay(void) ??

{

???unsigned char i;

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

?????????;

?}

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

函數(shù)功能:軟件延時子程序

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

?void delay20ms(void) ??

{

???unsigned char i,j;

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

?for(j=0;j<60;j++)

???????????;

?}

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

函數(shù)功能:主函數(shù)

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

?void main(void)

?{

???unsigned char D[ ]={0,8,0,8,7,4,11}; ?????//設定密碼

???EA=1; ?????????????????//開總中斷

ET0=1; ????????????????//定時器T0中斷允許 ????????

TMOD=0x01; ???????????//使用定時器T0的模式1

TH0=(65536-500)/256; ?//定時器T0的高8位賦初值

TL0=(65536-500)%256; ?//定時器T0的高8位賦初值

TR0=1; ???????????????//啟動定時器T0

keyval=0xff; ?????????//按鍵值初始化

while(keyval!=D[0]) ??//第一位密碼輸入不正確,等待

?????;?

while(keyval!=D[1]) ??//第二位密碼輸入不正確,等待

?????;

while(keyval!=D[2]) ??//第三位密碼輸入不正確,等待

?????;

while(keyval!=D[3]) ??//第四位密碼輸入不正確,等待

?????;

while(keyval!=D[4]) ??//第五位密碼輸入不正確,等待

?????;

while(keyval!=D[5]) ??//第六位密碼輸入不正確,等待

?????; ??

while(keyval!=D[6]) ?//沒有輸入“OK”,等待

???;?

?P3=0xfe; ??????????//P3.0引腳輸出低電平,點亮LED

}

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

函數(shù)功能:定時器0的中斷服務子程序,進行鍵盤掃描,判斷鍵位

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

??void time0_interserve(void) interrupt 1 using 1 ???//定時器T0的中斷編號為1,使用第一組寄存器

??{

?????unsigned char i;

?????TR0=0; ?????????????????//關閉定時器T0??

?????P1=0xf0; ????????????????//所有行線置為低電平“0”,所有列線置為高電平“1”

??if((P1&0xf0)!=0xf0) ?????//列線中有一位為低電平“0”,說明有鍵按下

?????delay20ms(); ??????????//延時一段時間、軟件消抖

??if((P1&0xf0)!=0xf0) ?????//確實有鍵按下

????{

???????P1=0xfe; ????????????//第一行置為低電平“0”(P1.0輸出低電平“0”)

???????if(P14==0) ??????????//如果檢測到接P1.4引腳的列線為低電平“0”

?????????????keyval=1; ???????????//可判斷是S1鍵被按下

???????????if(P15==0) ????????????//如果檢測到接P1.5引腳的列線為低電平“0”

?????????????keyval=2; ???????????//可判斷是S2鍵被按下

???????????if(P16==0) ????????????//如果檢測到接P1.6引腳的列線為低電平“0”

?????????????keyval=3; ???????????//可判斷是S3鍵被按下

???????????if(P17==0) ???????????//如果檢測到接P1.7引腳的列線為低電平“0”

?????????????keyval=4; ??????????//可判斷是S4鍵被按下

???????????P1=0xfd; ????????????//第二行置為低電平“0”(P1.1輸出低電平“0”)

??????if(P14==0) ??????????//如果檢測到接P1.4引腳的列線為低電平“0”

?????????????keyval=5; ???????????//可判斷是S5鍵被按下

???????????if(P15==0) ????????????//如果檢測到接P1.5引腳的列線為低電平“0”

?????????????keyval=6; ???????????//可判斷是S6鍵被按下

???????????if(P16==0) ????????????//如果檢測到接P1.6引腳的列線為低電平“0”

?????????????keyval=7; ???????????//可判斷是S7鍵被按下

???????????if(P17==0) ???????????//如果檢測到接P1.7引腳的列線為低電平“0”

?????????????keyval=8; ??????????//可判斷是S8鍵被按下

???????????P1=0xfb; ????????????//第三行置為低電平“0”(P1.2輸出低電平“0”)

????if(P14==0) ?????????//如果檢測到接P1.4引腳的列線為低電平“0”

?????????????keyval=9; ?????????//可判斷是S9鍵被按下

???????????if(P15==0) ??????????//如果檢測到接P1.5引腳的列線為低電平“0”

?????????????keyval=0; ????????//可判斷是S10鍵被按下

???????????if(P16==0) ?????????//如果檢測到接P1.6引腳的列線為低電平“0”

?????????????keyval=11; ???????//可判斷是S11鍵被按下

???????if(P17==0) ?????????//如果檢測到接P1.7引腳的列線為低電平“0”

?????????????keyval=12; ???????//可判斷是S12鍵被按下

???????????P1=0xf7; ????????????//第四行置為低電平“0”(P1.3輸出低電平“0”)

????if(P14==0) ?????????//如果檢測到接P1.4引腳的列線為低電平“0”

?????????????keyval=13; ?????????//可判斷是S13鍵被按下

???????????if(P15==0) ??????????//如果檢測到接P1.5引腳的列線為低電平“0”

?????????????keyval=14; ????????//可判斷是S14鍵被按下

???????????if(P16==0) ?????????//如果檢測到接P1.6引腳的列線為低電平“0”

?????????????keyval=15; ???????//可判斷是S15鍵被按下

???????????if(P17==0) ?????????//如果檢測到接P1.7引腳的列線為低電平“0”

?????????????keyval=16; ???????//可判斷是S16鍵被按下

??????????for(i=0;i<200;i++) ?//讓P3.7引腳電平不斷取反輸出音頻

???????????{

??????????????sound=0;

??????????????delay();

?????sound=1;

?????delay();

???????????}

}

?????TR0=1; ???????????????????//開啟定時器T0

?????TH0=(65536-500)/256; ?//定時器T0的高8位賦初值

??TL0=(65536-500)%256; ?//定時器T0的高8位賦初值?

?}

/************************************************************************ **液晶顯示LCD*********

總結

以上是生活随笔為你收集整理的32 引脚_函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频方波的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。