红外光电传感器应用举例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
uint num_min=0;
//1s 内计数次数
uint num_sec=0;
//1 分钟内计数次数
uint T0_counter=0;
//T0 中断的循环次数
void delay_Nms(uint N) { int i,j; for(i=0;i<N;i++)
for(j=0;j<50;j++); }
//开中断
//片选中数码管 1 //显示需显示的内容 //延时
P0 = tab[k]; delay_Nms(1); P2 = LED4; k = key[3] ; P0 = tab[k]; delay_Nms(1); }
timer1(void) interrupt 3 //* T1 中断服务程序 */
{
TR1 = 0;
THale Waihona Puke Baidu1 = 0;
TH1 = 0;
if(T0_counter==15)
//设置循环,1s
{
TR0 = 0;
num_sec = TH0*256+TL0;
//读取 T0 计数寄存器的值
num_min=num_sec*60;
//将 1s 的值乘以 60 作为一分
钟的转速
key[0] = num_min%10;
//将所读值取各个位的值赋给
key 数组
key[1] = num_min/10%10;
key[2] = num_min/100%10;
key[3] = num_min/1000;
TH0 = 0; TL0 = 0; TR0 = 1; T0_counter = 0 ;
} TR1=1; T0_counter++; }
//延时子程序
void init(void) {
//初始化过程
TMOD =0x15; 置
TH1 = 0; TL1 = 0; TH0 = 0; TL0 = 0; TR0 = 1; ET0 = 1; TR0 = 1; TR1 = 1; ET1 = 1; TR1 = 1; EA = 1;
}
void display(void) {
12
4
11
5
10
6
9
7
8
1
2
3
4
5
6
7
8
9
10
2 1
1
3
2
1
4
1
2
2
1
2
3
附件 2:完整程序
#include <reg51.h>
#define #define #define #define
LED1 LED2 LED3 LED4
0x02 0x01 0x08 0x04
//数码管 1 的地址 //数码管 2 的地址 //数码管 3 的地址 //数码管 4 的地址
#define #define
uint unsigned int uchar unsigned char
uint key[4]= {0,0,0,0};
//存储显示内容
uchar tab[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//数值七段码
uint k; P2 = LED1; k = key[0] ; P0 = tab[k]; delay_Nms(1); P2 = LED2; k = key[1] ; P0 = tab[k]; delay_Nms(1); P2 = LED3; k = key[2] ;
//T0,T1 控 制 字 设 //初始值设置
附件 1:硬件原理图
硬件 PCB 图
1
2
3
4
5
6 7
8
2
1
2
9
10
2
1
11
12
1 13
3
4
14
15
16 1
17 1 2
18
1 19
2
2 20
2
1
2
2
1
1
2
2
1 1
40
1
39
2
38
3
37
4
36
5
35
6
34
7
33
8
32
9
31
30
29
28
27
26
25
24 23
22
21
1
2
3
4
5
6
7
8
9
10
1
14
2
13
3
void main(void) {
init(); while(1) { display(); }
}
//调用系统初始化 //显示子程序