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

举报
zhangrelay 发表于 2021/07/15 00:47:34 2021/07/15
【摘要】 说明:头文件为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:


  
  1. __sfr __at (0xE8) P4;
  2. __sbit __at (0xEC) P4_4;

如果用keil:


  
  1. sfr P4 = 0xe8;
  2. sbit P44 = P4^4;

 

当然也可以使用固件库。

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

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


  
  1. #include <8052.h>
  2. __sfr __at (0xE8) P4;
  3. __sbit __at (0xEC) P4_4;
  4. #define LED P0 //LED闪烁警示
  5. #define LSA P1_5 //P0控制=0
  6. #define LSB P1_6 //P0控制=0
  7. #define LSC P1_7 //P0控制=0
  8. #define ALARM P4_4 //声音警示
  9. #define HUMAN P3_2 //模拟人体检测信号
  10. #define KEY01 P3_4 //模拟密码组合1
  11. #define KEY02 P3_5 //模拟密码组合2
  12. unsigned int cnt = 0; //定义一个计数变量,记录 T0 溢出次数
  13. unsigned char alarmlevel=0; //警报等级
  14. void sleep(unsigned int t);
  15. void SysInit();
  16. void Timer0() __interrupt 1;
  17. /************************************************************/
  18. void main () //主函数
  19. {
  20. SysInit();
  21. while(1)
  22. {
  23. if(alarmlevel==1) //LED警示
  24. {
  25. LED=0xff;
  26. sleep(10000);
  27. LED=0x00;
  28. sleep(10000);
  29. }
  30. if(alarmlevel==2) //LED+Sound警示
  31. {
  32. LED=0xff;
  33. ALARM=1;
  34. sleep(2000);
  35. LED=0x00;
  36. ALARM=0;
  37. sleep(2000);
  38. }
  39. }
  40. }
  41. /************************************************************/
  42. void sleep(unsigned int t)
  43. {
  44. while(t--);
  45. }
  46. void SysInit()
  47. {
  48. LSA = 0; //本开发板的P0发光二极管片选地址
  49. LSB = 0;
  50. LSC = 0;
  51. LED = 0xff;; //初始化LED
  52. TMOD = 0x01; //设置定时器T0工作方式1
  53. TL0 = 47104%256; //计数器初值
  54. TH0 = 47104/256;
  55. TR0 = 1; //启动定时器
  56. ET0 = 1; //开中断
  57. EA = 1;
  58. }
  59. void Timer0() __interrupt 1 //定时器 T0 中断响应
  60. {
  61. TL0 = 47104%256; //计数器初值
  62. TH0 = 47104/256;
  63. if(HUMAN==0)
  64. {
  65. cnt++;
  66. if(alarmlevel==0)
  67. alarmlevel=1;
  68. }
  69. if (cnt > 249) //判断 T0 溢出是否达到 250 次,等于5秒
  70. {
  71. if(alarmlevel==1)
  72. alarmlevel=2;
  73. }
  74. if(KEY01==0&&KEY02==0) //密码合适清全部状态
  75. {
  76. alarmlevel=0;
  77. LED=0xff;
  78. ALARM=1;
  79. cnt=0;
  80. }
  81. }

 

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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