前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >单片机补充案例--stc89c52的P4口使用

单片机补充案例--stc89c52的P4口使用

作者头像
zhangrelay
发布于 2021-03-03 06:48:56
发布于 2021-03-03 06:48:56
92100
代码可运行
举报
运行总次数:0
代码可运行

说明:头文件为8052.h默认情况下不能使用P4口,需要添加如下代码,如使用P4_4:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
__sfr  __at (0xE8) P4;
__sbit __at (0xEC) P4_4;

如果用keil:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sfr P4 = 0xe8;
sbit P44 = P4^4;
代码语言:txt
AI代码解释
复制
P4口接蜂鸣器    

当然也可以使用固件库。

具体案例参考:https://cloud.tencent.com/developer/article/1796629

入侵检测系统未使用固件库,参考程序如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <8052.h>
__sfr  __at (0xE8) P4;
__sbit __at (0xEC) P4_4;

#define LED    P0	    //LED闪烁警示
#define LSA    P1_5	    //P0控制=0
#define LSB    P1_6	    //P0控制=0
#define LSC    P1_7	    //P0控制=0
#define ALARM  P4_4          //声音警示
#define HUMAN  P3_2          //模拟人体检测信号
#define KEY01  P3_4          //模拟密码组合1
#define KEY02  P3_5          //模拟密码组合2
unsigned int   cnt = 0;      //定义一个计数变量,记录 T0 溢出次数
unsigned char  alarmlevel=0; //警报等级
void sleep(unsigned int t);
void SysInit();
void Timer0() __interrupt 1;
/************************************************************/
void main ()		    //主函数
{
	SysInit();
	while(1)
	{
	    if(alarmlevel==1) //LED警示
	    {
	        LED=0xff;
	        sleep(10000);
	        LED=0x00;
	        sleep(10000);
	    }
	    if(alarmlevel==2) //LED+Sound警示
	    {
	    	LED=0xff;
	    	ALARM=1;
        	sleep(2000);
        	LED=0x00;
        	ALARM=0;
        	sleep(2000);	    	
	    }
	}
}
 /************************************************************/
void sleep(unsigned int t)
{
	while(t--);
}
void SysInit()
{
	LSA  = 0;	   //本开发板的P0发光二极管片选地址
	LSB  = 0;
	LSC  = 0;
	LED  = 0xff;;	   //初始化LED
	TMOD = 0x01;       //设置定时器T0工作方式1
	TL0  = 47104%256;  //计数器初值
	TH0  = 47104/256;
	TR0  = 1;	   //启动定时器
	ET0  = 1;	   //开中断
	EA   = 1;
}
void Timer0() __interrupt 1 //定时器 T0 中断响应
{
 	TL0  = 47104%256;   //计数器初值
	TH0  = 47104/256;
	if(HUMAN==0)
	{
	    cnt++;
	    if(alarmlevel==0)
	        alarmlevel=1;
	}
 	if (cnt > 249)       //判断 T0 溢出是否达到 250 次,等于5秒
 	{
	    if(alarmlevel==1)
	    	alarmlevel=2;
 	}
 	if(KEY01==0&&KEY02==0)  //密码合适清全部状态
	{
	    alarmlevel=0;
	    LED=0xff;
	    ALARM=1;
	    cnt=0;
	}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/11/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验