2338|7

5

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

希望大师们,给挑挑刺,使程序更加完美 [复制链接]

  1. /***************************
  2.         独立按键控制继电器
  3. ***************************/
  4. #include <reg52.h>

  5. #define uchar unsigned char

  6. sbit KEY = P1 ^ 0;
  7. sbit RelayEN = P0 ^ 0;                                   //定义继电器开启信号

  8. void Timer0Init();                                           //声明定时器0初始化函数
  9. void RelayProcess();                                   //声明断电器处理函数

  10. uchar count = 0;                                           //计秒数

  11. void main()                                                           //主函数
  12. {
  13.         RelayEN = 1;                                           //开机时关闭继电器,否则一上电继电器有动作;

  14.         Timer0Init();
  15.         RelayProcess();
  16.        
  17. }

  18. void Timer0Init()                                           //定时器初始化函数
  19. {
  20.         TMOD |= 0x01;                                           //“|”使用多个定时器时不受影响
  21.         TH0 = 0xFC;                                                   //定时1MS
  22.         TL0 = 0x67;
  23.         EA = 1;                                                           //开启总中断
  24.         ET0 = 1;                                                   //开启定时器0中断
  25. }

  26. void RelayProcess()                                          //继电器处理函数
  27. {
  28.         KEY = 0x01;                                                  //读外部状态时,先使端口输出高电平;
  29.         while (1)
  30.         {
  31.                 if(!KEY)                                          //判定有无按键按下
  32.                 {
  33.                         TR0 = 1;                                  //按键按下开启定时器0,溢出后开启中断
  34.                        
  35.                         if (count >= 20)                  //判定秒数是否达到20MS,即去抖
  36.                         {
  37.                                 count = 0;
  38.                                 if (!KEY)
  39.                                 {
  40.                                         RelayEN = ~RelayEN;//当按键按下时,改变继电器的状态
  41.                                         while(!KEY)    count = 0;           //等待按键释放,当count=20时,定时器也在计数,达到1MS时,count++,TR0=0;下一次按键count会从1开始计数;
  42.                                 }
  43.                         }
  44.                 }
  45.         }
  46.        
  47. }

  48. void Timer0() interrupt 1          //定时器0中断函数
  49. {
  50.         count++;                                  //计秒数
  51.         TR0 =0;                                          //关闭定时器,否则无按键按下也计数;
  52.         TH0 = 0xFC;                                  //重新赋值给定时器0
  53.         TL0 = 0x67;
  54.                                                                         
  55. }
复制代码

此帖出自单片机论坛

最新回复

好的,就先学C语言  详情 回复 发表于 2016-8-8 08:40
点赞 关注
 

回复
举报

16

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
用什么语言写
此帖出自单片机论坛

点评

C语言,编程必会,起点低,其本身很博大  详情 回复 发表于 2016-8-4 11:55
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
单片机程序用什么语言写,有没有这方面的教程,或资料,想学一点语言
此帖出自单片机论坛
 
 
 

回复

305

帖子

0

TA的资源

一粒金砂(中级)

4
 
C语言
此帖出自单片机论坛
 
 
 

回复

1234

帖子

4

TA的资源

纯净的硅(高级)

5
 
可以了 对于单纯的按键控制,用定时器消抖,按键释放,

如果要优化这个功能的话,我想是按键释放了再使继电器状态改变。这样会比较好点。

没有其他什么功能的附加,就到此为止
此帖出自单片机论坛
 
个人签名天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
 
 

回复

4008

帖子

0

TA的资源

版主

6
 
while(!KEY)  这里不好
此帖出自单片机论坛
 
 
 

回复

828

帖子

8

TA的资源

一粒金砂(高级)

7
 

C语言,编程必会,起点低,其本身很博大
此帖出自单片机论坛
 
个人签名人生有许多选项是灰色的、不可选的,但至少你可以选择生活的态度。。。韬光养晦,志存高远http://www.xzroad.com/
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

8
 
好的,就先学C语言
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表