当前位置: 首页 > news >正文

独立键盘接口设计(Keil+Proteus)

前言

软件的操作参考这篇博客。

LED数码管的静态显示与动态显示(Keil+Proteus)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_64066303/article/details/134101256?spm=1001.2014.3001.5501实验:用4个独立按键控制8个LED指示灯。

按下k1键,P3口8个LED正向(由上至下)流水点亮;

按下k2键,P3口8个LED反向(由下而上)流水点亮;

按下k3键,高、低4个LED交替点亮;

按下k4键,P3口8个LED闪烁点亮。

Keil

这个程序就很好理解了,通过检查P1口的引脚来判断是否有按键被按下(每次只允许一个键被按下),然后调用相对应的函数即可。

由于采用的是共阳极,所以端口为0的时候表示LED亮,所以LED流水灯、交替这种就是通过控制端口是1还是0来实现的。

#include<reg51.h>
sbit S1=P1^0;//将S1位定义为P1.0引脚
sbit S2=P1^1;//将S2位定义为P1.1引脚
sbit S3=P1^2;//将S3位定义为P1.2引脚
sbit S4=P1^3;//将S4位定义为P1.3引脚unsigned char keyval;//定义键值储存变量单元void key_scan(void);//扫描键盘
void forward(void);//正向流水点亮
void backward(void);//反向流水点亮
void alter(void);//高、低位交替点亮
void blink(void);//闪烁点亮
void led_delay(void);//LED显示延时
void delay10ms(void);//软件消除抖动,延时void main(void){keyval=0;//键值初始化为0while(1){key_scan();//键盘扫描switch(keyval){case 1:forward();break;//键值为1,调用正向流水点亮函数case 2:backward();break;//键值为2,调用反向流水点亮函数case 3:alter();break;//键值为3,调用高、低位交替点亮函数case 4:blink();break;//键值为4,调用闪烁点亮函数}}
}//键盘扫描
void key_scan(void){P1=0xFF;if((P1&0x0F)!=0x0F){delay10ms();if(S1==0)keyval=1;//按键K1被按下if(S2==0)keyval=2;//按键K1被按下if(S3==0)keyval=3;//按键K1被按下if(S4==0)keyval=4;//按键K1被按下}
}//正向流水点亮LED
void forward(void){P3=0xFE;//LED0亮1111 1110led_delay();P3=0xFD;//LED1亮1111 1101led_delay();P3=0xFB;//LED2亮1111 1011led_delay();P3=0xF7;//LED3亮1111 0111led_delay();P3=0xEF;//LED4亮1110 1111led_delay();P3=0xDF;//LED5亮1101 1111led_delay();P3=0xBF;//LED6亮1011 1111led_delay();P3=0x7F;//LED7亮0111 1111led_delay();
}//反向流水点亮LED
void backward(void){P3=0x7F;//LED7亮0111 1111led_delay();P3=0xBF;//LED6亮1011 1111led_delay();P3=0xDF;//LED5亮1101 1111led_delay();P3=0xEF;//LED4亮1110 1111led_delay();P3=0xF7;//LED3亮1111 0111led_delay();P3=0xFB;//LED2亮1111 1011led_delay();P3=0xFD;//LED1亮1111 1101led_delay();P3=0xFE;//LED0亮1111 1110led_delay();
}//交替点亮高4位与低4位LED
void alter(void){P3=0x0F;//高4位亮0000 1111led_delay();P3=0xF0;//低4位亮1111 0000led_delay();
}//闪烁点亮LED
void blink(void){P3=0xFF;//全灭1111 1111led_delay();P3=0x00;//全亮0000 0000led_delay();
}//LED显示延时
void led_delay(void){unsigned char i,j;for(i=0;i<220;i++){for(j=0;j<220;j++);}
}//软件消除抖动,延时
void delay10ms(void){unsigned char i,j;for(i=0;i<100;i++){for(j=0;j<100;j++);}
}

Proteus

这里需要用到的器件前面基本上都出现过了。

元件名称Proteus关键字
51单片机AT89C51
复位按钮BUTTON
电阻RES
LED灯LED
LED-BIBY
LED-BIGY
LED-BIRG
LED-BIRY
LED-BLUE
LED-GREEN
LED-RED
LED-YELLOW

 这种LED灯蓝色表示灯亮,红色表示灯灭,所以不是很明显。

可以换成这种LED灯(如果这里还是没有亮的话需要调整右边一列电阻的阻值,调至220

K1被按下

K2被按下

K3被按下

K4被按下

总结

继续努力。

http://www.lryc.cn/news/222309.html

相关文章:

  • 阿里云99元服务器2核2G3M带宽_4年396元_新老用户同享
  • 数据库实验:SQL的数据控制
  • 深度学习_10_softmax_实战
  • 基于SpringBoot+Vue的博物馆管理系统
  • 软件开发中常见的设计原则
  • Linux安装ffmpeg并截取图片和视频的缩略图使用
  • 第三章:人工智能深度学习教程-基础神经网络(第一节-ANN 和 BNN 的区别)
  • 高防CDN与高防服务器:为什么高防服务器不能完全代替高防CDN
  • 关于卷积神经网络的多通道
  • 19、Flink 的Table API 和 SQL 中的内置函数及示例(1)
  • <a>标签的download属性部分浏览器无法自动识别文件后缀
  • 前端图片压缩上传,减少等待时间!优化用户体检
  • Ionic header content footer toolbar UI实例
  • uniapp 解决H5跨域的问题
  • 对称加密(symmetric encryption)和非对称加密(Asymmetric Encryption)(密钥、公钥加密、私钥解密)AES、RSA
  • iOS 16.4 之后真机与模拟器无法使用Safari调试H5页面问题
  • 野火霸天虎 STM32F407 学习笔记_3 尝试寄存器映射方式点亮 LED 灯
  • ZZ308 物联网应用与服务赛题第F套
  • 怎样选择文件外发控制系统,让数据实现高效安全交换?
  • 专访 SPACE ID:通往 Web3 无许可域名服务协议之路
  • 合并分支--将自己的分支合并到master分支
  • 力扣:153. 寻找旋转排序数组中的最小值(Python3)
  • matlab中实现画函数图像添加坐标轴
  • C语言求解一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
  • AtCoder abc148
  • k8s、docker 卸载
  • 【Linux】Shell命令行的简易实现(C语言实现)内键命令,普通命令
  • Kafka -- 架构、分区、副本
  • CSS特效001:鼠标放div上,实现旋转、放大、移动等效果
  • gin 快速入门手册