51单片机输出4位16进制码8000,9000,a000,b000转化为二进制码 p0p1同时输出的完整代码
时间: 2023-06-19 20:03:17 浏览: 181
以下是在Keil C编译器下的完整代码:
```
#include <STC89C5xRC.H> // 51单片机头文件
void delay(unsigned int xms); // 延时函数
void main()
{
unsigned int hex[4] = {0x8000, 0x9000, 0xa000, 0xb000}; // 待转化的16进制码
unsigned int bin[4][16] = {0}; // 存储转化后的二进制码
unsigned int i, j; // 循环计数器
for (i = 0; i < 4; i++) // 遍历每个16进制码
{
for (j = 0; j < 16; j++) // 将每个16进制码转化为二进制码
{
bin[i][j] = (hex[i] >> (15-j)) & 0x0001; // 右移后取最低位
}
}
while (1) // 循环输出
{
P0 = 0x00; // 清空P0口
for (i = 0; i < 4; i++) // 遍历每个16进制码
{
for (j = 0; j < 16; j++) // 依次输出每个二进制位
{
P1 = i; // 输出二进制位所在的P1口
P0 = (P0 & 0xf0) | bin[i][j]; // 输出二进制位所在的P0口
delay(5); // 延时
P0 &= 0xf0; // 清空P0口,准备输出下一个二进制位
}
}
}
}
void delay(unsigned int xms)
{
unsigned int i, j;
for (i = xms; i > 0; i--)
{
for (j = 110; j > 0; j--);
}
}
```
该程序将16进制码转化为二进制码,并依次输出到P0口,同时通过P1口指示当前输出的二进制位是哪个16进制码的。在输出每个二进制位时,程序会进行5毫秒的延时,以保证输出能够被观察到。
阅读全文