当前位置:首页 » 编程语言 » 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语言函数的执行方式去执行。