HC-SR501红外感应模块

传感器一共三根引线,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

上一篇:SM4算法 下一篇:用python去掉pdf文件密码

相关阅读

添加新评论