當前位置:首頁 » 編程語言 » c語言實現開關邊沿觸發
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言實現開關邊沿觸發

發布時間: 2023-05-22 13:30:46

① 求用c語言編程實現51單片機的LED燈移動

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar a,b,c,d;
void delay()
{
uint i;
for(i=0;i<200;i++)

}
void anjian()
{
if(P1^0==0)

{
delay();
if(P1^0==0)
a=1;

}
if(P1^1==0)

{
delay();
if(P1^1==0)
b=1;

}
if(P1^2==0)

{
delay();
if(P1^2==0)
c=1;

}
if(P1^3==0)

{
delay();
if(P1^3==0)
d=1;

}
}

void main()
{
while(1)

{
anjian();
if(a==1)

....... //io口做相應的處理,這里你具體沒說明,我都不知道怎麼寫了

if(b==1)
.......
if(c==1)
.......

if(d==1)
.......

}
}

② 求通過一個開關的通斷實現兩種功能的切換,C語言程序,主程序應該如何設計

給你個沒有按鍵百的,按鍵程序自己加上就行了

#include <reg51.h>

void main()

{
unsigned int i = 0; //定義循環變數i,用於軟體延時度
unsigned char cnt = 0; //定義計數變數cnt,用於移位控制

while (1) //主循環,程序無限循環執行該循環體語句
{
P0 = ~回(0x01 << cnt); //P0等於1左移cnt位,控制8個LED
for (i=0; i<20000; i++); //軟體延時
cnt++; //移位計數變數自加1
if (cnt >= 8) //移位計數超過7後,再重新答從0開始
{
cnt = 0;
}
}
}

③ 用c語言一個開關控制兩個燈開關閉合燈1亮燈2滅開關打開燈1滅燈2亮

開關控制的話就不用編程語言了好嗎,因為開關是直接的物理連接,通過電路實現就好,那我就理解成你是想用單片機來實現吧,首先單片機與外設怎樣連接我不考慮,因為你沒說。那麼我就當是我可以隨意的使用單片機的輸出吧,然後開關閉合理解成按鍵是高電平,再按一次取反。

#include<89c51.h>//是不是這個頭文件記不清了。。
#defineuintunsignedint
#defineucharunsignedchar
#defineLED1P1_0
#defineLED2P1_1
#defineKEY1P0_1

/*函數聲明,延遲函數,LED燈初始化函數,按鍵KEY初始化,按鍵KEY查詢函數*/
voidDelayMs(uintn);
voidLEDInit(void);
voidKEYInit(void);
ucharKEYScan(void);

/*主函數*/
voidmain()
{
LED1=0;
LED2信襲碼=1;//不同的接法可能導致結果不一樣,有的高電平亮有的低電平
while(1)//具體看你自己的板子怎麼接的
{
if(KEYScan())
LED1=~LED1;
LED2=~LED2;
}
}


/*檢測按鍵狀態*/
ucharKEYScan(void)
{
if(KEY1==0)
DelayMs(100);//延時一段時間,以免抖動
禪宏if(KEY1==0)
{
滑哪DelayMs(100);
while(KEY1==0);
return1;
}
else
return0;
}


/*延遲函數*/
voidDelayMs(uintn)
{
inti;
while(n--)
{
for(i=587;i>0;i--);
}
}

以上代碼是做CC2530實驗的時候做的,修改了一下。

④ C語言:開關燈

#include"stdio.h"
intmain(intargc,char*argv[]){
charlmp[5001];
inti,j,N,M;
printf("PleaseenterN&M(int0<N<5001,0<M<=N)... ");
if(scanf("%d%d",&N,&M)!=2||N<1||N>5000||M<1||M>N){//保證輸入的N,M符合要求,否則退出
printf("Inputerror,exit... ");
return0;
}
for(i=1;i<=N;lmp[i++]=1);//N盞燈全開啟(原始狀態)
for(i=1;i<=M;i++)//遍歷M個人
for(j=1;j<=N;lmp[j++]^=!(j%i));//每個人把與自己編號成整數倍的燈作相反操作
for(j=0,i=1;i<=N;i++)//輸出,從編號小至大遍歷所有燈
if(!lmp[i])//輸出已被關閉的燈的編號
printf(j++?",%d":"%d",i);
printf(" ");
return0;
}

運行樣例:

⑤ 請按照如下下降沿/上升沿觸發時序圖寫一段C語言程序

電子的課程我幾乎全忘了,我翻了翻書,我當初學51單片機串口通信,用的是匯編。
我當初用C語言寫51單片機代碼的時候,編譯變成機器代碼,但是keil編輯器可以把機器代碼轉成助記符,就是匯編。我看了之後發現一條C語言代碼會翻譯成多條匯編,如果是循環,翻譯成匯編就會更復雜,所以用C語言寫51單片機代碼,代碼運行時間會更長,時間不能自己掌握,因為我不知道翻譯成多少條匯編了。所以51單片機還是要用匯編寫比較好。
我也不知道為什麼你會直接用C語言寫時序圖,我只是覺得用匯編會簡單點。

