目录
一、主要功能
基于AT89C5单片机,红外检测客人是否到来,如果来客人,红外传感器发送高电平给单片机,LCD1602显示屏显示 欢迎光临
如果没有客人,就发送低电平给单片机,单片机收到低电平信号,就让LCD1602显示屏清屏;
仿真图:
编辑
二、硬件资源
基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。
1、51单片机
2、LCD1602显示屏
3、GP2D12红外检测模块
三、程序编程
/*所有代码看页尾资源*/
#include <REGX52.H>
#include<intrins.h>
#include<stdio.h>
#include "Delay.h"
#include "LCD1602.h"
#define uchar unsigned char
#define uint unsigned int
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long uint32;
sbit CS=P1^0; //51单片机引脚设置
sbit CLK=P1^1;
sbit DIO=P1^2;
uchar get\_AD\_Res() //ADC0832启动读取函数
{
uchar i, data1=0, data2=0;
CS=0;
CLK=0;DIO=1;\_nop\_();
CLK=1;\_nop\_();
CLK=0;DIO=1;\_nop\_();
CLK=1;\_nop\_();
CLK=0;DIO=0;\_nop\_();
CLK=1;\_nop\_();
CLK=0;DIO=1;\_nop\_();
for(i=0; i<8; i++)
{
CLK=1;\_nop\_();
CLK=0;\_nop\_();
data1=(data1<<1)|(uchar)DIO;
}
for(i=0; i<8; i++)
{
data2=data2|(uchar)DIO<<i;
CLK=1;\_nop\_();
CLK=0;\_nop\_();
}
CS=1;
return(data1 == data2)?data1:0;
}
void main() //主函数
{
char u;
LCD_Init(); //显示屏初始化
while(1)
{
u=get\_AD\_Res();
if(u>100)
{
u=0;
}
else
{
u=1;
}
if(u==0)
{
LCD_ShowString(1,4,"HUAN YING ");
LCD_ShowString(2,3,"GUANG LING ");
}
else
{
LCD_ShowString(1,4,"XIE XIE ");
LCD_ShowString(2,3,"ZAI JIAN ");
}
}
}
四、实现现象
具体动态效果看B站演示视频:
【单片机PROTEUS仿真】欢迎光临!_哔哩哔哩_bilibili
全部资料(源程序、仿真文件、安装包、演示视频):
链接:https://pan.baidu.com/s/1w616yf2qVVa6R8TUn1o9EQ
提取码:jo5d
–来自百度网盘超级会员V4的分享