首页
云工具
图书资料
书签
资源
留言本
博客笔记
笔记
PHP
JAVA
VUE
Python
Go
Linux
JavaScript
node.js
通信协议
执笔为剑,写天写地写华年
落棋为子,点兵点将点江山
当前位置:
首页
>
单片机
> 用51单片机实现16进制转换2进制
用51单片机实现16进制转换2进制
🐥🐥🐥🐥🐥🐥🐥
3周前
(04-05)
单片机
33
```c ////////////////////////////////////////////// //function-description:矩阵键盘实现hex转bin //mcu:51系列单片机 //xtal:11.059MHz //author:zxt //date:2025 //version:1.0 ////////////////////////////////////////////// #include "reg52.h" //定义数据类型别名 typedef unsigned int u16; typedef unsigned char u8; #define MATRIX_KEYBOARD P1 #define SMG2 P0 #define LED P2 sbit LSA = P2 ^ 2; sbit LSB = P2 ^ 3; sbit LSC = P2 ^ 4; u8 my_data[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71}; /** * @function_name 时间延迟,占用CPU时间 */ void delay_us(u16 time) { while(time--); } u8 button_trigger(void) { u8 key_value = 0; MATRIX_KEYBOARD = 0x0f; if(MATRIX_KEYBOARD != 0x0f) { switch(MATRIX_KEYBOARD) { case 0x07: { key_value = 1; break; } case 0x0b: { key_value = 2; break; } case 0x0d: { key_value = 3; break; } case 0x0e: { key_value = 4; break; } } MATRIX_KEYBOARD = 0xf0; switch(MATRIX_KEYBOARD) //保存列为 0,按键按下后的键值 { case 0x70: key_value = key_value; break; case 0xb0: key_value = key_value + 4; break; case 0xd0: key_value = key_value + 8; break; case 0xe0: key_value = key_value + 12; break; } while(MATRIX_KEYBOARD != 0xf0); //等待按键松开 } else { key_value = 0; } return key_value; } void main() { u8 key_value = 0; u8 temp = 0x00; u8 array[5] = {0x00, 0x00, 0x00, 0x00, 0x00}; // 5个二进制位 u8 num = 0; while (1) { u8 i = 0; key_value = button_trigger(); if (key_value != 0) // 按下按键时更新数值 { temp = key_value - 1; // 0~31 } num = temp; // **将 num 转换为 5 位二进制存入 `array`** for (i = 0; i < 5; i++) { array[4 - i] = num % 2; // 取余数,存入数组 num /= 2; // 除以 2 } array[0]=temp; // **刷新数码管** for (i = 0; i < 5; i++) { switch (i) { case 0: LSC = 1; LSB = 1; LSA = 1; break; case 1: LSC = 0; LSB = 1; LSA = 1; break; case 2: LSC = 0; LSB = 1; LSA = 0; break; case 3: LSC = 0; LSB = 0; LSA = 1; break; case 4: // **如果是第5位(array[4]),需要特别处理** LSC = 0; LSB = 0; LSA = 0; break; } SMG2 = my_data[array[i]]; delay_us(500); // **延长延迟,稳定显示** SMG2=0x00; } } } ```
扫描二维码推送至手机访问。
版权声明:本文由
一段神奇的代码
发布,如需转载请注明出处。
分享给朋友:
微博
QQ
微信
豆瓣
QQ空间
领英
返回列表
没有更早的文章了...
没有最新的文章了...
相关文章
发表评论
取消回复
名称(*)
邮箱
网址
评论
◎欢迎参与讨论,请在这里发表您的看法和观点。
您好,
有事请留言!
评论
爱了爱了
哈哈公共
哈哈
博主666
请求
分类
权限系统
Idea
笔记
└
JavaScript
└
PHP
└
JAVA
└
VUE
└
Python
└
Go
└
Linux
└
node.js
└
通信协议
└
正则表达式
Opencv
消息队列
Nginx
uni-app
浏览器扩展
STM32开发板
Redis缓存
Go
Python
Git
JS
PHP
FastAdmin
Linux
其他问题
MySql
WorkMan
SQL
Html
我的世界
周边活动
Swoole
架构
Java
C#
单片机
设备调试
底盘