当前位置:首页 » 编程软件 » 关掉灯的编程

关掉灯的编程

发布时间: 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;
}
如果有什么不懂追问吧

热点内容
eclipse编程 发布:2025-02-06 10:02:21 浏览:636
开源库编译管理员 发布:2025-02-06 09:39:14 浏览:914
脸书怎么注册安卓 发布:2025-02-06 09:36:47 浏览:381
车用安卓导航无线打不开什么原因 发布:2025-02-06 09:27:50 浏览:790
安卓与苹果如何互相传送文件 发布:2025-02-06 09:27:40 浏览:26
华为服务器盘符如何分配 发布:2025-02-06 09:26:41 浏览:560
传奇h5源码下载 发布:2025-02-06 09:26:06 浏览:78
编译uclibc 发布:2025-02-06 09:09:04 浏览:152
用gcc编译16位汇编 发布:2025-02-06 09:06:07 浏览:823
什么低端安卓手机不卡 发布:2025-02-06 09:03:32 浏览:14