51单片机学习 - 02
数码管
数码管是由多个发光二极管封装在一起组成8字型的器件。
led数码管(LED Segment Displays)由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。
数码管模块原理图
如图,这是一个8位共阴极数码管,其引脚多达24只。而单片机IO口有限,假如数码管所有引脚都接入单片机的IO口那么其他IO设备就无口可用了。所以,我们常常用多个锁存器来辅助单片机驱动数码管。
74HC573锁存器模块原理图
关键引脚说明:
LE:锁存使能。LE处于高电平时,输出口电平随输入口改变。LE处于低电平时,输出口保持原先的值。无论输出口电 平如何变化。
OE:一般情况接地,可以认为时一个开关。
我们将两颗74HC573串联使用。U8作为位选锁存器,U9作为段选锁存器。
这是74HC573的真值表
当OE脚处于低电平时:
LE为高电平时,输出脚Q随输入脚D改变。
LE为低电平时,输出脚Q不随输入脚D改变。且输出脚Q为原来的值。
当OE处于高电平时:
74HC573将会处于高阻抗状态。
示例程序:
#include <reg52.h>
#include <intrins.h>sbit WE = P2^7;
sbit DU = P2^6;//数码管段选
unsigned char code SMGduan[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
//数码管位选
unsigned char code SMGwei[] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef};//延时函数
void delay(unsigned char z) {unsigned char x, y;for (x = z; x > 0; x--){for (y = 114; y > 0; y--);}
}//数码管驱动函数
void display(unsigned char i)
{static unsigned char wei;P0 = 0xff; //清除断码WE = 1; //打开位选P0 = SMGwei[wei];WE = 0; //锁存位选switch(wei){case 0: DU = 1; P0 = SMGduan[i/10000]; DU = 0; break;case 1: DU = 1; P0 = SMGduan[i % 10000 / 1000]; DU = 0; break; case 2: DU = 1; P0 = SMGduan[i % 1000 / 100]; DU = 0; break;case 3: DU = 1; P0 = SMGduan[i % 100 / 10]; DU = 0; break;case 4: DU = 1; P0 = SMGduan[i % 10]; DU = 0; break; }wei++; //wei自增扫描下一位if(wei == 5)//位数上限wei = 0;
}int main()
{while(1){delay(3); //延迟刷新,消除余辉影响。后期可用定时器保持显示display(1); //显示内容}return 0;
}
独立按键
独立按键原理图
如图,以S2为例。S2的1脚接地,2脚接入IO口P30。当S2按下,P30接地。此时,通过程序检测到P30为低电平从而判断出S2被按下。
示例程序:
#include <reg52.h>sbit led = P1^0; //led定义在P10
sbit keyS2 = P3^0; //键盘定义在P30//延时函数
void delay(unsigned int z) {unsigned int x, y;for(x = z; x>0; x--)for(y = 114; y > 0;y--);
}int main()
{while(1){if(!keyS2){delay(50); //软件防抖if(!keyS2) led = ~led;}while(!keyS2); //松手检测}return 0;
}
关于按键抖动
在机械按键的触点闭合和断开时,都会产生抖动,为了保证系统能正确识别按键的开关,就必须对按键的抖动进行处理。按键的抖动对于人类来说是感觉不到的,但对单片机来说,则是完全可以感应到的,而且还是一个很“漫长”的过程,因为单片机处理的速度在“微秒”级,而按键抖动的时间至少在“毫秒”级。单片机如果在触点抖动期间检测按键的通断状态,则可能导致判断出错,即按键一次按下或释放被错误地认为是多次操作,从而引起误处理。因此,为了确保单片机对一次按键动作只作一次响应,就必须考虑如何消除按键抖动的影响。
我们通过延时双重判断按键状态来为按键消除抖动。
矩阵键盘
矩阵键盘模块原理图
为每个键盘都单独配备一个IO口是不合理的。因此,矩阵键盘常用行列扫描来确定某个按键是否被按下。
示例程序:
#include <reg52.h>sbit DU = P2^6; //数码管段选
sbit WE = P2^7; //数码管位选//共阴极数码管段选表
unsigned char code table[] = {//0-90x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f,//A B C D E F H L n u 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x71, 0x76, 0x37, 0x3e,//- 熄灭0x40, 0x00};
unsigned int num = 0; //数码管显示的值
unsigned char KeyValue = 20; //按键值void delay(unsigned int z) {unsigned int x, y;for(x = z; x>0; x--)for(y = 114; y > 0;y--);
}void KeyScan() {//4*4矩阵键盘扫描P3 = 0xf0; //列扫描if(P3 != 0xf0) {delay(100);if(P3 != 0xf0) {switch(P3) {case 0xe0: KeyValue = 0; break;case 0xd0: KeyValue = 1; break;case 0xb0: KeyValue = 2; break;case 0x70: KeyValue = 3; break;}P3 = 0x0f; //行扫描switch(P3) {case 0x0e: ; break;case 0x0d: KeyValue += 4; break;case 0x0b: KeyValue += 8; break;case 0x07: KeyValue += 12; break;}while(P3 != 0x0f) ; //松手检测}}P3 = 0xff;if(P3 != 0xff) {delay(100);if(P3 != 0xff) {switch(P3) {case 0xfe: KeyValue = 16; break;case 0xfd: KeyValue = 17; break;case 0xfb: KeyValue = 18; break;case 0xf7: KeyValue = 19; break;}while(P3 != 0xff) ; //松手检测}}}int main () {WE = 1;P0 = 0xfe;WE = 0;DU = 1;while(1) {KeyScan(); //4*4矩阵键盘扫描P0 = table[KeyValue]; //在数码管上显示按键值}
}
51单片机学习 - 02相关推荐
- [51单片机学习笔记TWO]----蜂鸣器
蜂鸣器音乐播放实验 首先应该了解一下蜂鸣器音乐播放的原理,在这里我只讲一下电磁式蜂鸣器驱动原理(还有一种是压电式蜂鸣器): 电磁式蜂鸣器驱动原理: 蜂鸣器发声原理是电流通过电磁线圈,使电磁圈产生磁场来 ...
- 51单片机学习笔记-1简介及点灯
51单片机学习笔记 文章目录 51单片机学习笔记 1. 51单片机简介 1.1 安装软件 1.2 单片机简介 2. LED灯 2.1点亮一个LED 2.1.1原理分析 2.1.2 创建工程 2.2LE ...
- AutoLeaders控制组—51单片机学习笔记
文章目录 AutoLeaders控制组-51单片机学习笔记 1.1单片机及开发板介绍 单片机介绍 单片机应用领域 STC89C52单片机 内部结构 开发板介绍 2.1点亮一个Led 新建工程 编程 认 ...
- 【51单片机】51单片机学习资料合集
[51单片机]51单片机学习资料合集 资源文件架构 一次全部保存是保存不了的,超过了文件上限,需要分批保存,对于爱好学习和感兴趣学习51单片机的人来说是一波很不错的福利,希望大家多多支持. 51程序 ...
- 单片机c语言北航,【下载资料】《51单片机学习笔记》北航版
原标题:[下载资料]<51单片机学习笔记>北航版 如果手机下载有问题,请移步至电脑端,链接:https://forum.mianbaoban.cn/t/topic/36906 内容简介 本 ...
- 51单片机学习日记 | LCD1602黑块和闪烁问题的处理
51单片机学习日记 芯片:STM89C516RD+ 开发板:普中A4 学习:By 江科大自化协 LCD1602模块问题的处理办法: 第一行黑块 原因是初始化有问题:LCD1602如果没有初始化就会出现 ...
- 51单片机学习之智能小车(1)
说明 这是我学习一段时间51之后自己动手做的,比较简陋.此篇作为总结和复习,如有问题,请评论指出. 下篇:51单片机学习之智能小车(2) 小车概述(功能,所用模块) (1)蓝牙控制 通过手机上蓝牙串口 ...
- 51单片机学习笔记2 仿真器的使用及STC89Cxx简介
51单片机学习笔记2 仿真器的使用及STC89Cxx简介) 一.连接步骤 1. 硬件连接 2. 安装软件驱动 3. 检查是否安装成功 二.仿真步骤 1. 打开一个51工程 2. 选择仿真设备 3. S ...
- 51单片机学习杂记——基于STC89C52RC
51单片机学习杂记--基于STC89C52RC 我是看的b站郭天祥老师的课,说实话,我觉得我能力不是很够,所以记得很杂.废物了属于是. 接下来就是正文了 基本的元器件以及字母符号含义: 电容:帮助晶振 ...
最新文章
- Spark累加器(Accumulator)陷阱及解决办法
- 第二个mysql怎么装_Linux下安装两个MySQL的方法
- java,jdk安装,配置环境变量,window10系统
- Linux Shell 操作命令 ls
- python语言的三种数字类型_Python语言中的类型之数字类型--Python(10)
- JLOI2015 城池攻占
- 关于memcpy和 strcpy的区别 以及memset
- 光伏发电极其并网控制技术 最大功率点跟踪
- UNet多类别分割的keras实现
- 撂荒耕地变“希望良田” 国稻种芯:平远县热柘镇以企带村
- Elasticsearch提高查询性能的方法
- 恐怖的ChatGPT!
- Java图像处理(后面会补充PS啥的)
- 支付宝,百度,头条集卡群,过年一起玩
- 【认知实习】虚拟现实体验
- scrollView 横向
- 【转】关于提示can't load package 'xxx.bpl.' 错误问题的解决方法
- 高一女孩成 AI 赛事奖项收割机,05 后新星如何踏上 CV 之路?
- 软件自动化测试订飞机票,用 Selenium 搞定自动化测试项目,途牛搜机票。
- 谷歌WayMo提出R4D:采用参考目标做远程距离估计
热门文章
- Catfishcms漏洞复现
- 区块链的分类与地址长度
- 从计算机向外接硬盘传输照片,请各位老师指点:今天在往移动硬盘传输数据(修改的照片),最后剩1? 爱问知识人...
- 元宇宙应用开发实例——以太坊里的智能合约和Decentraland里的3D前端交互组件
- PostgreSQL设置主键
- 支持BLE 5.1 AoA/AoD,EFR32BG22参数对比nRF52833和nRF52811
- 栈和队列-第3章-《数据结构习题集》答案解析-严蔚敏吴伟民版
- W7编程作业——Support Vector Machines
- android 圆角颜色背景,android自定义控件之可自定义背景颜色的圆角textview
- html 酷狗音乐教程,酷狗音乐使用基础教程|酷狗音乐使用教程_好特教程