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

举报
zhangrelay 发表于 2021/07/15 00:47:34 2021/07/15
2.5k+ 0 0
【摘要】 说明:头文件为8052.h默认情况下不能使用P4口,需要添加如下代码,如使用P4_4: __sfr __at (0xE8) P4;__sbit __at (0xEC) P4_4; 如果用keil: sfr P4 = 0xe8;sbit P44 = P4^4; P4口接蜂鸣器   当然也可以使用固件库。 具体案例参考:https:...

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


      __sfr  __at (0xE8) P4;
      __sbit __at (0xEC) P4_4;
  
 

如果用keil:


      sfr P4 = 0xe8;
      sbit P44 = P4^4;
  
 

当然也可以使用固件库。

具体案例参考:https://zhangrelay.blog.csdn.net/article/details/109194115

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


      #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;
      	}
      }
  
 

文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。

原文链接:zhangrelay.blog.csdn.net/article/details/109667259

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。