操作:

实现按下一个按键,对应的数码管和点阵显示相应的数字

代码:

/*  *******************数码管按键综合项目********************* */

#include <reg52.h>

int local(unsigned int i);

sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4;

sbit key1 = P2^4; sbit key2 = P2^5; sbit key3 = P2^6;

unsigned char leds[] = {  0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,  0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E };

unsigned char ledss[10][8]={  {0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55},  {0xE7,0xE3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3},  {0x81,0x81,0x9F,0x81,0x81,0xF9,0x81,0x81},  {0x81,0x81,0x9F,0x81,0x81,0x9F,0x81,0x81},  {0x8F,0x87,0x93,0x99,0x9C,0x00,0x00,0x9F},  {0x81,0x81,0xF9,0x81,0x81,0x9F,0x81,0x81},  {0x81,0x81,0xF9,0x81,0x81,0x99,0x81,0x81},  {0x83,0x83,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F},  {0x81,0x81,0x99,0x81,0x81,0x99,0x81,0x81},  {0x81,0x81,0x99,0x81,0x81,0x9F,0x81,0x81}, };

unsigned int locals = 0;

void main() {

ADDR3 = 0;

ENLED = 0;

EA = 1;

TMOD = 0x01;

ET0 = 1;

TH0 = 0xFC;

TL0 = 0x67;

TR0 = 1;

//开启九位输入键,其它键关闭

P2 = 0xF1;

while(1)  {

//得到键位所在KeyIn1输入列

if(key1==0)

{    locals = local(1);

TR0 = 1;

}

//得到键位所在KeyIn2输入列

else if(key2==0)   {

locals = local(2);

TR0 = 1;    }

//得到键位所在KeyIn3输入列

else if(key3==0)   {

locals = local(3);

TR0 = 1;

}

}

//对应键位赋值数码管

}

void InterruptTimer0() interrupt 1 {

static unsigned char i = 0;

TH0 = 0xFC;  TL0 = 0x67;  P0 = 0xFF;  ADDR3 = 0;

switch(i)  {

case 0: ADDR0 = 0;ADDR1 = 0;ADDR2 = 0; P0 = ledss[locals][i];i++;break;

case 1: ADDR0 = 1;ADDR1 = 0;ADDR2 = 0; P0 = ledss[locals][i];i++;break;

case 2: ADDR0 = 0;ADDR1 = 1;ADDR2 = 0; P0 = ledss[locals][i];i++;break;

case 3: ADDR0 = 1;ADDR1 = 1;ADDR2 = 0; P0 = ledss[locals][i];i++;break;

case 4: ADDR0 = 0;ADDR1 = 0;ADDR2 = 1; P0 = ledss[locals][i];i++;break;

case 5: ADDR0 = 1;ADDR1 = 0;ADDR2 = 1; P0 = ledss[locals][i];i++;break;

case 6: ADDR0 = 0;ADDR1 = 1;ADDR2 = 1; P0 = ledss[locals][i];i++;break;

case 7: ADDR0 = 1;ADDR1 = 1;ADDR2 = 1; P0 = ledss[locals][i];i++;break;

case 8: ADDR3 = 1;ADDR0 = 0;ADDR1 = 0;ADDR2 = 0; P0 = leds[locals];i++;break;

case 9: ADDR3 = 1;ADDR0 = 1;ADDR1 = 0;ADDR2 = 1; P0 = leds[locals];i=0;break;   default: break;  } }

int local(unsigned int i) {

unsigned int b;

//判断当前键位

switch(i)  {

//得到键位所在KeyIn1输入列

case 1:

P2 = 0xF7;  //仅仅开启out1

if(key1 == 0){      b = 1;     }

P2 = 0xFB;  //仅仅开启out2

if(key1 == 0){      b = 4;     }

P2 = 0xFD;  //仅仅开启out3

if(key1 == 0){      b = 7;     }   break;

//得到键位所在KeyIn2输入列

case 2:

P2 = 0xF7;  //仅仅开启out1

if(key2 == 0){      b = 2;     }

P2 = 0xFB;  //仅仅开启out2

if(key2 == 0){      b = 5;     }

P2 = 0xFD;  //仅仅开启out3

if(key2 == 0){      b = 8;     }

break;

//得到键位所在KeyIn3输入列

case 3:

P2 = 0xF7;  //仅仅开启out1

if(key3 == 0){      b = 3;     }

P2 = 0xFB;  //仅仅开启out2

if(key3 == 0){      b = 6;        }

P2 = 0xFD;  //仅仅开启out3

if(key3 == 0){      b = 9;     }

break;

default: break;  }

//重置开启九位输入键,其它键关闭

P2 = 0xF1;

return b; }

