32 引脚_函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频方波
??void Time0_serve(void ) interrupt 1 using 1 ?
??{
????????TH0=(8192-C)/32; ????//可證明這是13位計(jì)數(shù)器TH0高8位的賦初值方法
????????TL0=(8192-C)%32; ????//可證明這是13位計(jì)數(shù)器TL0低5位的賦初值方法
?????sound=!sound; ???????//將P3.7引腳取反,輸出音頻方波
??}
/**************************************************************
函數(shù)功能:定時(shí)器T1的中斷服務(wù)子程序,進(jìn)行鍵盤(pán)掃描,判斷鍵位
**************************************************************/
??void time1_serve(void) interrupt 3 using 2 ???//定時(shí)器T1的中斷編號(hào)為3,使用第2組寄存器
??{
?????TR1=0; ?????????????????//關(guān)閉定時(shí)器T0
?????P1=0xf0; ????????????????//所有行線置為低電平“0”,所有列線置為高電平“1”
??if((P1&0xf0)!=0xf0) ?????//列線中有一位為低電平“0”,說(shuō)明有鍵按下
???{
?????????delay20ms(); ??????????//延時(shí)一段時(shí)間、軟件消抖
??if((P1&0xf0)!=0xf0) ?????//確實(shí)有鍵按下
????{
???????P1=0xfe; ????????????//第一行置為低電平“0”(P1.0輸出低電平“0”)
???????if(P14==0) ??????????//如果檢測(cè)到接P1.4引腳的列線為低電平“0”
?????????????keyval=1; ???????????//可判斷是S1鍵被按下
???????????if(P15==0) ????????????//如果檢測(cè)到接P1.5引腳的列線為低電平“0”
?????????????keyval=2; ???????????//可判斷是S2鍵被按下
???????????if(P16==0) ????????????//如果檢測(cè)到接P1.6引腳的列線為低電平“0”
?????????????keyval=3; ???????????//可判斷是S3鍵被按下
???????????if(P17==0) ???????????//如果檢測(cè)到接P1.7引腳的列線為低電平“0”
?????????????keyval=4; ??????????//可判斷是S4鍵被按下
???????????P1=0xfd; ????????????//第二行置為低電平“0”(P1.1輸出低電平“0”)
??????if(P14==0) ??????????//如果檢測(cè)到接P1.4引腳的列線為低電平“0”
?????????????keyval=5; ???????????//可判斷是S5鍵被按下
???????????if(P15==0) ????????????//如果檢測(cè)到接P1.5引腳的列線為低電平“0”
?????????????keyval=6; ???????????//可判斷是S6鍵被按下
???????????if(P16==0) ????????????//如果檢測(cè)到接P1.6引腳的列線為低電平“0”
?????????????keyval=7; ???????????//可判斷是S7鍵被按下
???????????if(P17==0) ???????????//如果檢測(cè)到接P1.7引腳的列線為低電平“0”
?????????????keyval=8; ??????????//可判斷是S8鍵被按下
???????????P1=0xfb; ????????????//第三行置為低電平“0”(P1.2輸出低電平“0”)
????if(P14==0) ?????????//如果檢測(cè)到接P1.4引腳的列線為低電平“0”
?????????????keyval=9; ?????????//可判斷是S9鍵被按下
???????????if(P15==0) ??????????//如果檢測(cè)到接P1.5引腳的列線為低電平“0”
?????????????keyval=10; ????????//可判斷是S10鍵被按下
???????????if(P16==0) ?????????//如果檢測(cè)到接P1.6引腳的列線為低電平“0”
?????????????keyval=11; ???????//可判斷是S11鍵被按下
???????????if(P17==0) ?????????//如果檢測(cè)到接P1.7引腳的列線為低電平“0”
?????????????keyval=12; ???????//可判斷是S12鍵被按下
???????????P1=0xf7; ????????????//第四行置為低電平“0”(P1.3輸出低電平“0”)
????if(P14==0) ?????????//如果檢測(cè)到接P1.4引腳的列線為低電平“0”
?????????????keyval=13; ?????????//可判斷是S13鍵被按下
???????????if(P15==0) ??????????//如果檢測(cè)到接P1.5引腳的列線為低電平“0”
?????????????keyval=14; ????????//可判斷是S14鍵被按下
???????????if(P16==0) ?????????//如果檢測(cè)到接P1.6引腳的列線為低電平“0”
?????????????keyval=15; ???????//可判斷是S15鍵被按下
???????????if(P17==0) ?????????//如果檢測(cè)到接P1.7引腳的列線為低電平“0”
?????????????keyval=16; ???????//可判斷是S16鍵被按下
?????}
}
?????TR1=1; ???????????????????//開(kāi)啟定時(shí)器T1
?????TH1=(65536-500)/256; ?//定時(shí)器T1的高8位賦初值
??TL1=(65536-500)%256; ?//定時(shí)器T1的高8位賦初值?
?}
//實(shí)例80:矩陣式鍵盤(pán)實(shí)現(xiàn)的電子密碼鎖
#include ??//包含51單片機(jī)寄存器定義的頭文件
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; ???//儲(chǔ)存按鍵值
/**************************************************************
函數(shù)功能:延時(shí)輸出音頻
**************************************************************/
?void delay(void) ??
{
???unsigned char i;
for(i=0;i<200;i++)
?????????;
?}
/**************************************************************
函數(shù)功能:軟件延時(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}; ?????//設(shè)定密碼
???EA=1; ?????????????????//開(kāi)總中斷
ET0=1; ????????????????//定時(shí)器T0中斷允許 ????????
TMOD=0x01; ???????????//使用定時(shí)器T0的模式1
TH0=(65536-500)/256; ?//定時(shí)器T0的高8位賦初值
TL0=(65536-500)%256; ?//定時(shí)器T0的高8位賦初值
TR0=1; ???????????????//啟動(dòng)定時(shí)器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]) ?//沒(méi)有輸入“OK”,等待
???;?
?P3=0xfe; ??????????//P3.0引腳輸出低電平,點(diǎn)亮LED
}
/**************************************************************
函數(shù)功能:定時(shí)器0的中斷服務(wù)子程序,進(jìn)行鍵盤(pán)掃描,判斷鍵位
**************************************************************/
??void time0_interserve(void) interrupt 1 using 1 ???//定時(shí)器T0的中斷編號(hào)為1,使用第一組寄存器
??{
?????unsigned char i;
?????TR0=0; ?????????????????//關(guān)閉定時(shí)器T0??
?????P1=0xf0; ????????????????//所有行線置為低電平“0”,所有列線置為高電平“1”
??if((P1&0xf0)!=0xf0) ?????//列線中有一位為低電平“0”,說(shuō)明有鍵按下
?????delay20ms(); ??????????//延時(shí)一段時(shí)間、軟件消抖
??if((P1&0xf0)!=0xf0) ?????//確實(shí)有鍵按下
????{
???????P1=0xfe; ????????????//第一行置為低電平“0”(P1.0輸出低電平“0”)
???????if(P14==0) ??????????//如果檢測(cè)到接P1.4引腳的列線為低電平“0”
?????????????keyval=1; ???????????//可判斷是S1鍵被按下
???????????if(P15==0) ????????????//如果檢測(cè)到接P1.5引腳的列線為低電平“0”
?????????????keyval=2; ???????????//可判斷是S2鍵被按下
???????????if(P16==0) ????????????//如果檢測(cè)到接P1.6引腳的列線為低電平“0”
?????????????keyval=3; ???????????//可判斷是S3鍵被按下
???????????if(P17==0) ???????????//如果檢測(cè)到接P1.7引腳的列線為低電平“0”
?????????????keyval=4; ??????????//可判斷是S4鍵被按下
???????????P1=0xfd; ????????????//第二行置為低電平“0”(P1.1輸出低電平“0”)
??????if(P14==0) ??????????//如果檢測(cè)到接P1.4引腳的列線為低電平“0”
?????????????keyval=5; ???????????//可判斷是S5鍵被按下
???????????if(P15==0) ????????????//如果檢測(cè)到接P1.5引腳的列線為低電平“0”
?????????????keyval=6; ???????????//可判斷是S6鍵被按下
???????????if(P16==0) ????????????//如果檢測(cè)到接P1.6引腳的列線為低電平“0”
?????????????keyval=7; ???????????//可判斷是S7鍵被按下
???????????if(P17==0) ???????????//如果檢測(cè)到接P1.7引腳的列線為低電平“0”
?????????????keyval=8; ??????????//可判斷是S8鍵被按下
???????????P1=0xfb; ????????????//第三行置為低電平“0”(P1.2輸出低電平“0”)
????if(P14==0) ?????????//如果檢測(cè)到接P1.4引腳的列線為低電平“0”
?????????????keyval=9; ?????????//可判斷是S9鍵被按下
???????????if(P15==0) ??????????//如果檢測(cè)到接P1.5引腳的列線為低電平“0”
?????????????keyval=0; ????????//可判斷是S10鍵被按下
???????????if(P16==0) ?????????//如果檢測(cè)到接P1.6引腳的列線為低電平“0”
?????????????keyval=11; ???????//可判斷是S11鍵被按下
???????if(P17==0) ?????????//如果檢測(cè)到接P1.7引腳的列線為低電平“0”
?????????????keyval=12; ???????//可判斷是S12鍵被按下
???????????P1=0xf7; ????????????//第四行置為低電平“0”(P1.3輸出低電平“0”)
????if(P14==0) ?????????//如果檢測(cè)到接P1.4引腳的列線為低電平“0”
?????????????keyval=13; ?????????//可判斷是S13鍵被按下
???????????if(P15==0) ??????????//如果檢測(cè)到接P1.5引腳的列線為低電平“0”
?????????????keyval=14; ????????//可判斷是S14鍵被按下
???????????if(P16==0) ?????????//如果檢測(cè)到接P1.6引腳的列線為低電平“0”
?????????????keyval=15; ???????//可判斷是S15鍵被按下
???????????if(P17==0) ?????????//如果檢測(cè)到接P1.7引腳的列線為低電平“0”
?????????????keyval=16; ???????//可判斷是S16鍵被按下
??????????for(i=0;i<200;i++) ?//讓P3.7引腳電平不斷取反輸出音頻
???????????{
??????????????sound=0;
??????????????delay();
?????sound=1;
?????delay();
???????????}
}
?????TR0=1; ???????????????????//開(kāi)啟定時(shí)器T0
?????TH0=(65536-500)/256; ?//定時(shí)器T0的高8位賦初值
??TL0=(65536-500)%256; ?//定時(shí)器T0的高8位賦初值?
?}
/************************************************************************ **液晶顯示LCD*********
總結(jié)
以上是生活随笔為你收集整理的32 引脚_函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频方波的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php密码安全检测,php – 密码安全
- 下一篇: 计算机控制系统开关,电脑远程开关机控制器