
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个发光二极管交替循环等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)