51单片机怎么用c语言写一个按钮控制一个led的闪烁,按一下开始闪烁,再按就灭掉

作者&投稿:生媚 (若有异议请与网页底部的电邮联系)
用单片机c语言一个按键控制led的闪烁和熄灭,就是按一下闪烁,再按就熄灭。~

首先你的贴出来的程序不完整,最好贴出完整代码!
其次,如果你的程序没问题的话,你的LED闪烁是必须在你按住按键且不能弹起情况下才会发生的,你是一直按着吗?
而且注意你n的类型,因为你这样一直加,会溢出的

1、首先打开桌面上的keil软件,在进行对51单片机进行编程时最常用的就是keil软件。

2、编写相应的代码:#include //定义单片机的头文件sbit led=P2^0; //定义单片机的管脚,void main(void) //主函数{ while(1) //无限循环 {led=0x1f; //点亮前面三个灯。这里是十六进制的换算, //不懂得可以查一下资料 }。

3、打开烧写软件,点击【打开文件】,寻找刚刚编写的程序。

4、找到相应的文件夹以后,寻找HEX文件。这是所能烧写软件识别的程序。

5、找到程序以后,将单片机连接到电脑,并点击程序下载,将程序烧写进单片机。

6、程序下载进单片机以后就能够看到八个led点亮了前面三个。

bit flash;//闪烁标志位
sbit led=P0^0;
sbit P01=P0^1;
sbit P02=P0^2;
void main()

{
P01=P02=0;
flash=0;
led=0;
while(1)
{
scankey();
ledflash();
}
}
void scankey()//键盘扫描
{
P01=1;//行线给1
if(P02)//如果P02也是1则说明接通
{
delay(10);//去抖动10MS
if(P02)//再次确定按键按下
{
while(P02){flash=flash}//按住按键的动作
flash=~flash;//按键按下后执行动作
}
}
}
void ledflash()
{
if(flash)
{
led=1;//点亮
delay(100);//延时100MS
led=0;//熄灭
}
else led=0;
}
void delay(unsigned int i)
{自己根据单片机频率写个1MS带形参的演示程序}

这个程序是现写的。。应该能执行,有些细节没有写,自己修改下,只是个大框而已(比如函数声明,定义端口什么的)

sbit key = P1_0;
sbit led = P1_1;
#define led_on 0
main()

{
while( key )
{
led = ! led_on;

}

while(!key)

{
led = led_on;

delay( 100 );

led = ! led_on;

delay( 100 );

}
}
上面这个是按下闪,松开灭的程序,稍微改一下,就可以做到要求的功能。
main()

{
while( ! key )
{
led = ! led_on;

}

while( key )

{
led = ! led_on;

}

while( ! key )

{
led = led_on;

delay( 100 );

led = ! led_on;

delay( 100 );

}
while( key )

{
led = led_on;

delay( 100 );

led = ! led_on;

delay( 100 );

}
}

#include<reg51.h>
sbit x=P3^0;//p3.0接按钮
sbit y=P1^0;//p1.0接led
void main()
{
while(1)
{
while(x==0)
{
y=!y;//闪烁
}
y=0;//停止闪烁
}
}
注意我是在keil c里面编写的,你要注意电路图的电平

用一个中断子程序和闪烁灯主程序。

只能使用中断了


c51单片机c语言交通灯的程序
sbit k5=P3^1;sbit Yellow_nb=P2^5; \/\/南北黄灯标志 sbit Yellow_dx=P2^2; \/\/东西黄灯标志 sbit Green_nb=P2^4;sbit Green_dx=P2^1;sbit Buzz=P3^7;bit Buzzer_Indicate;bit time=0;\/\/灯状态循环标志 bit set=1;\/\/调时方向切换键标志 uchar code table[11]={ \/\/...

用C语言对单片机编程如何定义C51单片机
sbit P00=P0^0;sbit P01=P0^1;……\/\/数字是我臆造的,不同的CPU值是不同的.这样子的定义可以让你只需要知道怎么用端口,而不需要去知道端口位置.所以当你知道端口位置时,不用包含头文件,自己写这些宏定义,也能达到同样的效果。你说的ATx51是不是指atmel的系列单片机??是的话,用reg51就可以...

请求解释单片机C语言问题
单片机编程开始几步:1.定义寄存器(又叫寄存器初始化).2.初始化全局变量.3.初始化局部变量.4.中断位的开启及中断优先级的开启.等等.main()为程序的入口点,程序进入后首先调用Uart_Init()对SCON(串行控制寄存器),TMOD(定时器\/计数器控制寄存器),TCON(定时器\/计数器方式寄存器)初始化及定时器1的TH1...

单片机C语言程序中:while(1)是什么意思呀?while(2)行不行?
while(1)表示无限循环的执行它{ }内的语句,如果写成while(2)、while(3)等效果是一样的,操作方法如下:1、首先新建一个项目,添加头文件,如图所示。2、接着输入main函数,如图所示。3、然后定义一个数组(长度为:5),如图所示。4、接着使用while循环把数组打印出来,如图所示。5、然后在键盘上,...

单片机C语言
P1&0x07意思是两个数按位取与:P1的初值也是0x07化为二进制为00000111.按位取与懂吧?比如00001111&11000011结果是00000011.如果没有按键按下P1=0x07,那P1&0x07就是0x07.所以P1&0x07)!= 0x07;和P1!=0x07;\/\/两者本质是一样的 P1&0x07)|0xf8呢就是前两个数按位与,再和后面的数按位...

关于单片机C语言不懂得问题
编写程序时,用“C语言里的固定写法”,有时会嫌长,打字太多,想用短一些的字符来代替,那么就在前边写上:define uchar unsigned char \/\/定义无符号字符 以后就可以用“uchar”代替“unsigned char”。那么 uchar temp 就和 unsigned char temp 相同。uchar temp 就是指定了一个无符号字符变量...

