找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机做的带数码显示定时器源码

[复制链接]
跳转到指定楼层
楼主
ID:280154 发表于 2018-1-27 11:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
可调延时关断时间
单片机源程序如下:
  1. /*****************************************************************************************************************************
  2.    1.开机,外接触摸开关K1为高电平,定时器正常倒计时,继电器吸合接通LED点亮,如中途无操作,定时40分钟后断开继电器, LED熄灭。
  3.    2.如果开机正常倒计时过程中,用户不需要LED点亮,则按下触摸开关K1,K1为低电平,定时器停止工作并恢复初始定时状态,继电器断开
  4.      等待下次K1出现高电平时,再正常倒计时工作。
  5. *******************************************************************************************************************************/

  6. #include<reg52.h>

  7. unsigned int time;   //中断次数变量            
  8. unsigned char second10, second1,minute10,minute1;  //定义十分、个分、十秒、个秒
  9. unsigned char min=40,sec=59;  //设置倒计时时间

  10. sbit jdq=P1^4;         //继电器为P1.4口
  11. sbit fmq=P1^3;         //蜂鸣器为P1.3口
  12. sbit K0=P3^2;        //定义外中断INT0为P3.2口
  13. sbit min10=P1^0;
  14. sbit min1=P1^1;

  15.                                                           

  16. unsigned char code duanma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //数码管0至9段码


  17. //unsigned char code wiema[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};  //8位共阳数码管        0x7f为最右侧的数码管

  18. /********************************************
  19. 延时子程序0.25MS
  20. ******************************************/
  21. void delay(unsigned int i)      
  22. {
  23. unsigned char j;
  24. while(i--)
  25. {
  26.    for(j=25;j>0;j--);
  27. }
  28. }

  29. /***********************************************
  30.    数码管显示子程序
  31. **********************************************/
  32. void display(minute10,minute1,second10, second1)      
  33. {

  34. min10=1;
  35. min1=1;
  36. P0=duanma[minute10];
  37. min10=0;
  38. delay(6);

  39. min10=1;
  40. min1=1;
  41. P0=duanma[minute1];
  42. min1=0;
  43. delay(6);

  44. }



  45. /****************************************************
  46.           蜂鸣器发声函数,每1次大约响1秒
  47. ****************************************************/
  48. void beep(unsigned char a)        //
  49. {
  50. unsigned int b;
  51. while(a--)
  52.   {
  53.   for(b=0;b<1000;b++)
  54.   {
  55. fmq=0;
  56. delay(1);
  57. fmq=1;
  58. delay(1);

  59. }
  60. }
  61. }

  62. /**********************************************/
  63. main()
  64. {
  65. TMOD=0x01;     //T0工作模式是方式1
  66. TH0=0x49;      //定义初始值为50ms   此初值用11.0592MHZ晶振,实测40分钟误差3秒
  67. TL0=0x44;

  68. EA=1;                    //开总中断
  69. ET0=1;                        //允许定时器T0中断
  70. TR0=1;         //开启T0计时

  71. EX0=1;
  72. IT0=1;
  73. delay(800);

  74. while(1)
  75.      {

  76.    if(K0==1)
  77.    {
  78. TR0=1;
  79. jdq=0;
  80. if(K0==1&&min==0)
  81.   {TR0=0;min=0;sec=0;jdq=1;
  82.   }
  83.    }
  84. display(min/10,min%10,sec/10,sec%10);

  85.      }
  86. }

  87. /****************************************************/
  88. void int0() interrupt 0         //外中断0
  89. {
  90. if(K0==0)
  91. {
  92. delay(500);
  93. if(K0==0)
  94. {

  95. TR0=0;
  96. jdq=1;
  97. beep(1);
  98. min=40;sec=59;
  99. }
  100. }
  101. }

  102. /*********************************************/
  103. void timer0() interrupt 1          //T0中断
  104. {

  105. TH0=0x49;
  106. TL0=0x44;

  107. time++;
  108. if(time==20)            //50ms*20=1秒
  109. {
  110.    time=0;
  111.    sec--;
  112. if(sec==0)
  113. {
  114.   sec=59;
  115. ……………………

  116. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
yskz.rar (1.36 KB, 下载次数: 18)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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