51单片机输出4位16进制码8000,9000,a000,b000转化为16位二进制码 p0p1同时输出的完整代码
时间: 2023-06-16 13:08:13 浏览: 149
以下是基于 Keil C51 环境的完整代码:
```c
#include <reg51.h>
// 延时函数
void delay(unsigned int n) {
unsigned int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < 125; j++);
}
}
// 16进制码转16位二进制码函数
unsigned int hexToBin(unsigned int hex) {
unsigned int bin = 0;
unsigned int i;
for (i = 0; i < 4; i++) {
bin |= ((hex >> i) & 0x01) << (i * 4);
}
return bin;
}
void main() {
unsigned int hexArr[] = {0x8000, 0x9000, 0xa000, 0xb000}; // 16进制码数组
unsigned int i, bin;
P0 = 0xff; // P0口设置为输出
P1 = 0xff; // P1口设置为输出
while (1) {
for (i = 0; i < 4; i++) {
bin = hexToBin(hexArr[i]); // 16进制码转16位二进制码
P0 = bin & 0xff; // P0口输出低8位
P1 = bin >> 8; // P1口输出高8位
delay(500); // 延时500毫秒
}
}
}
```
在以上代码中,我们首先定义了一个 `delay()` 函数,用于实现软件延时。然后,我们定义了一个 `hexToBin()` 函数,用于将 16 进制码转换为 16 位二进制码。在 `main()` 函数中,我们将 P0 和 P1 口均设置为输出,然后使用一个 `while` 循环不断输出 16 进制码数组中的值。在循环内部,我们先调用 `hexToBin()` 函数将当前的 16 进制码转换为 16 位二进制码,然后将低 8 位输出到 P0 口,高 8 位输出到 P1 口,并延时 500 毫秒,以便观察输出结果。
阅读全文