传感器一共三根引线,VCC、GND、DAT,VCC接5v,Gnd接地,Dat我接了P10接口,感应到物体数码管显示1,没物体显示0。以下是51单片机中代码:
#include "reg52.h"
sbit IR_PORT = P1^0; //红外传感器DQ脚位
// 端口定义
sbit HC138_A = P2^2; // 74HC138 A端
sbit HC138_B = P2^3; // 74HC138 B端
sbit HC138_C = P2^4; // 74HC138 C端
// 共阴极数码管段码表(0~9,无小数点)
unsigned char code seg_table[] = {
0x3F, // 0: 00111111
0x06, // 1: 00000110
0x5B, // 2: 01011011
0x4F, // 3: 01001111
0x66, // 4: 01100110
0x6D, // 5: 01101101
0x7D, // 6: 01111101
0x07, // 7: 00000111
0x7F, // 8: 01111111
0x6F // 9: 01101111
};
// 延时函数(约1ms,晶振11.0592MHz)
void delay_ms(unsigned int ms) {
unsigned int i, j;
for(i = ms; i > 0; i--)
for(j = 110; j > 0; j--);
}
// 选择数码管位(0~7位)
void select_digit(unsigned char digit) {
switch(digit) {
case 7: HC138_C=0; HC138_B=0; HC138_A=0; break; // Y0有效(第1位)
case 6: HC138_C=0; HC138_B=0; HC138_A=1; break; // Y1有效(第2位)
case 5: HC138_C=0; HC138_B=1; HC138_A=0; break; // Y2有效(第3位)
case 4: HC138_C=0; HC138_B=1; HC138_A=1; break; // Y3有效(第4位)
case 3: HC138_C=1; HC138_B=0; HC138_A=0; break; // Y4有效(第5位)
case 2: HC138_C=1; HC138_B=0; HC138_A=1; break; // Y5有效(第6位)
case 1: HC138_C=1; HC138_B=1; HC138_A=0; break; // Y6有效(第7位)
case 0: HC138_C=1; HC138_B=1; HC138_A=1; break; // Y7有效(第8位)
default: break;
}
}
// 动态显示8位数字(示例:显示12345678)
void display_8digit(void) {
unsigned char i;
unsigned char num_buf[8] = {1,2,3,4,5,6,7,8}; // 要显示的数字数组
for(i = 0; i < 8; i++) {
P0 = 0x00; // 消影(先清空段码)
select_digit(i); // 选择第i位数码管
P0 = seg_table[num_buf[i]]; // 输出对应段码
delay_ms(1); // 延时保持显示
}
}
void main(void) {
while(1) {
P0 = seg_table[IR_PORT]; //获取脚位的电平,并显示到数码管上。
}
}本篇文章链接 地址:https://wmzos.com/?id=161

如果有帮助到您,打赏一下作者吧~
添加新评论