实验开发板为CT107D蓝桥官方板,编译环境为MDK5

  1. 注意切换J5跳帽至2-3(独立按键)
  2. 注意切换J5跳帽至1-2(矩阵按键)
  3. 注意原理图中的
/**************************************独立按键******************************************/
#include"STC15F2K60S2.h"typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
sbit s7 = P3^0;
sbit s6 = P3^1;
sbit s5 = P3^2;
sbit s4 = P3^3;sbit L1 = P0^0;
sbit L2 = P0^1;
sbit L3 = P0^2;
sbit L4 = P0^3;
sbit L5 = P0^4;
sbit L6 = P0^5;
sbit L7 = P0^6;
sbit L8 = P0^7;u8 flag_k = 0;void delay(u16 i)
{while(i --);
}
void SelectHC573(u8 channel)
{switch(channel){case 4:P2 = (P2 & 0x1F) | 0x80;break;case 5:P2 = (P2 & 0x1F) | 0xA0;break;case 6:P2 = (P2 & 0x1F) | 0xC0;break;case 7:P2 = (P2 & 0x1F) | 0xE0;break;}
}void KeyScanning()
{if(s4 == 0){delay(100);if(s4 == 0){    if(flag_k == 1){L3 = ~L3;while(s4 == 0);}if(flag_k == 2) {L4 = ~L4;while(s4 == 0);}}}if(s5 == 0){delay(100);if(s5 == 0){if(flag_k == 1){L5 = ~L5;while(s4 == 0);}if(flag_k == 2){L6 = ~L6;while(s4 == 0);}while(s5 == 0);}}if(s6 == 0){delay(100);if(s6 == 0){if(flag_k == 0){flag_k = 2;L2 = 0;}else if(flag_k == 2){flag_k =0;L2 = 1;}while(s6 == 0);}}if(s7 == 0){delay(100);if(s7 == 0){if(flag_k == 0){flag_k = 1;L1 = 0;}else if(flag_k == 1){flag_k = 0;L1 = 1;}while(s7 == 0);}}
}
void InitSystem()
{SelectHC573(5);P0 = 0x00;
}void main()
{InitSystem();SelectHC573(4);P0 = 0xFF;while(1){KeyScanning();}
}
/**************************************矩阵键盘******************************************/
#include<STC15F2K60S2.h>typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;sbit R1 = P3^0;
sbit R2 = P3^1;
sbit R3 = P3^2;
sbit R4 = P3^3;
sbit C1 = P4^4;
sbit C2 = P4^2;
sbit C3 = P3^5;
sbit C4 = P3^4;u8 code SMG_data[] = {0xC0,  //"0"0xF9,  //"1"0xA4,  //"2"0xB0,  //"3"0x99,  //"4"0x92,  //"5"0x82,  //"6"0xF8,  //"7"0x80,  //"8"0x90,  //"9"0x88,  //"A"0x83,  //"B"0xC6,  //"C"0xA1,  //"D"0x86,  //"E"0x8E,  //"F"0x89,  //"H"0xC7,  //"L"0xC8,  //"n"0xC1,  //"u"0x8C,  //"P"0xA3,  //"o"0xBF,  //"-"0xFF,  //熄灭0xFF  //自定义};/*void delay(u16 i)
{while(i --);
}
*/
void SelectHC573(u8 channel)
{switch(channel){case 4:P2 = (P2 & 0x1F) | 0x80;break;case 5:P2 = (P2 & 0x1F) | 0xA0;break;case 6:P2 = (P2 & 0x1F) | 0xC0;break;case 7:P2 = (P2 & 0x1F) | 0xE0;break;}
}void InitSystem()
{SelectHC573(5);P0 = 0x00;
}void SMG_Display(u8 i)
{SelectHC573(6);P0 = 0x01;SelectHC573(7);P0 = SMG_data[i];
}void KeyDriver()
{P3 = (P3 & 0xF0) | 0x0E;  //0111C1 = C2 = C3 = C4 = 1;if(C1 == 0){while(C1 == 0);SMG_Display(1);}else if(C2 == 0){while(C2 == 0);SMG_Display(2);}else if(C3 == 0){while(C3 == 0);SMG_Display(3);}else if(C4 == 0){while(C4 == 0);SMG_Display(4);}P3 = (P3 & 0xF0) | 0x0D;    //1011C1 = C2 = C3 = C4 = 1;if(C1 == 0){while(C1 == 0);SMG_Display(5);}else if(C2 == 0){while(C2 == 0);SMG_Display(6);}else if(C3 == 0){while(C3 == 0);SMG_Display(7);}else if(C4 == 0){while(C4 == 0);SMG_Display(8);}P3 = (P3 & 0xF0) | 0x0B;    //1101C1 = C2 = C3 = C4 = 1;if(C1 == 0){while(C1 == 0);SMG_Display(9);}else if(C2 == 0){while(C2 == 0);SMG_Display(10);}else if(C3 == 0){while(C3 == 0);SMG_Display(11);}else if(C4 == 0){while(C4 == 0);SMG_Display(12);}P3 = (P3 & 0xF0) | 0x07; //1110C1 = C2 = C3 = C4 = 1;if(C1 == 0){while(C1 == 0);SMG_Display(14);}else if(C2 == 0){while(C2 == 0);SMG_Display(15);}else if(C3 == 0){while(C3 == 0);SMG_Display(16);}else if(C4 == 0){while(C4 == 0);SMG_Display(17);}
}void main()
{InitSystem();SelectHC573(4);P0 = 0xFF;while(1){KeyDriver();}
}

【蓝桥杯单片机】独立按键和矩阵按键相关推荐

  1. 蓝桥杯单片机 独立按键与矩阵按键

    文章目录 前言 一.蓝桥杯按键原理图 二.独立按键与矩阵按键处理思路 1.独立按键 2.矩阵按键 代码实现 总结 前言 按键设计一般分为两种:独立按键和矩阵键盘.按键数量较少的用前者,按键数量较多的用 ...

  2. 蓝桥杯 单片机 独立按键 的使用

    独立按键 使用 独立按键原理 独立按键在电路中相当于一个开关,当按键按下时,电路闭合,松手时按键自动抬起,电路断开. 独立按键一端连接单片机I/O口,一端接地. 单片机I/O顾名思义,就是既能输入也能 ...

  3. 单片机_CT107D训练平台电路原理图\蓝桥杯训练板\输入输出模块\矩阵按键\蜂鸣器电路\继电器电路\LM386功率放大电路,驱动扬声器

    输入/输出模块 配置 4×4 键盘矩阵,其中四个按键可通过跳线配置为独立按键: 配置继电器.蜂鸣器: 配置功率放大电路,驱动扬声器. 1>4×4 键盘矩阵原理图如下: 图片中的按键电路可以切换成 ...

  4. 蓝桥杯基础模块4_3:矩阵按键

    一.模块题目 二.原理简述 1.矩阵键盘的扫描思想(转载+删减) 与独立按键不同的是,按键的两个引脚都分别连接的单片机的I/O端口,一个作为行信号,另外一个作为列信号.下以4X4的矩阵键盘为例,探讨其 ...

  5. 蓝桥杯单片机按键模块化编程

    按键 一.按键电路 1.矩阵按键 将J5的KBD接在一起,使用矩阵按键.就是1.2接在一起. 现在8个I/O口控制16个按键.P34,P35,P42,P44控制四列,单片机通过这四个I/O输出高低电平 ...

  6. 蓝桥杯单片机学习日记3-矩阵键盘的使用,线反转法,三步消抖,按键长按与短按

    此片文章用于记录蓝桥杯单片机的学习 篮球杯单片机上的矩阵按键原理图如下: 使用矩阵键盘时,要将跳线帽J5跳至KBD模式. 值得注意的是,若开发板上的单片机使用的为STC15,那么以上原理图适用.如果单 ...

  7. 蓝桥杯单片机比赛学习:3、独立按键与矩阵按键的基本原理

    独立按键 首先我们看一下按键的原理图,如图1,当J5中的2,3接在一起的时候,红线标注就是一个完整的电路图,此时只有s4.s5.s6.s7按键可以使用,也就是独立按键.例如:当我们按下s4时,电路导通 ...

  8. 蓝桥杯单片机学习4——独立按键矩阵按键

    上期学习了数码管的静态显示,这次我们来学习独立按键&矩阵按键 独立按键 原理很简单,当作为独立按键使用时,跳线帽的23接在一起,此时按键如果按下,则按键连接的IO口电平会被拉低,通过捕获IO的 ...

  9. 蓝桥杯单片机(三)矩阵按键

    上章说了独立按键 蓝桥杯单片机(二)独立按键 这章说一下矩阵按键 所谓矩阵按键,就是每一个按键的两端都同时由单片机的IO口进行控制,如原理图所示,上图要想使用矩阵按键,就需要使用跳线帽将排针2引脚和1 ...

  10. 【蓝桥杯单片机】第十六章 独立按键(松开有效)

    本章承接上一章,基本原理是一模一样的,在上一章中,我们按下S7,L7就会马上点亮,而在本章实验中,我们在按下S7后,还需要松开S7,L7才会点亮.这就是松开有效. 第一节   程序编写 请大家对比本章 ...

最新文章

  1. yum groupinstall安装一组软件使用示例
  2. PG git pull
  3. scratch的积木相与java的_scratch课堂:积木块详解
  4. php 数组区删除重复的,php – 从数组中删除重复的项目
  5. she is so css什么意思,输入she is so什么意思 微信she is so什么梗
  6. MFC开发IM-第十五篇、打包的MFC程序别人无法启动的原因
  7. WPF-14:绑定中数据模型必须为public问题
  8. 改bug过程中的新发现,重新认识String trim方法
  9. 西工大计算机专业研究生就业前景,2020考研34所院校就业情况解读:西北工业大学...
  10. 库存商品计算成本的几种方法
  11. calculate函数使用方法c语言,使用 CALCULATE 函数
  12. python 表格处理项目该如何分工_python 处理 Excel 表格
  13. 作业Android自我介绍
  14. [幽默网文]好男人遭遇野蛮美女老婆
  15. JQuery实现简易音乐播放器
  16. 如何用jquery动态改变 input 输入框的readonly属性及CSS样式
  17. 国际会计准则IAS 和 IFRS
  18. 浅析 - 被歧视的小众需求
  19. Linux几种检测rootkit隐藏进程的方法
  20. 电脑磁盘占用100%解决办法

热门文章

  1. 7添加静态路由 hat red_不同VPC路由器通过静态路由、动态路由(OSPF)实现网络互通实战...
  2. 支持多协议多服务的服务器设计和实现的步骤,基于多协议的人工影响天气接入服务器设计与实现...
  3. python123测验4程序题_Python面试题245道(从基础到高级)123~141——网络编程,Web—Flask...
  4. XML指南——XML元素
  5. C# ToString()和Convert.ToString()的区别【转】
  6. java 实现一套流程管理、流转的思路(伪工作流) 【仅供参考】
  7. 备份图解 ---mysql 博客
  8. [原创]java WEB学习笔记36:Java Bean 概述,及在JSP 中的使用,原理
  9. pl/sql developer中建立job
  10. Android用户界面