導航:首頁 > 操作系統 > 單片機alarm函數

單片機alarm函數

發布時間:2022-09-01 13:23:43

⑴ [51單片機] 關於數字鍾的拓展訓練

sbit alarm = P0^7; //作報警輸出
sbit S2 = P0^0; //按鍵S2輸入復位用,口線上接個上拉電阻
int count;//脈沖個數

計數器配置
void Port_Init(void)
{
TMOD=0x50; //T1計數器模式1,16位計數方式;
TR0 =1; //啟動計數器
ET1 = 1; //開定時器1中斷
EA = 1; //開總中斷
}
//-------------定時器1中斷程序---用於對5K脈沖計數------------
void Timer1_int() interrupt 3
{
count++;
}
main()
{
while(1)
{
if(count >300)
{
alarm = 1;//報警輸出,可以用指示燈或者蜂鳴器作為輸出設備
count =0;
}
if(S2==0)alarm = 0;//復位清除報警
}

}

⑵ 那位幫忙看個單片機匯編程序 其中ALARM是如何調用的

Sound處說你試圖重新定義一個前面已經定義過的標號,注意匯編編譯的時候不區分大小寫,所以你要另換一個標號,其它兩處我只知道字面的意思,不過我想問一下你這段是一個程序段還是一個asm文件

⑶ alarm(60); 在51單片機中是什麼意思

應該是調用alarm函數語句

⑷ 求教,怎樣控制51單片機的蜂鳴器發出不同頻率的聲音

蜂鳴器是不能發出不同頻率的聲音的,要發出不同頻率的聲音,你需要選擇speaker,比如:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit SPK=P1^0;
sbit K1=P1^7;
//發聲函數
void Alarm(uchar t)
{
uchari,j;
for(i=0;i<200;i++)
{
SPK=~SPK;
for(j=0;j<t;j++); //由參數t行成不同的頻率
}
}
voidmain()
{
SPK=0;
while(1)
{
if(K1==1)
{
Alarm(90);
Alarm(120);
}
}
}

⑸ 單片機用C語言讓蜂鳴器發出兩種聲調,怎麼編程

不會修改程序,但是可以送你一段程序,如果有心就看看吧;
//以下程序運行於STC12C**單片機
//
BUZ為蜂鳴器輸出I/O口定義名稱
void
Delay_1us(uint
aa)
//1T單片機/12MHz的n個us用於蜂鳴器
{
while
(aa--)
{
_nop_();
_nop_();
}
}
/*----------------------------
響一聲短音
----------------------------*/
void
beep(void)
{
uint
a;//定義變數用於發聲的長度設置
for(a=300;a>0;a--)//第一個聲音的長度
{
BUZ
=
~BUZ;//產生音頻
Delay_1us(100);//音調設置,延時調整賦值量可以調節音調
}
BUZ
=
1;//音樂結束後揚聲器關閉
}

⑹ c51單片機時鍾,按鍵可使其從當前時間倒計時

#include<reg51.h>

#defineucharunsignedchar
ucharcodeledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0-9
unsignedcharsec=0,min=0,hour=24,scanled;
unsignedcharkey,mode,time;
unsignedchardisdat[8];
unsignedcharalarm[3]={23,59,0},dly;
sbitkeyhu=P1^0;
sbitkeyhd=P1^1;
sbitkeymu=P1^2;
sbitkeymd=P1^3;
sbitkeysu=P1^4;
sbitkeysd=P1^5;
sbitkeyst=P1^6;
sbitfmq=P3^0;
bitflag=0;


