當前位置:首頁 » 編程軟體 » 關掉燈的編程

關掉燈的編程

發布時間: 2022-08-24 05:47:08

c語言編程挑戰:指示燈控制問題

#include <stdio.h>
int main()
{
int N;
int i,n,r;
printf("Input :\n");
scanf("%d",&N);
int *a=new int[N];
for(n=1;n<=3;n++)
{
for(i=0;i<N;i++)
{
r=(i+1)%n;
if(r == 0)
{
if(n==1)
{
a[i]=0;
}
else
{
if(a[i]==0)
a[i]=1;
else
a[i]=0;
}
}
printf("%d ",a[i]);
}
printf("\n");
}
}

⑵ 單片機控制一個led燈亮滅C編程

#include <reg52.h> //52系列單片機頭文件
#define uint unsigned int //宏定義
sbit led1=P1^0; //聲明單片機P1口的第一位
void delay1s(); //聲明子函數
void main() //主函數
{
while(1) //大循環
{
led1=0; /*點亮第一個發光二極體*/
delay1s(); //調用延時子函數
led1=1; /*關閉第一個發光二極體*/
delay1s(); //調用延時子函數
}
}
void delay1s() //子函數體
{
uint i,j;
for(i=500;i>0;i--)
for(j=110;j>0;j--);
}

⑶ 控制電燈開關的c語言編程

那要用到單片機咯···
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint );
void main()
{
while(1)
{
P1=0x7f;
delay(1000000);
P1=0xff;
delay(1000000);
}
}
void delay(uint z)
{
uint x,y;
for (x=1000000;x>0;x--)
for (y=z;y>0;y--);
}
時間自己調吧,一小時(也就是3600s)太長了,不好調試。。。

⑷ C語言編程式控制制LED燈亮滅

首先要看Led燈和單片機的連接情況,如果只是控制亮滅,只需要看單片機埠控制即可,關鍵是配置埠的DDRx方向寄存器和PORTx數據寄存器,比如埠A的0引腳控制一個燈,要配置它的輸出高電平或是低電平以達到控制燈的亮滅,那就
燈亮:
DDRA |= BIT(0); //輸出
PORTA |= BIT(0);//高電平
燈滅:
DDRA |= BIT(0); //輸出
PORTA &= ~BIT(0);//低電平
其餘的就看你電路如何連接的,每個埠寄存器的每一位控制一個引腳,你可以查查晶元的數據手冊,上邊有個表格的。

如果你要控制燈的亮暗程度,選擇使用PWM輸出來控制,需要看定時計數器。

⑸ 求控制led燈亮滅的常式和詳解

主程序:

LOOP: SETB P10 ;(1)

LCALL DELAY ;(2)

CLR P10 ;(3)

LCALL DELAY ;(4)

AJMP LOOP ;(5)

;以下子程序

DELAY: MOV R7,#250;(6)

D1: MOV R6,#250 ;(7)

D2: DJNZ R6,D2 ;(8)

DJNZ R7,D1 ;(9)

RET ;(10)

END ;(11)

按上面的設想分析一下前面的五條指令。

第一條是讓燈滅,第二條應當是延時,第三條是讓燈亮,第四條和第二條一模一樣,也是延時,第五條應當是轉去執行第一條指令。第二和第四條實現的原理稍後談,先看第五條,LJMP是一條指令,意思是轉移,往什麼地方轉移呢?後面跟的是LOOP,看一下,什麼地方還有LOOP,對了,在第一條指令的前面有一個LOOP,所以很直觀地,我們能認識到,它要轉到第一條指令處。這個第一條指令前面的LOOP被稱之為標號,它的用途就是給這一行起一個名字,便於使用。是否一定要給它起名叫LOOP呢?當然不是,起什麼名字,完全由編程序的人決定,能稱它為A,X等等,當然,這個時候,第五條指令LJMP後面的名字也得跟著改了。

第二條和第四條指令的用途是延時,它是怎樣實現的呢?指令的形式是LCALL,這條指令稱為調用子程序指令,看一下指令後面跟的是什麼,DELAY,找一下DELAY,在第六條指令的前面,顯然,這也是一個標號。這條指令的作用是這樣的:當執行LCALL指令時,程序就轉到LCALL後面的標號所標定的程序處執行,如果在執行指令的過程中遇到RET指令,則程序就返回到LCALL指令的下面的一條指令繼續執行,從第六行開始的指令中,能看到確實有RET指令。在執行第二條指令後,將轉去執行第6條指令,而在執行完6,7,8,9條指令後將遇到第10條令:RET,執行該條指令後,程序將回來執行第三條指令,即將P10清零,使燈亮,然後又是第四條指令,執行第四條指令就是轉去執行第6,7,8,9,10條指令,然後回來執行第5條指令,第5條指令就是讓程序回到第1條開始執行,如此周而復始,燈就在持續地亮、滅了。

在標號DELAY標志的這一行到RET這一行中的所有程序,這是一段延時程序,大概延時零點幾秒,至於具體的時間,以後我們再學習如何計算。 程序的最後一行是END,這不是一條指令,它只是告訴我們程序到此結束,它被稱為"偽指令"。