在单片机C语言中如何对变量的某一位进行操作或赋值。
1、使用位域 在C语言中定义位域的一般格式如下:struct 位域结构名 { 位域列表 };struct:在C语言中定义位域所使用的关键字是struct。位域结构名:是一个C语言中的标识符,有字母、数字、下划线组成,而且第一个字符必须是字母或者下划线。位域列表:组其中位域列表的形式为: 类型说明符 位域名:...

单片机控制数字电位器的c语言程序
数字电位器用的是X9C103 include<reg51.h> include<stdio.h> include<intrins.h> define uchar unsigned char define uint unsigned int \/\/设定四个按键 sbit X9C102=P2^0;sbit X9C202=P2^1;sbit X9C302=P2^2;sbit X9C402=P2^3;sbit X9C103_CS=P1^0;sbit X9C103_INC=P1^1;sbit X9...

初学者求教:单片机C语言编程如何用一个主程序将几个不同功能子程序的...
main(){ ...\/\/定义 switch(uMainCnt){ case 0:SubPrg1(); \/\/子程序1 uMainCnt++;break;case 1:SubPrg2(); \/\/子程序2 uMainCnt++;break;...default:uMainCnt=0;} }

单片机c51求大神写一个C语言程序!挺急的
include<reg51.h>#include<intrins.h>void delay(int a){unsigned char i;while(a--)for(i=0;i<120;i++);}void ext0() interrupt 0{P1=0xff;delay(5000);}main(){unsigned char led=0xfe;EX0=1;IT0=1;EA=1;while(1) { P1=led; led=_crol_(led,1); delay(...

独山子区14777839089: 单片机 用C语言怎么编写用一个按钮,控制一盏灯的亮与灭的程序? -
别马万适: 设按钮状态(高/低)输入某个IO口; 找到读取这个IO口的数据地址; 程序不断读取这个地址,并比较相应位是否有变化; (要有去抖处理,否则一次按键会产生多个变化) 设指示灯对应的IO口数据地址; 根据按键发生与否设置这个IO口相应位进行翻转.

独山子区14777839089: 51单片机C语言控制按键蜂鸣器 -
别马万适: unsigned char flag=1; //定义上升沿ready标志 while(1) {if(key1&&flag) // 默认key1下拉至GND,若产生上升沿,则响一次,同时清零标志 {SPK=1;delay();SPK=0;flag=0;}if(!key1) { flag=1;} //检测key1是否归零 准备第二次上升沿,是,则标志位置1...... } 仅供参考

独山子区14777839089: 在51单片机中用c语言keil写程序实现用一个按键控制6个灯的亮和灭(按下按 -
别马万适: #include<reg51.h> sbit key=P1^0; sfr LED=P0; main() { while(1) if(key==0)P0=0xc0; else P0=0xff; }

独山子区14777839089: 在51单片机中用c语言写程序实现用一个按键控制8个灯的亮和灭(按下按键全部灯亮,按下按键全部灯灭) -
别马万适: 你首先要确定你的电路.选择什么单片机和数码管,8个按键最简单8个IO口控制.一般简单的是用三极管驱动数码管.如果你会C语言的话,很容易上手.自己先从控制1个数码管学,在控制2个数码管(2个数码管基本上可以完成上面试验,8个...

独山子区14777839089: 51单片机c语言设计,按键控制数码管,依次按下显示0到9循环 -
别马万适: #include<reg51.h> sbit k1=P1^0; #define uint16 unsigned int #define uchar unsigned char uchar code shuzu[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay() { uint16 i=1000;while(i--); } void main() { uchar n ; P2=0xfe; P1=0xff; ...

独山子区14777839089: 51单片机,c语言编程 一个按键控制6盏灯 第一下所有灯灭(不管灯亮灭) 第 -
别马万适: #include#define u16 unsigned int#define u8 unsigned char sbit key=P2^0; u8 count=0; u8 sk(){ static u8 ms; if(key==0){ if(ms if(ms==5){ return 0; } } return 1; } void main()//主函数 { while(1){ if(sk()==0){ count++; switch(count){ case 1:P1=0xff;...

独山子区14777839089: 单片机AT89C51用C语言编,两个按钮分别控制一个数码管加减数,最好用中 -
别马万适: #include<reg51.h>#define uchar unsigned char uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //0到f uchar dat; void ext0() interrupt 0 { dat++; dat%=10; P1=distab[dat]; } ext1() interrupt 2 ...

独山子区14777839089: 求教大婶们~51单片机单个按键控制流水灯C程序 -
别马万适: 很简单啊,只提供一个简单思路, 所以只提供简单的程序,自己理解 char flag=0;viod main() { while(1) { if(key==0 ) //假设0 按下按键 { flag=~flag; } if(flag==0) { leds(); //流水灯函数 } } }

独山子区14777839089: 下面51单片机C语言程序怎么改成按钮按一下才执行,再按一下就停止,如此反复??? -
别马万适: #include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char #define ulong unsigend long sbit aj=P2^0;//按键uchar Flag=0;uint js_flag=0;uchar code tab1[]={3,2,0x55,0xaa};uchar code tab2[]={3,8,0xfe,0xfd,0xfb,0xf...

独山子区14777839089: 51单片机的按键控制小灯亮灭的问题(程序类型:c语言) -
别马万适: #include<reg52.h> #define uint unsigned int sbit LED = P1^0; sbit KEY1 = P1^2; void delay(uint); void main(void) {LED = 1; //初始化LED熄灭KEY1 = 1; //赋值KEY1高电平while(1){if(!KEY1) //检测到按键按下{LED = ~LED; /*LED取反,...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网