C51如何用8个按键,分别控制8个LED亮灭只允许一个LED亮?上电灯全灭。请

C51如何用8个按键,分别控制8个LED亮灭只允许一个LED亮?上电灯全灭。请给完整的C语言程序带注释,谢谢!

#include<reg51.h>
#include<INTRINS.h>
#define u16 unsigned int
#define u8 unsigned char
/*
P1.0-P1.7接按键
P2.0-P2.7接LED

*/
code u8 table[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xff};
/***********************************/
void main()//主函数
{
u8 k,i;
while(1){
k=P1;//读按键键值,此处省略消抖程序
for(i=0;i<8;i++){ //8次循环
if((k&0x01)==0){//扫描到按下的按键
break;//跳出循环
}
k>>=1;//k右移1位
}
P2=table[i];//根据i的值显示
}
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2020-09-19
#include<reg51.h>
#include<INTRINS.h>
#define u16 unsigned int
#define u8 unsigned char
sbit Led0=P1^0;sbit Led1=P1^1;
sbit Led2=P1^2;sbit Led3=P1^3;
sbit Led4=P1^4;sbit Led5=P1^5;
sbit Led6=P1^6;sbit Led7=P1^7;
sbit Key0=P0^0;sbit Key1=P0^1;
sbit Key2=P0^2;sbit Key3=P0^3;
sbit Key4=P0^4;sbit Key5=P0^5;
sbit Key6=P0^6;sbit Key7=P0^7;

/*
P0.0-P0.7接bai按键
P1.0-P1.7接LED
?
*/
/***********************************/
void Delay_1ms(unsigned int Time)
{
unsigned int x, y;
for(x = Time; x > 0; x--)
for(y = 120; y > 0; y--);
}

void main()//主函数
{
while(1){

if(Key0==0){//扫描到按下的dao按键
Led0=0;}//跳出循环
while(Key0==0); //检测松手
{Led0 = 1; }

if(Key1==0){//扫描到按下的dao按键
Led1=0;//跳出循环
}
while(Key1==0); //检测松手
{Led1 = 1; }
if(Key2==0){//扫描到按下的dao按键
Led2=0;//跳出循环
}
while(Key2==0); //检测松手
{Led2 = 1; }
if(Key3==0){//扫描到按下的dao按键
Led3=0;//跳出循环
}
while(Key3==0); //检测松手
{Led3 = 1; }
if(Key4==0){//扫描到按下的dao按键
Led4=0;//跳出循环
}
while(Key4==0); //检测松手
{Led4 = 1; }
if(Key5==0){//扫描到按下的dao按键
Led5=0;//跳出循环
}
while(Key5==0); //检测松手
{Led5 = 1; }
if(Key6==0){//扫描到按下的dao按键
Led6=0;//跳出循环
}
while(Key6==0); //检测松手
{Led6 = 1; }
if(Key7==0){//扫描到按下的dao按键
Led7=0;//跳出循环
}
while(Key7==0); //检测松手
{Led7 = 1; }

}}

在C51单片机中编写8个开关控制8个小灯的程序,用C语言和汇编语言两种编写...
if(KEY1==0)\/\/如果按键1被按下 {LED1=0;}\/\/开启LED1灯 else{LED1=1;}\/\/否则关闭LED1等,以下雷同...if(KEY2==0){LED2=0;} else{LED2=1;} }\/\/end main-for(;;)}\/\/end main;

怎么在C51单片机用PWM控制8个LEN从一个渐亮到全亮
先用A\/D转换器将PWM转为数字量,再将信号强度分为8份,每增大一份,多亮一个LED就可以了。PWM信号可以通过电容变为电压信号,也可以通过计时的方法来确定占空比。那样可以省下A\/D了

简单的51单片机设计,用8个按键独立控制8个灯的程序!(高分!)要求如下...
include<reg52.h> define uint unsigned int define uchar unsigned char void delay(uint z);void main(){ uchar a;a=0x00;P0=0x00;\/\/P0输出; led共阴接法 P1输入按键另一端接地 P0加上拉电阻 P1=0xff;while(1){ P0=0x00;if(P1!=0xff){ a=P1;switch(a){ case 0xfe: P0=0x0...

用单片机C51中switch语句编程,P1口接八个开关分别控制P0口八个LED灯
{ case 0xfe:P0=0x01;break;case 0xfd:P0=0x02;break;case 0xfb:P0=0x04;break;case 0xf7:P0=0x08;break;case 0xef:P0=0x10;break;case 0xdf:P0=0x20;break;case 0xbf:P0=0x40;break;case 0x7f:P0=0x80;break;default:break;} ...

利用C51单片机控制8个LED灯同时闪烁的程序
include<reg51.h>#define uchar unsigned charvoid delay(uchar a){uchar i;while(a--)for(i=0;i<120;i++);}main(){while(1) { P0=0x00; delay(200); P0=0xff; delay(200); }}

C51单片机编程 求按下按键 8盏LED灯变成流水灯 最后灯全灭
sbit k1=P3^5;void delay_ms(uint xms){ int i, j;for(i=0;i<xms;i++){for(j=0;j<7;j++);} } void main(){ P0=0xFF;k1=1;while(1){ if(k1==0){ uchar led=0xfe;uchar i;for(i=0;i<8;i++){ P0=led;delay_ms(500);led=(led_<<1)|0x01;} } } } ...

求一c51单片机,8位流水灯程序
\/\/软件延时,使P1口外接的8个发光二极管,以每秒1位的速度,轮流发光。\/\/发光顺序:0123,1234,2345,3456,4567,5670,6701,7012。循环。\/\/--- include<reg52.h> include<intrins.h> unsigned char a;void main(){ unsigned char i, j, k;a = 0x0f;while(1) { P1 = a; \/\/...

C51单片机编程 求按下按键 8盏LED灯闪烁3次后 灯灭 闪烁频率为1HZ
题目不说清楚,真害人 1、是用一个I\/O口接了8个LED(当然不是,是某一P口)?是用哪一P口?2、然后呢?(单片机不会休息的)3、是用定时器?(还没学到定时器课程吧?)还是延时子程序?4、是汇编语言程序?还是C语言程序?

单片机编程8个led灯,让最低灯亮,循环左移s
控制8个LED灯,使用上拉方式控制,引脚高电平灯灭,引脚低电平灯亮。这8个LED使用同一P口上的所有引脚,假设为P1口中的P1.0-P1.7共8个脚。软件中,只需要将这些灯使用一个for循环即可。代码 include <reg51.h>unsigned char PData; \/\/记录当前是哪个状态,值为1表示亮,输出到P口时取反...

跪求单片机c51用汇编语言写的程序,功能为:8只发光二极管依次点亮,从...
;假设通过P0口置低位控制二极管点亮MAIN: CLR CMAIN1: RRC A; MOV P0,A LCALL wait2 LJMP MAIN1;延时程序11.0592M的精震wait2: ;0.5s mov r5,#0ahwait22: mov r4,#5ah mov r3,#09bhwait21: djnz r3,wait21 djnz r4,wait21 djnz r5,wait22 ret 小石头198006 | 发布于2012-06-25 举报|...

相似回答