單片機內部結構分析:為了知道延時程序是如何工作的,我們必需首先了解延時程序中出現的一些符號,就從R1開始,R1被稱之為工作寄存器。什麼是工作寄存器呢?讓我們從現實生活中來找找答案。如果出一道數學題:123+567,讓你回答結果是多少,你會馬上答出是690,再看下面一道題:123+567+562,要讓你要上回答,就不這么不難了吧?我們會怎樣做呢?如果有張紙,就不難了,我們先算出123+567=690,把690寫在紙上,然後再算690+562得到結果是1552。這其中1552是我們想要的結果,而690並非我們所要的結果,但是為了得到最終結果,我們又不得不先算出690,並記下來,這其實是一個中間結果,計算機中做運算和這個類似,為了要得到最終結果,一般要做很多步的中間結果,這些中間結果要有個地方放才行,把它們放哪呢?放在前面提到過的ROM中能嗎?顯然不行,因為計算機要將結果寫進去,而ROM是不能寫的,所以在單片機中另有一個區域稱為RAM區(RAM是隨機存取存儲器的英文縮寫),它能將數據寫進去。特別地,在MCS-51單片機中,將RAM中分出一塊區域,稱為工作寄存器區

⑹ 有可編程晶元,想製作個遠程可控制電燈開或關的程序,要用到什麼知識,代碼是怎麼樣的呢

"有可編程晶元"時要看該款晶元的編程說明,通常和單片機有關,還要用到諸如繼電器、編程晶元的介面或管腳說明、基本電器常識,代碼通常是用C語言的多,也有匯編等等

⑺ 跪求這道c語言編程啊一百個燈泡排成一排,第一輪將所有燈泡打開;第二輪每隔一個燈泡關掉一個。即排在偶

//哥們 這個中
#include <stdio.h>
#include <conio.h>
#define LIGHT_NUMBER100
int main(){
int i=0,j=2,n,number=LIGHT_NUMBER;
int a[LIGHT_NUMBER];
for(i=0;i<LIGHT_NUMBER;i++) a[i]=1;//1代表燈亮
printf("請輸入輪數(大於0):");
scanf("%d",&n);//輸入輪數
while(j<=n){
for(i=j%LIGHT_NUMBER-1;i<LIGHT_NUMBER;i+=j)//依次檢查每個燈是否亮或滅
if(a[i]==0){ //如果不亮(=0),就另其亮(=1)
a[i]=1;
number++;
}else{
a[i]=0;
number--;
}
j++;
}
printf("亮燈的個數:%d\n",number);
printf("按任意鍵繼續...\n");
getch();
return(0);
}

⑻ 用軟體編程來控制電燈的開關

編程的就用PLC,即可編程式控制制器。歐姆龍的編程簡單。

⑼ C語言經典程序n個人n盞燈第一個人關掉所有的燈!第二個人把二的倍數的燈取反!第三個人把三的倍數取反

你把問題想簡單了
提點建議:對程序提問,最好是有一定的注釋,並對自己的程序設計思想有所闡述,這樣會比較方便別人的理解!
這道題的關鍵點是,如果第2個人開燈,那麼第4、6、8號的燈都開了。等到第4個人開燈的時候,他會把第4、8號燈又都關上了!因此這是關鍵點!
所以我採取的設計思想是:設關燈為0,開燈為1;設燈的狀態為a,那麼對燈進行一次操作後變為|a-1|,如果燈一開始是關的(0),操作後變為|0-1|=1(燈開了),如果一開始燈飾開的(1),操作後變為|1-1|=0(燈關了)!代碼如下:
#include<stdio.h>
#include<math.h>
#define Max 100

int main()
{
int n; //n個燈,n個人
printf("請輸入n的值:");
scanf("%d", &n);
int a[Max]; //定義一個數組,放置n個燈的狀態,0為關燈,1為開燈;

for (int i = 0; i < n; i++){ //將所有燈泡對應的狀態設為0(即都關燈);
a[i] = 0;
}

for (int i = 2; i <= n; i++){ //從第2個人開始進行操作
for (int j = 1; j <= n; j++){ //遍歷1~n,找出i的倍數。這里注意,由於數組的特性,j=1的話對應的是a[0]
if (j%i == 0)
a[j-1] = abs(a[j-1] - 1); //abs()是取絕對值,如果一開始是0,減1後取絕對值為1;如果一開始為1,減1後為0;
}
}
printf("0為關燈,1為開燈\n");
for (int i = 0; i < n; i++){
printf("%d ", a[i]); //輸出每一盞燈的開關狀態,你也可以自己統計開燈關燈的數目!
}
return 0;
}
如果有什麼不懂追問吧

熱點內容
驚聲尖笑5下載ftp 發布:2025-02-06 06:33:16 瀏覽:528
共享文件夾讓輸入密碼 發布:2025-02-06 06:32:28 瀏覽:970
收銀伺服器響應出錯什麼意思 發布:2025-02-06 06:24:43 瀏覽:607
sql用戶授權 發布:2025-02-06 06:24:42 瀏覽:677
蘋果手機相冊顯示正在上傳 發布:2025-02-06 06:05:43 瀏覽:542
hadoop下載文件夾 發布:2025-02-06 06:05:08 瀏覽:187
鎧最強配置是哪些 發布:2025-02-06 06:04:22 瀏覽:360
編譯器的製作環境 發布:2025-02-06 05:54:34 瀏覽:829
學車網源碼 發布:2025-02-06 05:47:40 瀏覽:386
搭建區域網影院伺服器 發布:2025-02-06 05:47:38 瀏覽:760