⑥ 用c語言來控制一個輕觸開關,那種開關是按下去是閉合的,但是一鬆手開關就斷開了。

這個開關如果不是總電源的話,還是很容易實現的,比如,你可以定義個全局變數,初始值為0,然後單片機檢測按鍵是否按下,按下則對這個變數取如坦慎反,然後判斷這個渣敬是否為0xff(定義開啟電機的值為0xff),是那就開啟電機,否則關閉;如信散果這個開關時總電源的開關的話,則有點麻煩,需要有硬體的支持。

⑦ c語言 用邊沿觸發使流水燈暫停,按鈕控制,按一下暫停,按一下繼續

#include<reg52.h> //引用庫文件

void delay() //延時函數

{

unsigned char i,j; //定義兩個變數,用於空循環

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

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

;

}

unsigned char flag;

void main()

{

unsigned char i;

flag=1;

EA=1; //開放總中斷

EX0=1; //允許使用外中斷

橘衫橋IT0=1; //選擇負跳變來觸發外中斷

while(1) //用於反復循環

{


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

{

P1=~(1<<i);

delay(); //調用延時函數

while(flag!=1);

}

i=0;

//

}

}


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

函數功能:外中斷T0的中斷服務程序

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

void int0(void) interrupt 0 using 0 //外中斷0的中斷編圓猛號為0

{

flag=~flag;


}


模擬圖:


樓主的採納率好低啊(時間久了,估計塌嘩給你回答的人會變少),不過我還是希望樓主能採納

⑧ 幫我看看這段程序為什麼編譯時錯誤,求高手幫我改下啊。修改後可以用的話我會追加分的。謝謝啦。

#include<reg51.h>
#define LEDData P0
unsigned char code LEDCode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char time=99;
unsigned char second,count,count1; //秒,計數器
sbit LEDH = P2^6; //高位陰極
sbit LEDL = P2^7; //低位陰極
sbit buzzer = P2^5; //蜂鳴器
sbit Alam=P3^6;

bit Over = 0; //倒計時到0標志
void buzzer1(void);
void Delay5ms(void)
{
unsigned int i;
for(i=1000;i>0;i--);
}
void DisplayTime(void)
{
LEDData=LEDCode[second/10];
LEDH=0;
Delay5ms();
LEDH=1;
LEDData=LEDCode[second%10];
LEDL=0;
Delay5ms();
LEDL=1;
}
//******************************主函數*************************************************

void main(void)
{
TMOD=0x11; //兩個8為計數器
TL0=0xb0; //兩個8位定時計數器
TH0=0x3c; //兩個8位定時計時器
TL1=0xb0; //作計數器
TH1=0x3c; //作寄存器
second=time;
EA=1; //總中斷打開
ET0=1; //定時器0中斷打開
ET1=1; //定時器1中斷打開
TR0=0; //定時器0開關關閉
TR1=0; //定時器1開關關閉
EX0=1; //外部中斷0開
IT0=1; //邊沿觸發
IT1=1; //邊沿觸發
EX1=1; //外部中斷1開
PX0=1; //外部中斷0為高優先順序控制圓塵明位
PX1=1; //外部中斷1為高優先順序控制位
PT0=0; //定兄則時/ 計數器T0為低優先順序中斷
while(1)
{
DisplayTime();
if(Over)
{ //
buzzer1();//();/延時一會兒buzzer();延時一會兒buzzer();延時一會兒
}
}
}
void PxInt0(void) interrupt 0
{
if(Over==1)
{
second=time;
Over=0;
TR1=0; //定時器1開關關閉
Alam=1;
TH1=0x3C; //作寄存器
TL1=0xB0; //作計時器
}
else
{
second=second;
}
TR0=1; //--------------開啟計時器
}
void PxInt1(void) interrupt 2
{
TR0=0; //--------------關閉計時器
}

//*********************************中斷服務函數**************************************
void time0_int(void) interrupt 1
{
TL0=0xb0; //計時器
TH0=0x3c; //寄存器
TR0=1; //開啟計時器
count++;
if(count==20)
{
count=0;
second--;
if(second==0)
{
second=0;
Over=1;
TR0=0; //定時器橘告0關閉
TR1=1; //定時器1打開
}
}
}
//*********************************中斷服務函數**************************************
void time1_int(void) interrupt 3
{
TL1=0xb0; //計時器
TH1=0x3c; //寄存器
TR1=1; //定時器1打開
count1++;
if(count1==10)
{
count1=0;
Alam=~Alam;
buzzer1();//();調用響一聲函數
}
}
//*********************************響一聲函數**************************************
void buzzer1(void)
{
unsigned int b,c;
for(b=60;b>0;b--)
{ for(c=3;c>0;c--)
buzzer=!buzzer; //將蜂鳴器控制端取反
}
}

⑨ 單片機C語言中,設外中斷為邊沿觸發, 高級中斷 編寫中斷初始化main的函數

這是單片機c語言中斷函數的編程拆缺格式,(團敏)後面的只是告訴編譯系統該函數是塌御枝一個中斷函數,具體的執行還是按照c語言函數的執行方式去執行。