蓝桥杯国信长天单片机--独立按键和矩阵键盘模块(七)
独立按键模块
1-2短接实现矩阵按键;2-3短接实现独立按键。
案例:
独立按键,S6,打开所有LED ,S7,关闭所有LED。S4 ,打开蜂鸣器,S5,关闭蜂鸣器
#include "reg52.h" /** 独立按键接口 */
sbit S7 = P3^0;
sbit S6 = P3^1;
sbit S5 = P3^2;
sbit S4 = P3^3;//主函数
void main(void)
{while(1){if(S7 == 0){P2 = ((P2&0x1f)|0x80);P0 = 0xff; //关闭所有LEDP2 &= 0x1f;}if(S6 == 0){P2 = ((P2&0x1f)|0x80);P0 = 0x00; //打开所有LEDP2 &= 0x1f;}if(S5 == 0){P2 = ((P2&0x1f)|0xa0);P0 &= ~(0x01<<6); //CloseP2 &= 0x1f;}if(S4 == 0){P2 = ((P2&0x1f)|0xa0);P0 |= (0x01<<6); //OpenP2 &= 0x1f;}}
}
/*******************************************************************************
* 文件名称:矩阵键盘实验
* 实验目的:1.掌握矩阵键盘扫描的基本原理
* 2.掌握按键扫描及消除抖动的基本原理
* 程序说明:1.使用程序前,将跳线J2调整为KBD模式
* 2.转接板上使用P4.4和P4.2代替P3.6 P3.7
* 硬件环境:IAP15F2K61S2@11.0592MHz
*******************************************************************************/#include "reg52.h" //定义51单片机特殊功能寄存器
#include "absacc.h"sfr AUXR = 0x8E;
sfr P4 = 0xC0; //P4
sbit P42 = P4^2;
sbit P44 = P4^4;
// 0 1 2 3 4 5 6 7 8 9 熄灭
code unsigned char tab[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xFF};
unsigned char dspbuf[8] = {10,10,10,10,10,10,10,10}; //显示缓冲区
unsigned char dspcom = 0;bit key_re;
unsigned char key_press;
unsigned char key_value;bit key_flag = 0;
unsigned char intr = 0;unsigned char read_keyboard(void);
void display();//主函数
void main(void)
{unsigned char key_temp = 0xff;AUXR |= 0x80; //1T模式,IAP15F2K61S2单片机特殊功能寄存器TMOD &= 0xF0;TL0 = 0xCD;TH0 = 0xD4;TF0 = 0;TR0 = 1;ET0 = 1;EA = 1;while(1){if(key_flag){key_flag = 0;key_temp = read_keyboard();if(key_temp != 0xFF) {dspbuf[7] = key_temp%10;dspbuf[6] = key_temp/10;}}}
}//定时器中断服务函数
void isr_timer_0(void) interrupt 1 //默认中断优先级 1
{display();if(++intr == 10) //1ms执行一次{intr = 0;key_flag = 1; //10ms按键扫描标志位置1}
}//读取矩阵键盘键值:转接板中使用P42和P44代替8051引脚
//顺序中的P36和P37引脚
unsigned char read_keyboard(void)
{static unsigned char col;P3 = 0xf0;P42 = 1;P44 = 1;if((P3 != 0xf0)||(P42 != 0)||(P44 != 0)) //有按键按下key_press++;elsekey_press = 0; //抖动if(key_press == 3){key_press = 0;key_re = 1;if(P44 == 0) col = 1;if(P42 == 0) col = 2;if((P3 & 0x20) == 0) col = 3;if((P3 & 0x10) == 0) col = 4;P3 = 0x0F;P42 = 0;P44 = 0;if((P3&0x01) == 0) key_value = (col-1);if((P3&0x02) == 0) key_value = (col+3);if((P3&0x04) == 0) key_value = (col+7);if((P3&0x08) == 0) key_value = (col+11);}//连续三次检测到按键被按下,并且该按键已经释放P3 = 0x0f;P42 = 0;P44 = 0;if(((key_re == 1) && (P3 == 0x0f))&&(P42 == 0)&&(P44 == 0)){key_re = 0;return key_value;}return 0xff; //无按键按下或被按下的按键未被释放
}//显示函数
void display(void)
{P0 = 0xff;P2 = ((P2&0x1f)|0xE0);P2 &= 0x1f;P0 = 1<<dspcom;P2 = ((P2&0x1f)|0xC0);P2 &= 0x1f;P0 = tab[dspbuf[dspcom]];P2 = ((P2&0x1f)|0xE0);P2 &= 0x1f;if(++dspcom == 8) {dspcom = 0;}
}
蓝桥杯国信长天单片机--独立按键和矩阵键盘模块(七)相关推荐
- 蓝桥杯国信长天单片机--LED灯模块(五)
LED等内部连接示意图 整体思路 通过74HC138芯片及74HC02芯片输入高低电平,来控制Y4C为1或0.当Y4C为1时,方可通过P0端口来控制LED灯的亮灭.当Y4C为0时,无法控制LED灯的亮 ...
- 蓝桥杯国信长天单片机--硬件环境(一)
CT107D 单片机由以下功能模块组成 1.功能模块 (1)单片机芯片 配置IAP15F2K61S2单片机 (2)显示模块 配置8路LED输出L1-L8 配置8位8段共阳极数码管DS1-DS2 配置L ...
- 蓝桥杯国信长天单片机--串口程序设计(十)
实验目的: 1.掌握51单片机串口工作模式及相关寄存器配置方法 2.了解51单片机波特率的计算方法 3.掌握单片机串口接收中断服务函数的设计方法 程序说明: 1.通过USB连接线连接PC机,在计算机硬 ...
- 蓝桥杯国信长天单片机实战--复习
1.LED 例1:LED1和LED3点亮 #include<stc15f2k60s2.h>void main(){P2=0xA0;P0=0X00;P2=0X80;P0=0XFF;while ...
- 蓝桥杯国信长天单片机--程序下载(三)
STC-ISP 程序下载 (1)打开下载界面:双击 stc-isp-15xx-v6.86.exe 运行程序,出现如图. (2)选择单片机型号:在左上方的"单片机型号"下拉列表中选择 ...
- 蓝桥杯国信长天单片机--软件环境(二)
Keil Vision5 集成开发环境建立工程 第一步: 单击"Project"菜单下的"New Vision Project-"菜单项启动新工程的建立,出现新 ...
- 蓝桥杯国信长天单片机--数码管模块(六)
数码管内部连接示意图 设备连接关系图 什么是位选,什么是段选? 假设我们有4个数码管,我想让某1个数码管显示对应的数字,我就需要先选中它,选中这个数码管的过程就叫位选:一般单个数码管都是8段(带小数点 ...
- 蓝桥杯国信长天单片机实战--数码管的动态显示
一.原理分析 数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管 ...
- 蓝桥杯国信长天单片机--超声波测距设计(十一)
理论基础 超声波模块的工作原理:单片机供给超声波信号端Trig一个最少10us长的高电平触发信号,模块自动发射8个40khz的方波,同时自动检测到信号是否返回,一旦有信号返回,Echo端输出一个高电平 ...
最新文章
- 面试题整理18 根据上排给出十个数,在其下排填出对应的十个数
- 【学习笔记】8、 字符串的格式化
- java jdbc url编码_java中jdbc/sql出现编码问题
- 【Java/JFrame/多线程】小球碰到边缘的回弹效果
- C# 操作office知识点汇总
- 如何写 go 代码 (How to Write Go Code 翻译)
- 托管 非托管_如何在托管的Kubernetes上备份Neo4J
- 轨道运营管理专业自荐书_轨道运营管理专业自荐信x
- android studio 安装apk失败,AndroidStudio安装apk时失败时提示INSTALL_PARSE_FAILED_NO_CERTIFICATES...
- ios微信下vue项目组件切换并自动播放音频的解决方案
- Vmware Tools安装详细步骤
- 怎么用Hypermesh划分球体网格
- 浏览器服务器响应报文查看,通过 Chrome浏览器 查看http请求报文
- WiFi精灵:开启手机免费上网时代
- 动态更换 Shape 的颜色
- 人工智能设计概述(二)
- ML - 贷款用户逾期情况分析1 - Baseline
- 比尔·盖茨一生总结:从恶魔到天使
- 一份优秀的简历该长成什么样
- 6.6.2 婚姻信息