导航:首页 > 操作系统 > 单片机红外计数

单片机红外计数

发布时间:2023-01-27 06:40:41

单片机C语言实现红外脉冲计数计算车速

以51单片机 12MHz晶振情况下为例

#define STAYTIME 781//定时200ms 其他时间可以自己算
int tcount,p_count;
double speed;
void t0_init(void)
{
TH0=0x00;
TL0=0x00;
TMOD|=0x02;
ET0=1;
TR0=1;
IT0=1;//外部中断下降沿触发
EX0=1;
}
void pulse_int(void) interrupt 0
{
p_count++;
}
void t0_int(void) interrupt 1
{
tcount++;
if(tcount>STAYTIME){
tcount=0;
EX0=0;//关输入脉冲的中断
ET0=0;
speed=p_count/20;//单位就是 转/秒
//下面重新开始
p_count=0;
ET0=1;
EX0=1;
}
}
}
void main()
{
t0_init();
EA=1;
while(1);

}

⑵ 求51单片机+1602实现红外计数器的显示c程序,附下 数码管程序,现在要用1602显示···

先定义一下LCD的使能端口一些设置
例如:
sbit LCD_RS = P2^6; //复位端
sbit LCD_RW = P2^5; //写数据端
sbit LCD_EP = P2^7; //使能端
添加读写以及初始化LCD的代码
/****************侧忙函数************************/
BOOL lcd_bz()
{
BOOL result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EP = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result = (BOOL)(P0 & 0x80); //检测P0最高位是否为1
LCD_EP = 0;
return result;//返回侧忙结果
}

/****************写命令函数************************/
lcd_wcmd(BYTE cmd)
{ // 写入指令数据到LCD
while(lcd_bz());
LCD_RS = 0;
LCD_RW = 0;
LCD_EP = 0;
_nop_();
_nop_();
P0 = cmd; //将8位指令通过P0口传给1602
_nop_();
_nop_(); //用于产生一个脉冲宽度
_nop_();
_nop_();
LCD_EP = 1;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EP = 0;
}

lcd_pos(BYTE pos)
{ //设定显示位置
lcd_wcmd(pos | 0x80);
}

/****************写数据函数************************/
lcd_wdat(BYTE dat)
{ //写入字符显示数据到LCD
while(lcd_bz());
LCD_RS = 1;
LCD_RW = 0;
LCD_EP = 0;
P0 = dat; //将8位数据通过P0口传给1602
_nop_();
_nop_(); //用于产生一个脉冲宽度
_nop_();
_nop_();
LCD_EP = 1;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EP = 0;
}

lcd_init()
{ //LCD初始化设定
lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
delay(1);
lcd_wcmd(0x0c); //显示开,关光标
delay(1);
lcd_wcmd(0x06); //移动光标
delay(1);
lcd_wcmd(0x01); //清除LCD的显示内容
delay(1);
}

添加完之后在main函数中添加初始化LCD的函数
例如
void main(void)
{
BYTE i;
lcd_init();// 初始化LCD
delay(10);
while(1)
{
lcd_wcmd(0x06);//向右移动光标
lcd_pos(0);//设置显示位置为第一行的第1个字符
i = 0;
tt.XX.number = ??; //这边问好表示你需要显示的数据,这样你应该明白怎么做了
//将你的数据赋值给number即可,然后让他显示dis的数据
while(tt.dis1[ i ] != '\0')
{
lcd_wdat(dis1[ i ]);
i++;
delay(30);//控制两字之间显示速度
}
delay(500);//控制两字之间显示速度
lcd_wcmd(0x01);//清除LCD的显示内容

}

}
//程序的定义头文件下写这个,主要是省去数据转换这一环节,让自己代码更加快速转换
typedef union
{
unsigned char dis1[4];
struct
{
int number;
}XX;
}TT;
idata TT tt;
不懂可继续追问,懒得去看你之前写的那些,就给你提供一下方法

⑶ 我想用单片机做个红外计数器测人数,不知用什么样的红

估计是买的到现成的。
你们这个现场有没有灰尘什么的哦,是不是计较麻烦哦
我们倒是自己做过计数器,不过我们的是数很小的东西的,电子元器件,绿豆那么大个的吧
我们之前是买的一个振动盘那种机器,不过比较慢,一天能数几万个,几个月过后还数不准了;
我们就自己做的。
你们要数这个东西太大个了。

