51单片机独立按键问题

我是新手想请教一个独立按键的程序。按下按键1,led1亮。按下按键2,led2亮、、、按下按键7,全部都灭。我是新手,请帮忙了,谢谢。。... 我是新手想请教一个独立按键的程序。按下按键1,led1亮。按下按键2,led2亮、、、按下按键7,全部都灭。我是新手,请帮忙了,谢谢。。 展开
 我来答
九环套月
推荐于2016-11-29 · TA获得超过613个赞
知道小有建树答主
回答量:134
采纳率:0%
帮助的人:107万
展开全部
#include "reg51.h"

//P0口外接6个LED,led1至led6
//sbit led1=P0^1;
//sbit led2=P0^2;
//sbit led3=P0^3;
//sbit led4=P0^4;
//sbit led5=P0^5;
//sbit led6=P0^6;

//定义7个按键key1至key7
sbit key1=P1^1;
sbit key2=P1^2;
sbit key3=P1^3;
sbit key4=P1^4;
sbit key5=P1^5;
sbit key6=P1^6;
sbit key7=P1^7;

unsigned char keyval; //全局变量,储存按键键值

void KeyScan(void);
void Timer0Init(void);
void delayms(unsigned char ms);

void delayms(unsigned int ms);
{
unsigned int i;
while(ms--)
for(i=0;i<600;i++);
}

void main(void)

while(1)
{
switch(keyval)
{
case 1: P0=0xfd; break; //led0亮
case 2: P0=0xfb; break;
case 3: P0=0xf7; break;
case 4: P0=0xfe; break;
case 5: P0=0xfd; break;
case 6: P0=0xfb; break; //led6亮
case 7: P0=0xff; break; //全部led熄灭
}

}


void Timer0Init(void) //每10ms进入中断一次
{
TMOD=0x01; //16位定时器模式
TH0=0xdb;
TL0=0xff;//定时10ms,赋初值
TR0=1; //启动定时器0
ET0=1; //开定时器0分支中断
EA=1; //开总中断


void Timer0ISR(void)interrupt 1 using 1 //定时中断,按键扫描获取键值

if((P1&0xfe)!=0xfe) //判断key1至key7是否有按键按下

{
delayms(20); //延时20ms,软件消抖
if(key1==0) keyval=1; //按键1按下
if(key2==0) keyval=2;
if(key3==0) keyval=3;
if(key4==0) keyval=4;
if(key5==0) keyval=5;
if(key6==0) keyval=6;
if(key7==0) keyval=7; //按键7按下
}
TH0=0xdb;
TL0=0xff;//定时10ms,重新赋值
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式