找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2934|回复: 11
打印 上一主题 下一主题
收起左侧

单片机10s秒表两个开关怎么实现

  [复制链接]
跳转到指定楼层
楼主
ID:256067 发表于 2017-12-1 11:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求助!我要做个10s的秒表。有两个按键,一个按键是电源,一个是开关。
当按下开关时,前提电源开关也按下了,数码管开始走动,再按下开关会暂停定时器,再按清零(已实现)。
关键是电源另一个功能。当再按下电源开关时,数码管熄灭,定时器停止。(未实现)
有没有大神能够告诉我怎么实现这个功能,关系到我挂不挂科的事情......

单片机代码如下:
  1. #include <reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar code Dsy_Code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  5. sbit Key_Start = P2^2;
  6. sbit Key_Power=P2^3;
  7. sbit dp = P0^7;                                                                                                       //小数点
  8. uchar num=0;  //定时器的计数
  9. uchar count=0;//数码管的计数
  10. uchar Key_Num=0;//按键次数的计数
  11. uchar Power_Num=0;
  12. bit Key_State=1,Power_State=1;
  13. void DelayMS(uint x){
  14.         uchar i;
  15.         while(x--)
  16.                 for(i=0;i<120;i++);
  17. }
  18. void Dsy(){  //显示函数
  19.         P2=0xfd;
  20.         P0=Dsy_Code[num%10];
  21.         DelayMS(2);
  22.         P2=0xfe;
  23.         P0=Dsy_Code[num/10];
  24.         dp=1;
  25.         DelayMS(2);
  26. }
  27. void Timer()interrupt 1{  //定时器
  28.         TH0=(65536-50000)/256;  //50ms
  29.         TL0=(65536-50000)%256;
  30.         count++;
  31.         if(count==2){
  32.                 count=0;
  33.                 num++;
  34.                 if(num==100)
  35.                         num=0;
  36.         }
  37. }
  38. void Key_Handle(){//按键处理
  39.         if(Key_State==0){
  40.                 Key_Num=(Key_Num+1)%3;
  41.                 switch(Key_Num){
  42.                         case 1:IE=0x82;TR0=1;break;
  43.                         case 2:IE=0x00;TR0=0;break;
  44.                         case 0:IE=0x00;TR0=0;num=0;break;
  45.                 }
  46.         }
  47. }
  48. void main(){
  49.         TMOD=0x01;
  50.         TH0=(65536-50000)/256;  //10ms
  51.         TL0=(65536-50000)%256;
  52.         if(Power_State!=Key_Power){
  53.                 DelayMS(10);
  54.                 if(Power_State!=Key_Power){
  55.                         Power_Num++;
  56.                         if(Power_Num%2==1){
  57.                                 while(1){
  58.                                         if(Key_State!=Key_Start){
  59.                                         DelayMS(10);
  60.                                         Key_State=Key_Start;
  61.                                         Key_Handle();
  62.                                         }
  63.                                 Dsy();
  64.                                 }
  65.                         }
  66.                 }
  67.         }
  68. }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:256126 发表于 2017-12-1 14:29 | 只看该作者
这简单了,电源开关就总开关好了,一按电源开关,把所有电关掉,就好啦。屏也不亮了数据也没了正好啊
回复

使用道具 举报

板凳
ID:222948 发表于 2017-12-1 17:18 | 只看该作者
什么时候交我帮你完成
回复

使用道具 举报

地板
ID:222948 发表于 2017-12-1 17:23 | 只看该作者
有什么不懂的可以找我

秒表.zip

29.99 KB, 下载次数: 30

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:256067 发表于 2017-12-4 10:02 | 只看该作者
999333 发表于 2017-12-1 17:23
有什么不懂的可以找我

感谢大佬,我理解了!!不好意思,今天才看见,非常感谢!!!
回复

使用道具 举报

6#
ID:1082198 发表于 2023-6-5 16:54 | 只看该作者
Runningit 发表于 2017-12-4 10:02
感谢大佬,我理解了!!不好意思,今天才看见,非常感谢!!!

能讲解一下显示函数的那一块嘛
回复

使用道具 举报

7#
ID:1082198 发表于 2023-6-5 16:56 | 只看该作者
有些代码看不懂,比如显示函数那一块

回复

使用道具 举报

8#
ID:1082282 发表于 2023-6-6 01:13 | 只看该作者
开关按钮可以通过设定变量来实现不同的功能,这个已经解决。
电源按钮如果不去切断单片机电源,可以做一个假断电,即数码管全部不显示,用0x00应该能实现,然后将程序重置即可

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

9#
ID:116103 发表于 2023-6-6 06:02 | 只看该作者
按下POWER电源键后,给数码管的段码是00(共阴),让EA=0,停止计数中断。
回复

使用道具 举报

10#
ID:1082051 发表于 2023-6-6 12:59 | 只看该作者
秒表这东西我也不会,在线求助
回复

使用道具 举报

11#
ID:1074358 发表于 2023-6-6 13:29 | 只看该作者
定时器停止  可以用EEPROM将断电时的数据保存  供下次上电时继续使用保存的数据
回复

使用道具 举报

12#
ID:1004455 发表于 2023-6-9 17:04 | 只看该作者
写个中断函数就可以实现
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表