STC-51开发板-单片机控制数码管&按键&点阵综合操作
操作:
实现按下一个按键,对应的数码管和点阵显示相应的数字
代码:
/* *******************数码管按键综合项目********************* */
#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开发板-单片机控制数码管&按键&点阵综合操作的更多相关文章
- 鸿蒙开发板外设控制 之 实现按键“按下事件”和“释放事件”的通用框架(V0.0.1)
在帖子 <鸿蒙开发板外设控制>直播图文版(2020.10.28) 中我们提到过:"开发板上的按键也可以看作一种 GPIO 外设." 因此,要捕捉按键的状态(按下或释放) ...
- 【单片机入门】(四)应用层软件开发的单片机学习之路-----ESP32开发板PWM控制电机以及中断的使用
引言 各位大佬,晚上好啊,在上一篇博客中,我们讲了什么是UART串口通讯,以及使用USB转TTL使得单片机可以和c#上位机做一个串口通讯,接下来,为大家带来PWM的概念原理,以及实际案例,使用PWM对 ...
- iTOP-4412嵌入式开发板ioremap控制GPIO寄存器
转自迅为电子技术论坛:http://bbs.topeetboard.com GPIO 的寄存器通过 ioremap函数转换之后,可以通过直接控制虚拟地址来控制物理地址(寄存器的实际地址),这样就实现 ...
- 关于郭天祥51开发板无法烧敲代码问题的解决(Prolific USB-to-Serial Comm Port)
1. 事件背景: 因为使用了win8系统,之前购买的郭天祥C51开发板在通过一个两头都是usb口的下载线下载程序时出现了问题:下载工具stc isp无法连接到开发板上的串口,所以无法下载程序到c51开 ...
- 鸿蒙开发板外设控制 之 实现物理按键的“长按事件”(按键通用框架 V0.0.2)
我在之前的帖子<实现按键"按下事件"和"释放事件"的通用框架(V0.0.1)>中阐述了DTButton-V0.0.1的设计思路,并且也在帖子中开源了 ...
- 1-51单片机WIFI学习(开发板介绍)
源码链接都在后面 前面的都是介绍单独的WIFI,没有和单片机结合起来,因为做项目很少会只用WIFI模块.大多数都是WIFI模块作为中转数据的桥梁,单片机负责 数据采集,控制等等,所以自己准备出一套51 ...
- TurnipBit开发板“趣味赛”:平衡力大比拼
让孩子在快乐自由的游戏中培养编程思维 平衡力大挑战是我们经常经常玩的的一个小游戏,脑补画面的话比较常见的是单腿平衡力大比拼,摇晃幅度小者胜利.游戏好玩归好玩,但是想要公平判断胜负却不容易.下面就教大家 ...
- iTOP-IMX6UL 实战项目:ssh 服务器移植到 arm 开发板
实验环境:迅为提供的Ubuntu12.04.2 以及虚拟机 编译器:arm-2009q3 编译器 开发板系统:QT系统 开发板使用手册中给Windows 系统安装了 ssh 客户端,给 Ubunt ...
- iTOP-4412开发板-实战教程-ssh服务器移植到arm开发板
本文转自迅为开发板:http://www.topeetboard.com 在前面实战教程中,移植了“串口文件传输工具”,整个移植过程是比较简单的,而且我 们没有做任何协议方面的了解,只是“配置”+“编 ...
随机推荐
- java获取随机密码
import java.util.Random; public class tests { /** * * author LiuQiang * date 2013-10-14 下午01:13:54 * ...
- setting.xml配置文件 --转载
转载出处:http://www.cnblogs.com/yakov/archive/2011/11/26/maven2_settings.html 在此,简单的说下 setting.xml 和 pom ...
- ES之六:ElasticSearch中Filter和Query的异同
如下例子,查找性别是女,所在的州是PA,过滤条件是年龄是39岁,balance大于等于10000的文档: { "query": { "bool": { &quo ...
- 1011 World Cup Betting (20 分)
1011 World Cup Betting (20 分) With the 2010 FIFA World Cup running, football fans the world over wer ...
- 技巧:利用putty通过win7访问ubuntu
.用apt-get直接安装SSHD服务所需相关软件包: sudo apt-get install openssh-server .开启服务: sudo /etc/init.d/sshd start p ...
- 开发需求:每个表dump出部分数据
mysqldump 每张数据表统一导出的N个记录数 需求: 在开发过程中,需要将生产的数据导出到本地开发环境,希望可以每个表都导出部分数据.由于生产数据表都是上千万或亿级别,直接从服务器导出数据会影响 ...
- 基于sklearn的 BaseEstimator开发接口:模型融合Stacking
转载:https://github.com/LearningFromBest/CMB-credit-card-department-prediction-of-purchasing-behavior- ...
- Python中__init__和__new__的区别详解
__init__ 方法是什么? 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__ 方法通常用在初始化一个类实例的时候.例如: # -*- cod ...
- Windows 应用程序交互过程
应用程序 Windows的应用程序一般包含窗口(Window),它主要为用户提供一种可视化的交互方式(窗口是由线程(Thread)创建的).Windows 系统通过消息机制来让系统和用户进行交互 ...
- html大小写问题
js中变量名,函数,关键字都区分大小写,如var i;和var I;是两个不同的变量. css中定义的元素名称不区分大小写的. html中,标签和标签属性统一使用小写形式,固有属性也一律使用小写,自定 ...