实验2-单片机数码管和按键实验

  之前做的一次实验,51单片机通过按键控制单个数码管。如有问题欢迎指正。

实验目标:

  通过建立4x4矩阵按键在8段数码管上面显示0~F,十六个按键值。

Proteus原理图


选择元器件:

DEVICES 说明
7SEG-COM-ANODE 1位共阳极数码管
AT89C51 MCU
BUTTON 按键
CAP 普通电容
CAP-ELEC 电解电容
CRYSTAL 晶振
LED-BLUE 蓝色LED灯
RES 电阻
RESPACK-8 排阻

  51单片机的P0口做IO口使用时是漏极开路输出,其引脚一般需要在片外接一定阻值的上拉电阻,此时端口不存在高阻抗的悬浮状态,因此它是一个准双向口。同时,P0口每一位的驱动能力是P1~P3口的两倍,每位可以驱动8个LSTTL(Low-power Schottky TTL,即低功耗肖特基TTL)输入,89C51等单片机任何一个端口想要获得较大的驱动能力,必须采用低电平输出。
  时钟晶体振荡频率为fosc=12MHZf_{osc}=12MHZfosc​=12MHZ
  时钟周期相当于Tosc=1fosc≈83.33nsT_{osc}=\frac{1}{f_{osc}} \approx 83.33nsTosc​=fosc​1​≈83.33ns
  复位电路的话通过给89C51等单片机的复位引脚RST加上大于2个机器周期的高电平(即24个时钟振荡周期)就可以使单片机复位。

KEIL工程:

主函数:

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define SegPort P0
#define KeyPort P1
#define TIME 1000           /*延时常量(ms)*/
#define SHAKING_TIME 10     /*消抖时间(ms)*/
uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};/*0123456789abcdef*/
void delay(uint i);
void display_digitron(uchar num);
uchar KeyScan(void);/*键盘扫描函数1*/
uchar KeyPro(void); /*键值返回函数1*/
void main(void)
{uchar num;while(1){/*使用函数1*/num=KeyPro();if(num!=0xff){display_digitron(num);}/*使用函数2:存在问题*/}
}
void delay(uint i)
{uchar t;while(i--){for(t=0;t<120;t++);}
}

  我使用了两种控制方法,分别是矩阵反转扫描,行扫描,状态量扫描(有bug),放上了比较简洁的矩阵反转扫描。
  数码管显示函数:

void display_digitron(uchar num)
{SegPort=seg[num];
}

  键盘扫描函数:

/*键盘扫描函数,使用行列反转扫描法*/
uchar KeyScan(void)
{unsigned char cord_h,cord_l;//行列值中间变量KeyPort=0x0f;            //行线输出全为0cord_h=KeyPort&0x0f;     //读入列线值if(cord_h!=0x0f)     //先检测有无按键按下{delay(SHAKING_TIME);        //去抖if((KeyPort&0x0f)!=0x0f){cord_h=KeyPort&0x0f;  //读入列线值KeyPort=cord_h|0xf0;  //输出当前列线值cord_l=KeyPort&0xf0;  //读入行线值while((KeyPort&0xf0)!=0xf0);//等待松开并输出return(cord_h+cord_l);//键盘最后组合码值}}return(0xff);     //返回该值
}

  按键处理函数:

/*按键处理函数1,返回键值*/
uchar KeyPro(void)
{switch(KeyScan()){case 0x7e:return 0;break;//0 按下相应的键显示相对应的码值case 0x7d:return 4;break;//4case 0x7b:return 8;break;//8case 0x77:return 12;break;//ccase 0xbe:return 1;break;//1case 0xbd:return 5;break;//5case 0xbb:return 9;break;//9case 0xb7:return 13;break;//dcase 0xde:return 2;break;//2case 0xdd:return 6;break;//6case 0xdb:return 10;break;//acase 0xd7:return 14;break;//ecase 0xee:return 3;break;//3case 0xed:return 7;break;//7case 0xeb:return 11;break;//bcase 0xe7:return 15;break;//fdefault:return 0xff;break;}
}

参考文献
1.《单片机原理与接口技术》张毅刚
资源

返回目录

51单片机Proteus仿真+Keil工程-实验2-按键-数码管相关推荐

  1. 51单片机Proteus仿真+Keil工程-实验7-单片机AD和DA实验

    实验7-单片机AD和DA实验   之前做的一次实验,51单片机AD和DA实验,数模使用芯片0832,模数转换使用0809.在做实验时曾经遇到一个问题,模数转换0809是不是只能输出0~ 5V,能不能输 ...

  2. 51单片机Proteus仿真+Keil工程-实验6-单片机扩展RAM6264实验

    实验6-单片机扩展RAM6264实验   之前做的一次实验,51单片机扩展RAM6264实验.如有问题欢迎指正. 实验目的:   掌握单片机扩展芯片的方法:掌握RAM6264的写入和读取: 实验内容: ...

  3. 51单片机Proteus仿真

    这里分享一些关于51单片机的Proteus仿真.部分仿真来源于网络整理.有需要可以看看. 51单片机Proteus仿真入门实验:https://mp.weixin.qq.com/s/6kgAWSqeY ...

  4. matlab单片机仿真,51单片机proteus仿真实验设计

    描述 这个proteus仿真是一个网友做的,该仿真可以生成方波.正弦波.锯齿波和三角波,并且还可以用按键调整波形. 不过,对初学者来讲,可能有点复杂.对于本科生来说,这个仿真几乎可以作为毕业论文了吧. ...

  5. 51单片机 Proteus仿真 时钟 串口 发送时钟 整点报时

    #include "reg52.h" #include <intrins.h> #include <string.h> #include <stdio ...

  6. 51单片机 Proteus仿真 基于单片机的篮球计分器设计 LCD

    基于单片机的篮球计分器设计 设计LCD显示篮球比分牌 通过加分按钮可以给A队或B队加分 设计对调功能,A队和B队分数互换,意味着中场交换场地 显示比赛倒计时功能 创新内容:如显示第几小节

  7. 51单片机 Proteus仿真 四路倒计时 定时器0.01S

  8. 51单片机 Proteus仿真 简易计算器设计 清零 十以内

    1 利用键盘及数码管作为计算机的输入及显示模块 2 能进行10以内的减减乘除的基本运算,按键有0~9±*/= 3 有清零"CR"按键 4 有记忆功能键 M+ RM M-,可以保存. ...

  9. 51单片机 Proteus仿真 电烙铁温度保护系统 DS18B20 温度报警系统

最新文章

  1. 【开源】分享一个前后端分离方案-前端angularjs+requirejs+dhtmlx 后端asp.net webapi
  2. hdu 2295 Radar 重复覆盖+二分
  3. java 子线程传参_踩坑之Java执行Linux命令死锁阻塞挂起
  4. Pwn_9 作业讲解
  5. 检测SDWebImage有没有缓存图片 IOS 获取网络图片大小
  6. java switch finally_JavaSE
  7. mysql序列号生成_超详细的mysql数据库GTID介绍—概念、优缺点、原理、生命周期等
  8. centos SSH免密登录
  9. svg Path 命令详解
  10. 服务器server.c、搜索serach.c
  11. Java调用IE浏览器
  12. ❤️万字攻略,详解腾讯面试❤️
  13. 以太网已连接却无法联网的解决记录
  14. 什么是最小化可行产品(MVP)?
  15. extern 详细用法
  16. 笔记本电脑总是莫名其妙自动睡眠,记录一次排查过程
  17. 腾讯云短信服务实现 Java 发送手机验证码(SpringBoot+Redis 实现)
  18. 北京华为HCIE认证里的数通深入学习QOS流量整形令牌桶机制和规则-ielab网络实验室
  19. 三角函数和三角函数的正交性
  20. 企业邮箱一般怎么收费

热门文章

  1. 基于springboot+vue的网咖网吧管理系统 elementui
  2. vs2015-MFC对话框模式,使用Pelco-D协议,控制电动云台
  3. STC8H8K64U单片机学习-3-硬件的准备工作
  4. 为什么我们要一直深入底层
  5. android 手机支持什么格式的视频格式,手机高清小普及:手机支持那些视频格式?...
  6. 如何看懂HijackThis扫描日志
  7. 发布JNCIP考试标准版本JUNOS实验用虚拟机
  8. 树莓派启用root账号
  9. 流式布局java_Java_流式布局、边框布局以及网格布局
  10. MyBatis之association嵌套