操作:

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

代码:

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

#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. Xshell连接不上Ubuntu的解决方法

    xshell连接linux主机时,会出现错误:Could not connect to '127.0.0.1' (port 22): Connection failed.  但是这时能ping通. 通 ...

  2. WinRAR打包时不包含文件夹本身,只打包文件夹里的文件和目录

    加上-ep1 参数即可. rar u -m3 -s -r -o+ -ep1 -x*.zip client_zmv9.zip ".\client_zmv9\*"

  3. 【Spring学习笔记-MVC-5】利用spring MVC框架,实现ajax异步请求以及json数据的返回

    作者:ssslinppp      时间:2015年5月26日 15:32:51 1. 摘要 本文讲解如何利用spring MVC框架,实现ajax异步请求以及json数据的返回. Spring MV ...

  4. jmeter监控服务器的方法

    先下载Jmeter资源监控插件,我的百度云jmeter视频里面有说. 地址如下: JMeterPlugins-Standard-1.3.1.zip  下载 https://jmeter-plugins ...

  5. [转]html 下拉框级联

    <html> <head> <title>html 下拉框级联</title> <meta charset="UTF-8"/& ...

  6. 使用eclipse在linux下开发C/C++

    一直在Linux下开发,苦于没有IDE,一般都是自己编写Makefile,然后在windows下用文本编辑器ftp打开文件编辑,然后在linux下完成编译.调试代码也只能是命令行用gdb进行调试,相当 ...

  7. Linux入门之vi

    How to Use the vi Editor* *Copyright 1991 by Simon Fraser University. Reprinted with permission. The ...

  8. 基于Redis位图实现用户签到功能

    场景需求 适用场景如签到送积分.签到领取奖励等,大致需求如下: 签到1天送1积分,连续签到2天送2积分,3天送3积分,3天以上均送3积分等. 如果连续签到中断,则重置计数,每月初重置计数. 当月签到满 ...

  9. uva-10152-乌龟排序

    求从待排序的到期望的顺序的最小操作顺序,只能进行一个操作,将当前的乌龟拿出来,上面的下移,拿出来的放到最上面 发现voj没有PE, 解题方法,把俩个串反过来使用,从期望的顺序到待排序的顺序. AC:1 ...

  10. Django静态图片参数解析

    使用Django静态设置时,遇到很多问题,经过艰苦的Baidu, stack overflow, Django原档阅读,终于把静态图片给搞出来了.特记录下来. 关键的概念:Django中,静态资源的存 ...