单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1684|回复: 0
收起左侧

用at89s52和七段数码管实现计时时钟

[复制链接]
daming 发表于 2014-12-30 23:43 | 显示全部楼层 |阅读模式


  1. /*程序名称:at89s52实现时钟

  2.   程序功能:用at89s52和七段数码管实现计时时钟

  3.   作者      :hankjulianth

  4. */

  5. #include"reg52.h"
  6. #define uchar unsigned char
  7. #define uint  unsigned int
  8. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  9. uint sec,min,hour;//秒,分,时计数
  10. uint t1;//定义计数器
  11. sbit sc=P3^7;//锁存信号
  12. void _init_();//初始化函数
  13. void timer0();//定时器T0中断函数
  14. void showtime();//时间显示函数

  15. void settime(uint,uint,uint)
  16. void main()
  17. {
  18. t1=0;

  19. settime(0,0,0);

  20. _init_();
  21. while(1)
  22. {
  23.   if(t1==20)
  24.   {
  25.    sec++;
  26.    t1=0;
  27.    }
  28.   if(sec==60)
  29.   {
  30.    min+=1;
  31.    sec=0;
  32.    }
  33.   if(min==60)
  34.   {
  35.    hour+=1;
  36.    min=0;
  37.    }
  38.   if(hour==24)
  39.   {
  40.    hour=0;
  41.   }
  42.    
  43.   showtime();
  44. }
  45. }

  46. void _init_()
  47. {

  48. //启用且设置T0,定时50ms
  49. TH0=(65536-50000)/256;
  50. TL0=(65536-50000)%256;
  51. EA=1;
  52. ET0=1;
  53. TMOD=0x01;
  54. TR0=1;
  55. }
  56. void timer0() interrupt 1
  57. {
  58. _init_();
  59. t1++;
  60. }

  61. void settime(uint i,uint j,uint k)//设置初始时间函数:   k : j : i

  62. {

  63.  sec=i;

  64.     min=j;

  65.     hour=k;

  66. }

  67. void showtime()
  68. {
  69. //秒钟显示
  70. sc=1;
  71. P0=table[sec/10];
  72. P2=0x06;
  73. sc=0;

  74. sc=1;
  75. P0=table[sec%10];
  76. P2=0x07;
  77. sc=0;


  78. //分钟显示
  79. sc=1;
  80. P0=table[min/10];
  81. P2=0x03;
  82. sc=0;

  83. sc=1;
  84. P0=table[min%10];
  85. P2=0x04;
  86. sc=0;

  87. //时钟显示
  88. sc=1;
  89. P0=table[hour/10];
  90. P2=0x01;
  91. sc=0;

  92. sc=1;
  93. P0=table[hour%10];
  94. P2=0x0;
  95. sc=0;
  96. }
复制代码


回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51hei电子论坛2群 联系QQ:125739409;技术交流QQ群219535678

Powered by 单片机教程网

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