嵌入式按键控制led灯代码(嵌入式指示灯)
单片机C语言按键控制LED灯
其实是一样的,也没什么哪个规范这一说,这个看个人习惯了
首先if(SW13==0)是判断此引脚是否为0 (按键按下)
然后一个delay用于按键防抖动
没被注释的那部分是靠if在次判断是否为0按下按下后执行LED_ON函数使LED亮
然后通过while判断按键是否松开,如果松开的话就继续执行LED_OFF将LED关闭
而注释掉的那段是依靠while函数直接判断按键是否处于按下状态
是的话就循环执行LED_ON函数直至判断按键松开(SW13=1)后在继续执行到LED_OFF函数使LED 关闭
不过这两种写法的有个共同缺点就是按键判断是while死循环,如果你这个按键按下后,单片机就只是在判断这个条件成立与否,期间不在进行其他工作
单片机用c语言,按钮控制一个LED灯,要求按下松开,LED亮,按下松开,LED暗!循环
1、首先打开桌面上的keil软件,在进行对51单片机进行编程时最常用的就是keil软件。
2、编写相应的代码:#includereg52.h //定义单片机的头文件sbit led=P2^0; //定义单片机的管脚,void main(void) //主函数{ while(1) //无限循环 {led=0x1f; //点亮前面三个灯。这里是十六进制的换算, //不懂得可以查一下资料 }。
3、打开烧写软件,点击【打开文件】,寻找刚刚编写的程序。
4、找到相应的文件夹以后,寻找HEX文件。这是所能烧写软件识别的程序。
5、找到程序以后,将单片机连接到电脑,并点击程序下载,将程序烧写进单片机。
6、程序下载进单片机以后就能够看到八个led点亮了前面三个。
跪求!!!STC89C52单片机,用八个按键控制分别控制八个LED灯的代码(C语言)
[已完成!]电路图如下,
#include reg52.h
#include stdio.h
unsigned char code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};
void delay_ms(unsigned int ct) //延时
{
unsigned int t,i;
for(i=0;ict;i++)
{
t=115;
while(--t);
}
}
void main(void)
{
// Write your code here
unsigned char ct=100;
while (1) //主循环
{
switch(P1) //P1口作为独立按键输入端,检测端口电平并做如下判断
{
case 0xfe:P0=dofly_table[1];LED0=0;break;//0xfe = 1111 1110,
//说明连接在P3.0端口的按键被按下,显示对应的数字然后跳出循环
case 0xfd:P0=dofly_table[2];LED1=0;break;//调用表中的第三个
//元素 0xa4 下标 0 才表示数组中的第一个元素
case 0xfb:P0=table[3];LED2=0; break;
case 0xf7:P0=table[4];LED3=0;break;
case 0xef:P0=table[5];LED4=0;break;
case 0xdf:P0=table[6];LED5=0;break;
case 0xbf:P0=table[7];LED6=0;break;
case 0x7f:P0=table[8];LED7=0;break;
default:break; //如果都没按下,直接跳出
}
//主循环中添加其他需要一直工作的程序
}
}
//如果帮到你的话,点一个赞吧!硬件电路工程师-帝国卫兵Tt
需要一个用按键控制一个LED灯亮度的C语言程序
/**52系列单片机,晶振12MHz,P1.0输出100Hz方波(即周期10ms),方波由T0定时器产生
P1.3接按键 K1,每按一次按键,方波占空比改变一次,依次为:1/10→2/10→……→9/10→1/10,如此循环**/
#include"reg52.h" //包含52系列头文件
#define uchar unsigned char //定义 无符号字符型
#define uint unsigned int //定义 无符号整型
#define TRUE 1 //定义 逻辑真
#define FALSE 0 //定义 逻辑假
#define th0 0xfc //100Hz(10ms),占空比分母10,则其最小时间单位应该为10ms/10=1ms,故定时器T0定时时间为 1ms
#define tl0 0x18 //1ms at 12HMz Fosc
#define DutyDeno 10 //定义 占空比分母 为:10
sbit WaveOut=P1^0; //定义 方波输出 接口
sbit Key1=P1^3; //定义 按键Key1 接口
uchar DutyNume=1; //定义 占空比分子 变量,并初始化为 1(即 占空比 为:1/10)
void Timer0() interrupt 1 //定时器T0 中断 函数
{
static uchar duty_time=0; //定义静态变量,作为 占空比 输出时间的参考值(1ms)
TL0=tl0;
TH0=th0; //重赋定时器初值,1ms
duty_time=++duty_time%DutyDeno; //该句等效于:duty_time++;duty_time%=DutyDeno;
if(duty_timeDutyDeno) WaveOut=1; //若计时时间小于 占空比分子,则输出应为 高电平
else WaveOut=0; //若计时时间大于 占空比分子,则输出应为 低电平
}
void TimerInit() //定时器初始化 函数
{
TMOD=0x01; //T0 16位定时器
EA=1; //允许系统中断
ET0=1; //允许T0中断
TH0=th0;
TL0=tl0; //1ms 初值
TR0=1; //T0开始计时
}
void KeyResp() //按键响应 函数
{
static bit KeyDownFlag,KeyReadyFlag; //定义 静态标志位,KeyDownFlag 按键按下标志,KeyReadyFlag 按键准备(响应)标志
if(!Key1) //若按键Key1 被按下
{
KeyDownFlag=TRUE; //按键按下标志 置位
KeyReadyFlag=TRUE; //按键准备标志 置位
}
else KeyDownFlag=FALSE; //若按键Key1 无按下,则清空 按键按下标志
if(!KeyDownFlag KeyReadyFlag) //若 按键已准备,且按键无按下(即 松手状态)
{
DutyNume++; //占空比分子 加1
if(DutyNume==DutyDeno) DutyNume=1; //若 占空比分子=分母,则返回 1
KeyReadyFlag=FALSE; //按键处理完毕,清 按键准备标志
}
}
void main() //主函数
{
TimerInit(); //调用 定时器初始化 函数
while(1) //循环系统
{
KeyResp(); //调用 按键响应 函数
}
}
方波输出接口接灯;
按键控制led灯的程序
单片机的P1.0-P1.3接四个发光二极管L1-L4的阴极,P1.4-P1.7接四个开关K1-K4
程序:
ORG
00H
START:
MOV
A,P1
ANL
A,#0F0H
RR
A
RR
A
RR
A
RR
A
ORl
A,#0F0H
MOV
P1,A
SJMP
START
可以检测单个按键,也可以同时检测多个按键
过程:开始——读P1口数据到A——A中的数据右移4次——A中的内容和F0H相或——A中的数据送到P1口——回到开始
基于STM32的嵌入式系统:编程实现2个按钮控制LED灯,按下button1,LED1翻转;按下button2,LED2翻转。
我不知道为什么中文复制之后这里变乱码了,所以截图作为参照,代码附在后面:
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
//°´¼ü´¦Àíº¯Êý
//·µ»Ø°´¼üÖµ
//mode:0,²»Ö§³ÖÁ¬Ðø°´;1,Ö§³ÖÁ¬Ðø°´;
//·µ»ØÖµ£º
//0£¬Ã»ÓÐÈκΰ´¼ü°´ÏÂ
//KEY0_PRES£¬KEY0°´ÏÂ
//KEY1_PRES£¬KEY1°´ÏÂ
//WKUP_PRES£¬WK_UP°´ÏÂ
//×¢Òâ´Ëº¯ÊýÓÐÏìÓ¦ÓÅÏȼ¶,KEY0KEY1WK_UP!!
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;//°´¼ü°´ËÉ¿ª±êÖ¾
if(mode)key_up=1; //Ö§³ÖÁ¬°´
if(key_up(KEY0==0||KEY1==0||WK_UP==1))
{
delay_ms(10);//È¥¶¶¶¯
key_up=0;
if(KEY0==0)return KEY0_PRES;
else if(KEY1==0)return KEY1_PRES;
else if(WK_UP==1)return WKUP_PRES;
}else if(KEY0==1KEY1==1WK_UP==0)key_up=1;
return 0;// ÎÞ°´¼ü°´ÏÂ
}
int main(void)
{
vu8 t;
Stm32_Clock_Init(9); //ϵͳʱÖÓÉèÖÃ
delay_init(72); //ÑÓʱ³õʼ»¯
LED_Init(); //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú
KEY_Init(); //³õʼ»¯Óë°´¼üÁ¬½ÓµÄÓ²¼þ½Ó¿Ú
LED0=0; //µãÁÁLED
while(1)
{
t=KEY_Scan(0); //µÃµ½¼üÖµ
switch(t)
{
case KEY0_PRES:
LED0=!LED0;
break;
case KEY1_PRES:
LED1=!LED1;
break;
case WKUP_PRES:
LED0=!LED0;
LED1=!LED1;
break;
default:
delay_ms(10);
}
}
}
关于嵌入式按键控制led灯代码和嵌入式指示灯的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。微信号:ymsc_2016
相关文章
发表评论
评论列表
- 这篇文章还没有收到评论,赶紧来抢沙发吧~