voiddelay(unsignedintx)
{
unsignedinti,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
voiddischg()
{
disdat[0]=sec%10;
disdat[1]=sec/10;

disdat[2]=min%10;
disdat[3]=min/10;

disdat[4]=hour%10;
disdat[5]=hour/10;
}
voidt0isr()interrupt1 //秒計時
{
TH0=0x3c;
TL0=0xb0;
time++;
switch(mode)
{
case0:
if(time==20)
{
time=0;
sec++;
if(sec>59)
{
sec=0;
min++;
if(min>59)
{
min=0;
hour++;
if(hour>23)hour=0;
}
}
}
break;
case1:
if(time==20)
{
time=0;
if(sec>0&&flag==0)sec--;
elseif(min>0&&flag==0){sec=59;min--;}
elseif(hour>0&&flag==0){sec=59;min=59;hour--;}

if((hour==alarm[0])&&(min==alarm[1])&&(sec==alarm[2])){fmq=1;flag=1;dly++;}
}
break;
}
if(dly>=2){fmq=0;flag=0;TR0=0;dly=0;}
dischg();
}
voidt1isr()interrupt3 //顯示
{
TH1=0xec;
TL1=0x78;
switch(scanled)
{
case0:
P2=0x20;
P0=~ledtab[disdat[5]];
break;
case1:
P2=0x10;
P0=~ledtab[disdat[4]]&0x7f;
break;
case2:
P2=0x08;
P0=~ledtab[disdat[3]];
break;
case3:
P2=0x04;
P0=~ledtab[disdat[2]]&0x7f;
break;
case4:
P2=0x02;
P0=~ledtab[disdat[1]];
break;
case5:
P2=0x01;
P0=~ledtab[disdat[0]];
break;
default:break;
}
scanled++;
scanled%=6;
}
main()
{
TMOD=0x11;
TH0=0x3c;
TL0=0xb0;
TH1=0xec;
TL1=0x78;
TR1=1;
TR0=0;
ET0=1;
ET1=1;
EA=1;
fmq=0;
scanled=0;
time=0;
mode=1;
dischg();
while(1)
{
if(keyhu==0)
{
while(keyhu==0);
TR0=0;
hour++;
hour%=24;
}
if(keyhd==0)
{
while(keyhd==0);
TR0=0;
if(hour>0)hour--;
if(hour==0)hour=23;

}
if(keymu==0)
{
while(keymu==0);
TR0=0;
min++;
min%=60;
}
if(keymd==0)
{
while(keymd==0);
TR0=0;
if(min>0)min--;
if(min==0)min=59;
}
if(keysu==0)
{
while(keysu==0);
TR0=0;
sec++;
sec%=60;
}
if(keysd==0)
{
while(keysd==0);
TR0=0;
if(sec>0)sec--;
if(sec==0)sec=59;
}
if(keyst==0)
{
while(keyst==0);
TR0=~TR0;
}
dischg();
}
}

⑺ 求助單片機設計 數字鍾

大路你基本上都已經說的了,但我覺得不如直接用12887或1302時鍾晶元,報時用一個語音晶元

⑻ 51單片機的電子密碼鎖程序,用KEIL C寫的

以前幫別人做過一個類似的

#include<reg52.h>

#include <def.h>

#include"lcd.c"

uchar key;

uchar num;

sbit alarm=P2^4;

sbit open=P2^1;

uchar code table[]={' ','1','2','3',

'4','5','6','7',

'8','9','0'};

void keyscan();

uchar hptable[10];

uchar password[6];

uchar wordbuf[6];

uchar fom[]="input password:";

uchar change[]="set mask:";

uchar state1[]="right";

uchar state2[]="error";

uchar sflag;

uchar dflag,cnt;

uchar setf,fset;

uchar flag;

void main ()

{

uchar hp;

alarm=0;

flag=0;

setf=0;

fset=0;

dflag=0;

lcden=0;

lcdrw=1;

lcdrs=1;

P3=0x0f;

for(hp=0;hp<6;hp++)

{

password[hp]='8';

}

write(0x38,0); //0為寫命令

delay(9);

write(0x08,0);

write(0x01,0);

write(0x06,0);

write(0x0c,0);

write(0x80,0);

for(hp=0;hp<15;hp++)

{

write(fom[hp],1);

}



while(1)

{

// alarm=!alarm;

keyscan();

if(setf==0)

{

if(num>=1&&num<=10)

{

write(0x80+0x40+cnt,0);

write('*',1);

wordbuf[cnt]=table[num];

cnt++;

num=0;


}

}

else

{

write(0x01,0);

write(0x80,0);

for(hp=0;hp<9;hp++)

{

write(change[hp],1);

}

fset=1;

cnt=0;

while(fset)

{

keyscan();

if(num>=1&&num<=10)

{

write(0x80+0x40+cnt,0);

write('*',1);

password[cnt]=table[num];

cnt++;

num=0;


}

if(num==11)

{

write(0x80+0x40+cnt-1,0);

write('',1);

cnt--;

num=0;

}

if(num==13)

{



flag=1;

num=0;

fset=0;

setf=0;

// goto chuz;

}


}

cnt=0;

}

if(flag==1)

{

write(0x01,0);

write(0x80,0);

for(hp=0;hp<15;hp++)

{

write(fom[hp],1);

}

flag=0;

}

if(num==11)

{

write(0x80+0x40+cnt-1,0);

write('',1);

cnt--;

num=0;

}

if(num==12)

{

if(dflag==1)

setf=1;

num=0;

}

if(num==13)

{

num=0;

write(0x80+0x40+10,0);

if(wordbuf[0]==password[0]&&wordbuf[1]==password[1]&&wordbuf[2]==password[2]&&wordbuf[3]==password[3]&&wordbuf[4]==password[4]&&wordbuf[5]==password[5])

{


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

{

write(state1[hp],1);

}

sflag=0;

dflag=1;

}

else

{

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

{

write(state2[hp],1);

}

sflag++;


}

}

if(sflag==3)

{

alarm=!alarm;

//delay(9);

}

if(num==14)

{

num=0;

cnt=0;

write(0x01,0);

write(0x80,0);

for(hp=0;hp<15;hp++)

{

write(fom[hp],1);

}

}

if(num==15)

{

if(dflag==1)

{

open=0;

dflag=0;

}

}

}

}


void keyscan ()


{

uchar tem,temp;

P3=0xfe;

temp=P3;

tem=temp&0xf0;

if (tem!=0xf0) //沒有鍵按下時它的值是不變的,即仍為0XF0,而有鍵接下時要變

{

delay(5); //延時消抖

temp=P3;

tem=temp&0xf0;

if (tem!=0xf0) //確認有鍵按下

{

temp=P3;

tem=temp&0xf0; //這里也可以不要這一步,但下面的case里的值也要變

switch (tem)

{

case 0xe0: num=0; break;

case 0xd0: num=1; break;

case 0xb0: num=2; break;

case 0x70: num=3; break;

default : ; break ;



}

while(tem!=0xf0) //等待鬆手

{

temp=P3;

tem=temp&0xf0;


}

}


}

P3=0xfd;

temp=P3;

tem=temp&0xf0;

if (tem!=0xf0)

{

delay(5);

temp=P3;

tem=temp&0xf0;

if (tem!=0xf0)

{

temp=P3;

tem=temp&0xf0;

switch (tem)

{

case 0xe0: num=4; break;

case 0xd0: num=5; break;

case 0xb0: num=6; break;

case 0x70: num=7; break;

default : ; break ;



}

while(tem!=0xf0)

{

temp=P3;

tem=temp&0xf0;


}

}


}

P3=0xfb;

temp=P3;

tem=temp&0xf0;

if (tem!=0xf0)

{

delay(5);

temp=P3;

tem=temp&0xf0;

if (tem!=0xf0)

{

temp=P3;

tem=temp&0xf0;

switch (tem)

{

case 0xe0: num=8; break;

case 0xd0: num=9; break;

case 0xb0: num=10; break;

case 0x70: num=11; break;

default : ; break ;



}

while(tem!=0xf0)

{

temp=P3;

tem=temp&0xf0;


}

}


}

P3=0xf7;

temp=P3;

tem=temp&0xf0;

if (tem!=0xf0)

{

delay(5);

temp=P3;

tem=temp&0xf0;

if (tem!=0xf0)

{

temp=P3;

tem=temp&0xf0;

switch (tem)

{

case 0xe0: num=12; break;

case 0xd0: num=13; break;

case 0xb0: num=14; break;

case 0x70: num=15; break;

default : ; break ;



}

while(tem!=0xf0)

{

temp=P3;

tem=temp&0xf0;


}

}


}

}

閱讀全文

與單片機alarm函數相關的資料

熱點內容
程序員可以干什麼 瀏覽:70
績效考核權重分配演算法 瀏覽:524
android應用logo 瀏覽:898
光遇安卓服墓土商店什麼時候開 瀏覽:566
月收益翻倍的源碼 瀏覽:637
asop源碼放在哪裡 瀏覽:989
電腦伺服器密碼怎麼找 瀏覽:574
jdp轉換pdf 瀏覽:749
把pdf導入iphone 瀏覽:508
米哈游租賃的雲伺服器是哪個 瀏覽:524
android直接打電話 瀏覽:1016
ubuntu停止命令 瀏覽:283
cnc攻絲編程 瀏覽:869
換個手機號碼app怎麼注冊 瀏覽:320
怎麼下載小猴口算app 瀏覽:115
輕鏈app的貨怎麼樣 瀏覽:625
電腦里的u盤如何加密 瀏覽:371
我的世界全部版本伺服器下載地址 瀏覽:50
交換原理pdf 瀏覽:230
菜鳥驛站app怎麼邀請新人 瀏覽:449