Ⅰ 提問a,b按鈕按下,a啟動c延時1秒啟動。關閉時a立即關閉c延時2秒關閉,用c語言怎麼寫
你的描述不是非常清楚,這是按照我的理解給你寫的代碼
#include <stdio.h>
//按鈕最終狀態,按下為1,懸空為0
int key_a;
int key_b;
int key_c;
int main(int argc,char**argv)
{
int key_a_statu = key_a; //按鈕的狀態記錄
int key_b_statu = key_b; //按鈕的狀態記錄
int key_c_statu = key_c; //按鈕的狀態記錄
while(1)
{
if(key_a_statu != key_a)//A狀態變化
{
key_a_statu = key_a;//狀態更新
if(key_a && key_b) //a,b同時啟動
{
sleep(1);
key_c = 1; //C開啟
}
if(!key_a)//a關閉
{
sleep(2);
key_c = 0; //C關閉
}
}
usleep(1000*20);
}
return 0;
}
Ⅱ 需要一個C語言程序。51單片機控制:按鍵按一下,延遲1分鍾後開燈,燈亮半個小時就熄滅的程序急需!
如果對時間要求不精確,用軟延時即可。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit s=P1^0;
sbit led=P1^1;
void delayms(uint i) //1ms延時程序
{
uchar j;
for(;i>0;i--)
{
for(j=0;j<125;j++)//如果延時時間誤差較大,可按比例改變125這個數
//取值范圍0-255,數值越大,延時越長
{;}
}
}
void delay1s(uint i) //1s延時程序
{
for(;i>0;i--){delay1ms(1000);}
}
void main()
{
led=0;
while(1)
{
if (s==0)
{
delayms(20);
if (s==0);{delay1s(60);led=1; }
}
if(led==1){delay1s(1800);led=0; }
}
}
如果對時間要求精確,則要用到定時器,還要確保電路外接有晶振,並已知晶振頻率
Ⅲ 求一個10ms的單片機C語言延時程序《p1按鍵按下p1-1燈亮延時10秒p1-1滅p1-2燈亮p2按鍵按下燈全滅
以12MHz晶振的51單片機為例子:
void Delay_ms(unsigned char ms)
{
unsigned char i, j;
while(--ms)
{
for(i = 10; i > 0; i--)
for(j = 100; j > 0; j--);
}
}
調用Delay_ms(10);延時10ms。
Ⅳ 怎麼用C語言寫可以調節的延時程序,請大俠幫忙
延時程序(包括asm和C程序,都是我在學單片機的過程中用到的),在單片機延時程序中應考慮所使用的晶振的頻率,在51系列的單片機中我們常用的是11.0592MHz和12.0000MHz的晶振,而在AVR單片機上常用的有8.000MHz和4.000MH的晶振所以在網上查找程序時如果涉及到精確延時則應該注意晶振的頻率是多大。
軟體延時:(asm)
晶振12MHZ,延時1秒
程序如下:
DELAY:MOV 72H,#100
LOOP3:MOV 71H,#100
LOOP1:MOV 70H,#47
LOOP0:DJNZ 70H,LOOP0
NOP
DJNZ 71H,LOOP1
MOV 70H,#46
LOOP2:DJNZ 70H,LOOP2
NOP
DJNZ 72H,LOOP3
MOV 70H,#48
LOOP4:DJNZ 70H,LOOP4
定時器延時:
晶振12MHZ,延時1s,定時器0工作方式為方式1
DELAY1:MOV R7,#0AH ;;晶振12MHZ,延時0.5秒
AJMP DELAY
DELAY2:MOV R7,#14H ;;晶振12MHZ,延時1秒
DELAY:CLR EX0
MOV TMOD,#01H ;設置定時器的工作方式為方式1
MOV TL0,#0B0H ;給定時器設置計數初始值
MOV TH0,#3CH
SETB TR0 ;開啟定時器
HERE:JBC TF0,NEXT1
SJMP HERE
NEXT1:MOV TL0,#0B0H
MOV TH0,#3CH
DJNZ R7,HERE
CLR TR0 ;定時器要軟體清零
SETB EX0
RET
C語言延時程序:
10ms延時子程序(12MHZ)
void delay10ms(void)
{
unsigned char i,j,k;
for(i=5;i>0;i--)
for(j=4;j>0;j--)
for(k=248;k>0;k--);
}
1s延時子程序(12MHZ)
void delay1s(void)
{
unsigned char h,i,j,k;
for(h=5;h>0;h--)
for(i=4;i>0;i--)
for(j=116;j>0;j--)
for(k=214;k>0;k--);
}
200ms延時子程序(12MHZ)
void delay200ms(void)
{
unsigned char i,j,k;
for(i=5;i>0;i--)
for(j=132;j>0;j--)
for(k=150;k>0;k--);
}
500ms延時子程序程序: (12MHZ)
void delay500ms(void)
{
unsigned char i,j,k;
for(i=15;i>0;i--)
for(j=202;j>0;j--)
for(k=81;k>0;k--);
}
下面是用了8.0000MHZ的晶振的幾個延時程序(用定時0的工作模式1):
(1)延時0.9MS
void delay_0_9ms(void)
{
TMOD=0x01; /*定時器0工作在模式1下(16位計數器)*/
TH0=0xfd;
TL0=0xa8;
TR0=1; /*啟動定時器*/
while(TF0==0);
TR0=0;
}
(2)延時1MS
void delay_1ms(void)
{
TMOD=0x01; /*定時器0工作在模式1下(16位計數器)*/
TH0=0xfd;
TL0=0x65;
TR0=1; /*啟動定時器*/
while(TF0==0);
TR0=0;
}
(3)延時4.5ms
void delay_4_5ms(void)
{
TMOD=0x01; /*定時器0工作在模式1下(16位計數器)*/
TH0=0xf4;
TL0=0x48;
TR0=1; /*啟動定時器*/
while(TF0==0);
TR0=0;
}
Ⅳ 單片機 c語言程序 按鍵輸出顯示 延時程序。 比如按K1 延時2秒 led=0 亮1秒
這個程序相對比較好實現,就直接設置一個標志位,然後只要K1確認按下了,那麼這個標志位置位嘛,然後就開始在定時器中計時,不佔系統資源,方便,快捷.
Ⅵ 求高手解答怎樣用C語言控制按鍵控制定時器
說到底,按鍵只是產生脈沖信號的,你就可以採用io口中斷來實現這個功能,兩個按鍵接兩個口,一個口一個中斷,一個中斷裡面做啟動,一個中斷裡面做停止,就可以了,希望對你有用
Ⅶ 求助C語言按鍵重復輸入延遲的問題
不要用系統提供的getchar或者scanf這類輸入函數
而是去調用系統api,來獲取按鍵的按下抬起狀態
這樣在識別到按下時,就可以自行控制執行動作的周期,不會出現第一次的停滯
Ⅷ C語言延時的子程序怎麼寫
其實這是不太精準的延時程序,其實質就是for循環,就是讓處理器不停地做遞減或遞加運算,從而達到延時的目的。至於延時時間,完全是更具經驗的得到的。
Ⅸ 怎麼用C語言寫可以調節的延時程序
發了三個程序包給你,都是基於單片機數字鍾設計的程序,可帶按鍵調整時鍾。9.7的那個程序,裡面是用匯編語言編寫的延遲程序,時間精度相對高。但是稍微,Frbqhd
Ⅹ C語言編程,怎麼用按鍵來改變延時的長短
額?延時指的是什麼?你可以調用時間的函數,通過輸入值來減少或者增加時間。但是增加或者減少時間的按鍵必須是同樣的