红外计数器的数码管显示代码
时间: 2023-07-02 15:10:46 浏览: 169
红外数码管数字显示
红外计数器一般需要使用红外接收模块和单片机来实现计数和数码管显示功能。以下是一个基于STC89C52单片机的红外计数器的数码管显示代码示例:
```c
#include <reg52.h>
sbit IRIN=P3^2; // 红外接收器引脚
sbit LATCH=P2^7; // 数码管锁存控制引脚
sbit SRCLK=P2^5; // 数码管移位控制引脚
sbit RCLK=P2^6; // 数码管显示控制引脚
sbit OE=P2^4; // 数码管输出使能控制引脚
unsigned int cnt=0; // 计数器
unsigned char code num[10]={ // 显示数字编码表
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
void delay(unsigned int t) // 延时函数
{
while(t--);
}
void HC595SendByte(unsigned char dat) // 数码管数据移位输出函数
{
unsigned char i;
for(i=0;i<8;i++)
{
SRCLK=0;
delay(1);
if(dat&0x80) P2|=0x01; else P2&=0xfe;
dat<<=1;
SRCLK=1;
delay(1);
}
}
void Display(unsigned int num) // 数码管显示函数
{
HC595SendByte(num/1000); // 千位数
HC595SendByte(num%1000/100); // 百位数
HC595SendByte(num%100/10); // 十位数
HC595SendByte(num%10); // 个位数
}
void main()
{
IRIN=1; // 红外接收器上拉
LATCH=1; // 数码管锁存控制引脚上拉
SRCLK=1; // 数码管移位控制引脚上拉
RCLK=1; // 数码管显示控制引脚上拉
OE=0; // 数码管输出使能控制引脚拉低
while(1)
{
if(IRIN==0) // 检测到红外信号
{
delay(1000); // 延时消抖
if(IRIN==0)
{
cnt++; // 计数器加1
Display(cnt); // 数码管显示计数值
}
while(!IRIN); // 等待红外信号结束
}
}
}
```
该代码使用了74HC595芯片来控制4个共阴数码管的显示。当检测到红外信号时,计数器加1,并将计数值显示在数码管上。需要注意的是,由于红外信号的干扰,可能会产生误计数,因此需要进行一定的消抖处理。
阅读全文