⑷ 急求一红外管计数器,51单片机控制的C程序

电路都没看到就要程序?这个不难的 一个统计进来的人数 一个统计出去的人数 当人数是0的时候就给个控制信号关灯

⑸ 关于51单片机的红外计数实验问题,写完程序后数码管数值不会改变。求大神指点。。。。。。

以STC89C52RC单片机为例,部分程序如下:
void initTimer1(void) //初始化定时器1
{
AUXR |= 0x40; //定时器1工作于1T模式
TMOD |= 0x60; //设置定时器1运行模式2 (8-bit 自动装载)
TL1 = TH1 = 0xff; //初始值
TR1 = 1; //定时器1开始运行
EA = 1; //开总中断
ET1 = 1; //使能定时器1中断
}
//--------------------------------------------
void T1int() interrupt 3 //中断
{
ucCount++; //计数
flag = 1;
}
//------------------------------------------

这个表格定义一般用code:
unsigned char code num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};//0----9
前面声明变量增加ucCount和flag:
unsigned char ucCount = 0;
bit flag = 0;

主程序:
viod main(viod)
{
aa=1;
bb=1;
initTimer1();
m=0;
n=0;
while(1)
{
if(flag == 1)

{
flag = 0;
if(uiCount > 99) uiCount = 0;
n = uiCount / 10;
m = uiCount % 10;
}
cc=num[m];
aa=0;
delay_nms();
aa=1;
cc=num[m];
bb=0;
delay_nms();
bb=1;
}
以上程序没有完整整理,但思路请参考。
PS:定义变量不要用诸如“c“这样的简单字母,因为容易和单片机内部寄存器混淆。

⑹ 请教红外对管计数的C语言程序

//思路主要是red1对外面的红外计数,red2对里面的红外计数,通过比较
//二者大小可以知道是进人还是出人,另外要是有人站了一下又出去,
//red1就会比red2大2,可以判断出教室里人数没变。

#include<reg51.h>
int renshu;//教室里人数
int red1;//计数
int red2;//计数

int0()
{
red1++;
}

int1()
{
if(red1==red2+1){renshu++;}
elseif(red1==red2-1){renshu--;}
elseif(red1=red2+2){red1=red1-2;}
elseif(red1=red2-2){red2=red2-2;renshu--;}
else{;}
red2++;
}

main()
{
red1=0;red2=0;renshu=0;
while(1)//在这里你可以添加显示程序什么的
{
;
}

}
//程序没调试,不过思路应该没问题,你把格式再规范话一下,没带书,关于中断的格式我忘了

⑺ 基于单片机的红外线计数器

能1:般指示灯
能2:D12发红外线供检测器检测
接电阻R13目限流D12般要超20mA,
4.7K般330欧姆或更即
换用其端口般考虑放排线便

⑻ 红外光没照射一次红外接收器计数器加一在单片机上怎么用C编写

#include
unsigned char xs_d[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
signed int time=0;

yanshi(unsigned int k)
{
unsigned int i,j;
for(i=0;i999)time=0;
}
}

xs_hs()
{
P2=0x02;
P0=xs_d[time/100];
yanshi(5);
P2=0x04;
P0=xs_d[(time/10)%10];
yanshi(5);
P2=0x08;
P0=xs_d[time%10];
yanshi(5);
P2=0x08;
}

main()
{
EA=1;
IT0=1;
EX0=1;
while(1)
{
xs_hs();
}
}

阅读全文

与单片机红外计数相关的资料

热点内容
主角叫陆宇的小说排行榜 浏览:944
程序员害怕去酒吧 浏览:121
有部很肉的写大学的小说 浏览:421
鬼习班 浏览:699
十四路末班车鬼片电影完整版免费 浏览:349
日本电影 网站 浏览:357
抗战大片60部 浏览:67
校园卡是否经过加密 浏览:270
泰国电影免费 浏览:43
女主通过系统慢慢变美的小说 浏览:483
国术电影大全 浏览:756
三星贴片机离线编程 浏览:669
完美世界txt下载全本精校小说 浏览:935
轰炸机电影有哪些 浏览:906
国外嗨皮咳嗽服务器地址 浏览:101
爱妾电影里面女演员的名字 浏览:693
电子回单溯源码 浏览:318
幽幻僵尸演员 浏览:83
女主重生从小就有系统变美 浏览:865
盗墓类电影 浏览:203