单片机学习小组
登录
直播中
陈飞
7年用户
1158经验值
私信
关注
怎样使用矩阵按键去控制小灯呢
开启该帖子的消息推送
矩阵按键
数码管
控制
矩阵按键的原理是什么?
怎样使用矩阵按键去控制小灯呢?
回帖
(1)
唐行轲
2022-2-23 09:33:09
原理图如下:
矩阵键盘控制小灯
//矩阵键盘+小灯
#include
void delayms(int ms);
void key_scan(void);
void main(void){
P02=0XA0;P00=0X00;P2=0X80;P0=0XFF;
while(1){
key_scan();
}
}
//延时
void delayms(int ms){
int q,w;
for(q=0;q
for(w=845;w>0;w--);
}
//按键
void key_scan(void){
//第一列控制1-4灯亮
P44=0;P42=1;P35=1;P34=1;
if((P30==0)&&(P44==0)){
delayms(5);
if(P30==0){
P00=0;
}
while(!P30);
}
else if((P31==0)&&(P44==0)){
delayms(5);
if(P31==0){
P01=0;
}
while(!P31);
}
else if((P32==0)&&(P44==0)){
delayms(5);
if(P32==0){
P02=0;
}
while(!P32);
}
else if((P33==0)&&(P44==0)){
delayms(5);
if(P33==0){
P03=0;
}
while(!P33);
}
//第二列控制1-4灯灭
P44=1;P42=0;P35=1;P34=1;
if((P30==0)&&(P42==0)){
delayms(5);
if(P30==0){
P00=1;
}
while(!P30);
}
else if((P31==0)&&(P42==0)){
delayms(5);
if(P31==0){
P01=1;
}
while(!P31);
}
else if((P32==0)&&(P42==0)){
delayms(5);
if(P32==0){
P02=1;
}
while(!P32);
}
else if((P33==0)&&(P42==0)){
delayms(5);
if(P33==0){
P03=1;
}
while(!P33);
}
}
矩阵键盘+小灯+数码管
//矩阵键盘+小灯+数码管
#include
unsigned char seg[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0xff};
void delayms(int ms);
void key_scan(void);
unsigned int led,g;
void main(void){
P02=0XA0;P00=0X00;P2=0X80;P0=0XFF;
P02=0XC0;P00=0X04;P2=0XFF;P0=0XFF;
while(1){
key_scan();
}
}
//延时
void delayms(int ms){
int q,w;
for(q=0;q
for(w=845;w>0;w--);
}
//矩阵键盘
void key_scan(void){
unsigned char temp;
//第一列控制数码管0-3
P44=0;P42=1;P3=0Xff;
temp=P3;
temp=(temp&0X0F);
if (temp!=0X0F){
delayms(5);
temp=P3;
temp=(P3&0X0F);
if (temp!=0X0F){
temp=P3;
switch(temp){
case 0XfE:P0=seg[0];break;
case 0XfD:P0=seg[1];break;
case 0Xfb:P0=seg[2];break;
case 0Xf7:P0=seg[3];break;
}
while(temp!=0X0F){
temp=P3;
temp=(temp&0X0F);
}
}
}
//第二列控制数码管4-7
P44=1;P42=0;P3=0XfF;
temp=P3;
temp=(temp&0X0F);
if (temp!=0X0F){
delayms(5);
temp=P3;
temp=(P3&0X0F);
if (temp!=0X0F){
temp=P3;
switch(temp){
case 0XfE:P0=seg[4];break;
case 0XfD:P0=seg[5];break;
case 0Xfb:P0=seg[6];break;
case 0Xf7:P0=seg[7];break;
}
while(temp!=0X0F){
temp=P3;
temp=(temp&0X0F);
}
}
}
//第三列控制数码管8.9.-.灭
P44=1;P42=1;P3=0XdF;
temp=P3;
temp=(temp&0X0F);
if (temp!=0X0F){
delayms(5);
temp=P3;
temp=(P3&0X0F);
if (temp!=0X0F){
temp=P3;
switch(temp){
case 0XdE:P0=seg[8];break;
case 0XdD:P0=seg[9];break;
case 0Xdb:P0=seg[10];break;
case 0Xd7:P0=seg[11];break;
}
while(temp!=0X0F){
temp=P3;
temp=(temp&0X0F);
}
}
}
//第四列控制流水灯、0-9,灯亮、都灭
P44=1;P42=1;P3=0XeF;
temp=P3;
temp=(temp&0X0F);
if (temp!=0X0F){
delayms(5);
temp=P3;
temp=(P3&0X0F);
if (temp!=0X0F){
temp=P3;
switch(temp){
case 0XeE:
P02=0XC0;P00=0X04;P2=0XFF;P0=0XFF;
P0=seg[10];
for(led=0;led<8;led++){
P02=0XA0;P00=0X00;P2=0X80;P0=0XFF;
P0=(0X01<
delayms(200);
}
P0=0xff;
P02=0XC0;P00=0X04;P2=0XFF;P0=0XFF;
break;
case 0XeD:P0=seg[9];
for(g=0;g<10;g++){
P0=seg[g];
delayms(200);
}
break;
case 0Xeb:
P0=seg[10];
P02=0XA0;P00=0X00;P2=0X80;P0=0XFF;
P0=0x00;
break;
case 0Xe7:
P02=0XA0;P00=0X00;P2=0X80;P0=0XFF;
P0=0xff;
P02=0XC0;P00=0X04;P2=0XFF;P0=0XFF;
P0=seg[11];
break;
}
while(temp!=0X0F){
temp=P3;
temp=(temp&0X0F);
}
}
}
}
原理图如下:
矩阵键盘控制小灯
//矩阵键盘+小灯
#include
void delayms(int ms);
void key_scan(void);
void main(void){
P02=0XA0;P00=0X00;P2=0X80;P0=0XFF;
while(1){
key_scan();
}
}
//延时
void delayms(int ms){
int q,w;
for(q=0;q
for(w=845;w>0;w--);
}
//按键
void key_scan(void){
//第一列控制1-4灯亮
P44=0;P42=1;P35=1;P34=1;
if((P30==0)&&(P44==0)){
delayms(5);
if(P30==0){
P00=0;
}
while(!P30);
}
else if((P31==0)&&(P44==0)){
delayms(5);
if(P31==0){
P01=0;
}
while(!P31);
}
else if((P32==0)&&(P44==0)){
delayms(5);
if(P32==0){
P02=0;
}
while(!P32);
}
else if((P33==0)&&(P44==0)){
delayms(5);
if(P33==0){
P03=0;
}
while(!P33);
}
//第二列控制1-4灯灭
P44=1;P42=0;P35=1;P34=1;
if((P30==0)&&(P42==0)){
delayms(5);
if(P30==0){
P00=1;
}
while(!P30);
}
else if((P31==0)&&(P42==0)){
delayms(5);
if(P31==0){
P01=1;
}
while(!P31);
}
else if((P32==0)&&(P42==0)){
delayms(5);
if(P32==0){
P02=1;
}
while(!P32);
}
else if((P33==0)&&(P42==0)){
delayms(5);
if(P33==0){
P03=1;
}
while(!P33);
}
}
矩阵键盘+小灯+数码管
//矩阵键盘+小灯+数码管
#include
unsigned char seg[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0xff};
void delayms(int ms);
void key_scan(void);
unsigned int led,g;
void main(void){
P02=0XA0;P00=0X00;P2=0X80;P0=0XFF;
P02=0XC0;P00=0X04;P2=0XFF;P0=0XFF;
while(1){
key_scan();
}
}
//延时
void delayms(int ms){
int q,w;
for(q=0;q
for(w=845;w>0;w--);
}
//矩阵键盘
void key_scan(void){
unsigned char temp;
//第一列控制数码管0-3
P44=0;P42=1;P3=0Xff;
temp=P3;
temp=(temp&0X0F);
if (temp!=0X0F){
delayms(5);
temp=P3;
temp=(P3&0X0F);
if (temp!=0X0F){
temp=P3;
switch(temp){
case 0XfE:P0=seg[0];break;
case 0XfD:P0=seg[1];break;
case 0Xfb:P0=seg[2];break;
case 0Xf7:P0=seg[3];break;
}
while(temp!=0X0F){
temp=P3;
temp=(temp&0X0F);
}
}
}
//第二列控制数码管4-7
P44=1;P42=0;P3=0XfF;
temp=P3;
temp=(temp&0X0F);
if (temp!=0X0F){
delayms(5);
temp=P3;
temp=(P3&0X0F);
if (temp!=0X0F){
temp=P3;
switch(temp){
case 0XfE:P0=seg[4];break;
case 0XfD:P0=seg[5];break;
case 0Xfb:P0=seg[6];break;
case 0Xf7:P0=seg[7];break;
}
while(temp!=0X0F){
temp=P3;
temp=(temp&0X0F);
}
}
}
//第三列控制数码管8.9.-.灭
P44=1;P42=1;P3=0XdF;
temp=P3;
temp=(temp&0X0F);
if (temp!=0X0F){
delayms(5);
temp=P3;
temp=(P3&0X0F);
if (temp!=0X0F){
temp=P3;
switch(temp){
case 0XdE:P0=seg[8];break;
case 0XdD:P0=seg[9];break;
case 0Xdb:P0=seg[10];break;
case 0Xd7:P0=seg[11];break;
}
while(temp!=0X0F){
temp=P3;
temp=(temp&0X0F);
}
}
}
//第四列控制流水灯、0-9,灯亮、都灭
P44=1;P42=1;P3=0XeF;
temp=P3;
temp=(temp&0X0F);
if (temp!=0X0F){
delayms(5);
temp=P3;
temp=(P3&0X0F);
if (temp!=0X0F){
temp=P3;
switch(temp){
case 0XeE:
P02=0XC0;P00=0X04;P2=0XFF;P0=0XFF;
P0=seg[10];
for(led=0;led<8;led++){
P02=0XA0;P00=0X00;P2=0X80;P0=0XFF;
P0=(0X01<
delayms(200);
}
P0=0xff;
P02=0XC0;P00=0X04;P2=0XFF;P0=0XFF;
break;
case 0XeD:P0=seg[9];
for(g=0;g<10;g++){
P0=seg[g];
delayms(200);
}
break;
case 0Xeb:
P0=seg[10];
P02=0XA0;P00=0X00;P2=0X80;P0=0XFF;
P0=0x00;
break;
case 0Xe7:
P02=0XA0;P00=0X00;P2=0X80;P0=0XFF;
P0=0xff;
P02=0XC0;P00=0X04;P2=0XFF;P0=0XFF;
P0=seg[11];
break;
}
while(temp!=0X0F){
temp=P3;
temp=(temp&0X0F);
}
}
}
}
举报
更多回帖
rotate(-90deg);
回复
相关问答
矩阵按键
数码管
控制
怎样
去
编写单片机的独立
按键
与
矩阵
按键
的扫描函数
呢
2022-02-23
2161
怎样
去
实现独立
按键
和
矩阵
按键
电路的程序代码
呢
2022-01-20
942
如何
去
实现独立
按键
与
矩阵
按键
的基本模板
呢
2022-02-23
815
怎样
去
编写STM32
按键
处理的程序
呢
2021-12-01
693
请问一下STM32F407ZE是
怎样
通过
按键
去
控制
LED
灯
的
2021-11-25
1748
矩阵
按键
的扫描方法有何优缺点
呢
2022-02-23
3225
矩阵
按键
是
怎样
控制
数码管显示的
2022-02-23
1360
矩阵
按键
是否被按下的检测方法有哪几种
呢
2022-02-23
1947
怎样
通过
按键
去
控制
LED
灯
的亮灭
2021-08-12
1937
矩阵
按键
的原理是什么?有哪几种扫描方式
呢
2022-01-18
1269
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分