单片机程序设计4*4键盘输入系统~控制16个发光二极管

单片机程序设计4*4键盘输入系统~控制16个发光二极管,第1张

1)P10-P13为4列,P14-P17为4行。

2)P01-P07连接1-8LED,P20-P27连接9-16LED。

3)P1初始值为0xf0,P10-P13同时连接到一个与非门接入到INT1口。

4)用外部中断1来触发按键扫描。

我画好了Proteus的图,已经和Proteus联调过,目前我的等级无法上传。

程序很简单,基本是自解释的。C的源程序如下:

#include

sbit

L1=P1^0;

sbit

L2=P1^1;

sbit

L3=P1^2;

sbit

L4=P1^3;

//中断服务程序

void

keyinterrupt()

interrupt

2

{

int

t;

//延时软件消抖

t=5000;

while(t--);

if(INT1==1)

return;

EX1=0;

//扫描键值

P1=0xef;

if(L1==0){P0=0xfe;P2=0xff;}

//按键盘key1

if(L2==0){P0=0xfd;P2=0xff;}

//按键盘key2

if(L3==0){P0=0xfb;P2=0xff;}

//按键盘key3

if(L4==0){P0=0xf7;P2=0xff;}

//按键盘key4

P1=0xdf;

if(L1==0){P0=0xef;P2=0xff;}

//按键盘key5

if(L2==0){P0=0xdf;P2=0xff;}

//按键盘key6

if(L3==0){P0=0xbf;P2=0xff;}

//按键盘key7

if(L4==0){P0=0x7f;P2=0xff;}

//按键盘key8

P1=0xbf;

if(L1==0){P2=0xfe;P0=0xff;}

//按键盘key9

if(L2==0){P2=0xfd;P0=0xff;}

//按键盘key10

if(L3==0){P2=0xfb;P0=0xff;}

//按键盘key11

if(L4==0){P2=0xf7;P0=0xff;}

//按键盘key12

P1=0x7f;

if(L1==0){P2=0xef;P0=0xff;}

//按键盘key13

if(L2==0){P2=0xdf;P0=0xff;}

//按键盘key14

if(L3==0){P2=0xbf;P0=0xff;}

//按键盘key15

if(L4==0){P2=0x7f;P0=0xff;}

//按键盘key16

P1=0x0f;

EX1=1;

return;

}

void

main(void)

{

IE=0;

EX1=1;

EA=1;

//中断open

P1=0x0f;

P0=0xff;

P2=0xff;

while(1);

}

#include<reg51h>

sbit key1=P1^0;

sbit key2=P1^1;

sbit key3=P1^2;

sbit key4=P1^3;

sbit led1=P1^4;

sbit led2=P1^5;

sbit led3=P1^6;

sbit led4=P1^7;

main()

{

while(1)

    {

    led1=key1;

    led2=key2;

    led3=key3;

    led4=key4;

    }

}

// 51单片机控制八个发光二极管 左右循环。

#include<reg52h>

#define uchar unsigned char

#define uint unsigned int

unsigned char TAB[]= {0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff}; // 改变这里 LED 各种花样

uchar t,i;

void main()

{

TMOD=0x10;

TH1=(65535-50000)/256;  // 50ms一次

TL1=(65535-50000)%256;

EA=1;

ET1=1;//开定时器1中断

TR1=1;//启动定时器1

t=0;

i=0;

while(1)

{

}

}

void timer1() interrupt 3

{

TH1=(65535-50000)/256;  // 50ms一次

TL1=(65535-50000)%256;

t++;

if(t==20)

{

t=0;

P2=TAB[i];

i++;

if(i==18) { i=0;}

}

}

这是只是百点亮P1口的程序

#include<reg51h>

void

main()

{

while(1)

{

p1=0x00;

}

}

这是闪烁度P1口回程序

#include<reg51h>

void

delay(unsigned

int

i)

//延时函数

{

unsigned

int

k;

for(k=0;k<i;k++);

}

void

main()

//主函数

{

while(1)

//循环函数

{

P1=0x00;

//点亮P1口

delay(2000);

//延时

P1=0xff;

//熄灭P1口

delay(200);

//延时

}

}

纯手打,答对你有帮助的话请采纳

谢谢

以上就是关于单片机程序设计4*4键盘输入系统~控制16个发光二极管全部的内容,包括:单片机程序设计4*4键盘输入系统~控制16个发光二极管、51单片机中用4个开关控制4个发光二极管的C语言程序设计、51单片机的程序,如何让8个发光二极管交替循环等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9721281.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存