STC-51开发板-单片机控制数码管&按键&点阵综合操作的更多相关文章

  1. 鸿蒙开发板外设控制 之 实现按键“按下事件”和“释放事件”的通用框架(V0.0.1)

    在帖子 <鸿蒙开发板外设控制>直播图文版(2020.10.28) 中我们提到过:"开发板上的按键也可以看作一种 GPIO 外设." 因此,要捕捉按键的状态(按下或释放) ...

  2. 【单片机入门】(四)应用层软件开发的单片机学习之路-----ESP32开发板PWM控制电机以及中断的使用

    引言 各位大佬,晚上好啊,在上一篇博客中,我们讲了什么是UART串口通讯,以及使用USB转TTL使得单片机可以和c#上位机做一个串口通讯,接下来,为大家带来PWM的概念原理,以及实际案例,使用PWM对 ...

  3. iTOP-4412嵌入式开发板ioremap控制GPIO寄存器

    转自迅为电子技术论坛:http://bbs.topeetboard.com GPIO 的寄存器通过 ioremap函数转换之后,可以通过直接控制虚拟地址来控制物理地址(寄存器的实际地址),这样就实现 ...

  4. 关于郭天祥51开发板无法烧敲代码问题的解决(Prolific USB-to-Serial Comm Port)

    1. 事件背景: 因为使用了win8系统,之前购买的郭天祥C51开发板在通过一个两头都是usb口的下载线下载程序时出现了问题:下载工具stc isp无法连接到开发板上的串口,所以无法下载程序到c51开 ...

  5. 鸿蒙开发板外设控制 之 实现物理按键的“长按事件”(按键通用框架 V0.0.2)

    我在之前的帖子<实现按键"按下事件"和"释放事件"的通用框架(V0.0.1)>中阐述了DTButton-V0.0.1的设计思路,并且也在帖子中开源了 ...

  6. 1-51单片机WIFI学习(开发板介绍)

    源码链接都在后面 前面的都是介绍单独的WIFI,没有和单片机结合起来,因为做项目很少会只用WIFI模块.大多数都是WIFI模块作为中转数据的桥梁,单片机负责 数据采集,控制等等,所以自己准备出一套51 ...

  7. TurnipBit开发板“趣味赛”:平衡力大比拼

    让孩子在快乐自由的游戏中培养编程思维 平衡力大挑战是我们经常经常玩的的一个小游戏,脑补画面的话比较常见的是单腿平衡力大比拼,摇晃幅度小者胜利.游戏好玩归好玩,但是想要公平判断胜负却不容易.下面就教大家 ...

  8. iTOP-IMX6UL 实战项目:ssh 服务器移植到 arm 开发板

    实验环境:迅为提供的Ubuntu12.04.2 以及虚拟机 编译器:arm-2009q3 编译器 开发板系统:QT系统   开发板使用手册中给Windows 系统安装了 ssh 客户端,给 Ubunt ...

  9. iTOP-4412开发板-实战教程-ssh服务器移植到arm开发板

    本文转自迅为开发板:http://www.topeetboard.com 在前面实战教程中,移植了“串口文件传输工具”,整个移植过程是比较简单的,而且我 们没有做任何协议方面的了解,只是“配置”+“编 ...

随机推荐

  1. java获取随机密码

    import java.util.Random; public class tests { /** * * author LiuQiang * date 2013-10-14 下午01:13:54 * ...

  2. setting.xml配置文件 --转载

    转载出处:http://www.cnblogs.com/yakov/archive/2011/11/26/maven2_settings.html 在此,简单的说下 setting.xml 和 pom ...

  3. ES之六:ElasticSearch中Filter和Query的异同

    如下例子,查找性别是女,所在的州是PA,过滤条件是年龄是39岁,balance大于等于10000的文档: { "query": { "bool": { &quo ...

  4. 1011 World Cup Betting (20 分)

    1011 World Cup Betting (20 分) With the 2010 FIFA World Cup running, football fans the world over wer ...

  5. 技巧:利用putty通过win7访问ubuntu

    .用apt-get直接安装SSHD服务所需相关软件包: sudo apt-get install openssh-server .开启服务: sudo /etc/init.d/sshd start p ...

  6. 开发需求:每个表dump出部分数据

    mysqldump 每张数据表统一导出的N个记录数 需求: 在开发过程中,需要将生产的数据导出到本地开发环境,希望可以每个表都导出部分数据.由于生产数据表都是上千万或亿级别,直接从服务器导出数据会影响 ...

  7. 基于sklearn的 BaseEstimator开发接口:模型融合Stacking

    转载:https://github.com/LearningFromBest/CMB-credit-card-department-prediction-of-purchasing-behavior- ...

  8. Python中__init__和__new__的区别详解

    __init__ 方法是什么? 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__ 方法通常用在初始化一个类实例的时候.例如: # -*- cod ...

  9. Windows 应用程序交互过程

     应用程序 Windows的应用程序一般包含窗口(Window),它主要为用户提供一种可视化的交互方式(窗口是由线程(Thread)创建的).Windows 系统通过消息机制来让系统和用户进行交互 ...

  10. html大小写问题

    js中变量名,函数,关键字都区分大小写,如var i;和var I;是两个不同的变量. css中定义的元素名称不区分大小写的. html中,标签和标签属性统一使用小写形式,固有属性也一律使用小写,自定 ...