单片机/MCU论坛
直播中

电子开发圈

6年用户 190经验值
擅长:DIY、Arduino、C51、STM32、FPGA
私信 关注
[文章]

基于单片机的数字钟系统设计(电路+程序)

` 1.jpg

上图是proteus仿真图,其中反相器用74lHC14,排阻用10K的,晶振用12MHZ的,电阻R1-R8用200欧的即可。但在实际制作时数码管可以用两个四位一体共阳极的,这样连接电路会更加方便。可以用三极管代替反相器,这样可以节约成本,但代替后无法用Proteus仿真出来,下图为代替后的图片,三极管用常用的9012或者9015即可,经本人实际验证效果非常好。



2.jpg


下图为原理图:

3.jpg


下图为实物图






以下为源程序




  1. #include
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. uchar code table[]={ //不带小数点的数码管编码
  5. 0xc0,0xf9,0xa4,0xb0,
  6. 0x99,0x92,0x82,0xf8,
  7. 0x80,0x90};
  8. uchar code table1[]={ //带小数点的数码管编码
  9. 0x40,0x79,0x24,0x30,
  10. 0x19,0x12,0x02,0x78,
  11. 0x00,0x10};
  12. uchar shi=12,second,minute;
  13. uint num,num1,num2,num3;
  14. ***it k1=P1^4;
  15. ***it k2=P1^5;
  16. void display();
  17. void keyscan();
  18. void delay(uint z)
  19. {
  20. uint x,y;
  21. for(x=z;x>0;x--)
  22. for(y=110;y>0;y--);
  23. }
  24. void init()
  25. {
  26. TMOD=0x01;

  27. TH0=(65536-50000)/256;
  28. TL0=(65536-50000)%6;
  29. EA=1;
  30. ET0=1;
  31. TR0=1;
  32. }
  33. void main()
  34. {
  35. init();
  36. while(1)
  37. {
  38. keyscan();
  39. display();

  40. }
  41. }

  42. void timer0() interrupt 1
  43. {
  44. TH0=(65536-50000)/256;
  45. TL0=(65536-50000)%6;
  46. num++;
  47. if(num==20)
  48. {
  49. num=0;
  50. second++;
  51. if(second==60)
  52. {
  53. second=0;
  54. minute++;
  55. }
  56. if(minute>=60)
  57. {
  58. minute=0;
  59. shi++;
  60. }
  61. if(shi>=24)
  62. shi=0;
  63. }
  64. }
  65. void display()
  66. {
  67. P2=0xdf;
  68. P0=table[second];
  69. delay(2);
  70. P2=0xff;
  71. P2=0xef;
  72. P0=table[second/10];
  73. delay(2);
  74. P2=0xff;
  75. P2=0xf7;
  76. P0=table1[minute];
  77. delay(2);
  78. P2=0xff;
  79. P2=0xfb;
  80. P0=table[minute/10];
  81. delay(2);
  82. P2=0xff;
  83. P2=0xfd;
  84. P0=table1[shi];
  85. delay(2);
  86. P2=0xff;

  87. P2=0xfe;
  88. P0=table[shi/10];
  89. delay(2);
  90. P2=0xff;
  91. }
  92. void keyscan()
  93. {
  94. if(k1==0)
  95. {
  96. delay(10);
  97. if(k1==0)
  98. {
  99. shi++;
  100. while(!k1);
  101. }
  102. }
  103. if(k2==0)
  104. {
  105. delay(10);
  106. if(k2==0)
  107. {
  108. minute++;
  109. while(!k2);
  110. }

  111. }

  112. }






` 4.jpg

回帖(5)

lee_st

2018-12-5 19:09:32
瞅瞅了,看看有没有收获
举报

lee_st

2018-12-5 19:09:52
支持一下了
举报

霍政斌

2019-1-16 15:30:19
太好了,,,谢谢分享。。。
举报

谢靖宇

2019-1-30 18:35:28
感谢分享,每个帖子都能让人进步
举报

莫书海

2019-2-24 19:03:42
不错,程序写的还可以,电路虽然简单了写,但还是支持一些
举报

更多回帖

发帖
×
20
完善资料,
赚取积分