标题: STC12C2052AD单片机控制的数码管时钟程序及电路图 [打印本页]

作者: dzdiy    时间: 2015-4-11 20:01
标题: STC12C2052AD单片机控制的数码管时钟程序及电路图
     STC12C2052AD单片机控制的数码管时钟,数码管是共阳4位时钟数码管,由于使用单片机真驱,电路比较简单,且使用的材料和工具也很简单,用数码管显示,单片机控制,两个按键调时,蜂鸣器整点报时。所需要的元件如下:

       材料有以下这些:
        STC12C2052AD单片机一片
        黄色共阳4位时钟数码管一块
        6mm×6mm按键两个
        杜邦线插针2p两个
        无源蜂鸣器一个
        20脚+14脚芯片座各一个
        洞洞板一块(截取一小部分)
        100欧电阻4个



     源程序如下:
  1. #include <STC12C2052AD.h>  //声明头文件

  2.   

  3. sbit key1=P3^4;  //按键接口定义

  4. sbit key2=P3^5;  //按键接口定义

  5. sbit speaker=P3^7;  //蜂鸣器接口定义

  6. /************************************************************************************/

  7. unsigned char code LED[10]={0x20,0xA7,0x90,0x82,0x07,0x42,0x40,0xA6,0x00,0x02};//数码管段位码定义

  8. unsigned int time; //全局秒基准定义

  9. /*-------------------------------------延时函数-------------------------------------*/

  10. void delayms (unsigned int a){

  11. unsigned int i;

  12. while( --a != 0){

  13. for(i = 0; i < 600; i++);

  14. }

  15. }

  16. /*----------------------------------蜂鸣器驱动函数----------------------------------*/

  17. void beep (void)

  18. {   

  19. unsigned char i=30;

  20. while(i--)

  21. {

  22. speaker=~speaker;

  23. delayms(3);

  24.     }

  25. }

  26. /*----------------------------------数码管驱动函数----------------------------------*/

  27. void display (unsigned char hour,min)

  28. {

  29. unsigned char H1,H2,M1,M2;

  30. P3=0xf8; //数码管位选

  31. P1 = LED[H1];     //数码管段选

  32. delayms (2); //扫描延时

  33. P3=0xf4; //数码管位选

  34. P1 = LED[H2];     //数码管段选

  35. delayms (2); //扫描延时

  36. P3=0xf2; //数码管位选

  37. P1 = LED[M1];     //数码管段选

  38. delayms (2); //扫描延时

  39. P3=0xf1; //数码管位选

  40. P1 = LED[M2];     //数码管段选

  41. delayms (2); //扫描延时

  42. /*--------------------------------------分定义--------------------------------------*/

  43. M1=min/10;//取分十位

  44. min=min%10;//取余  

  45. M2=min;//取分个位

  46. /*--------------------------------------时定义--------------------------------------*/

  47. H1=hour/10;//取时十位

  48. hour=hour%10;//取余  

  49. H2=hour;//取时个位

  50. }

  51. /*-----------------------------------按键去抖函数-----------------------------------*/

  52. void qudou (unsigned char hour,min)

  53. {

  54. unsigned char i;

  55. for(i=0;i<25;i++){//循环显示,等于键盘去抖的功能

  56. display (hour,min);

  57. }

  58. }

  59. /*--------------------------------------主函数--------------------------------------*/

  60. void main(void)

  61. {

  62. ////定时器初始设置

  63. TMOD=0x01;//定时器工作方式1

  64. TH0=0x3C;//定时器初始产生50ms时基信号

  65. TL0=0xB0;//定时器初始产生50ms时基信号

  66. ET0=1;//开定时器中断

  67. EA=1;//开总中断

  68. TR0=1;//启动定时器

  69. /*************************************************************************************/

  70. while(1)

  71. {

  72. unsigned char hour,min;//定义时分


  73. display (hour,min);//调用显示函数


  74. if (time>59)//60秒向分进1

  75. {

  76. time=0;

  77. min++;

  78.    }

  79. if (min>59)//60分向时进1

  80. {

  81. min=0;

  82. hour++;

  83. beep ();

  84.     }

  85. if (hour>23)//24时时分秒清零

  86. {

  87. hour=0;

  88. min=0;

  89. time=0;

  90. }

  91. /*-----------------------------------按键判断程序-----------------------------------*/

  92. if(key1==0)

  93. qudou (hour,min);

  94. if (key1==0) {hour++;}


  95. if(key2==0)

  96. qudou (hour,min);

  97. if (key2==0) {min++;}

  98. }

  99. }

  100. /*-----------------------------------中断服务程序-----------------------------------*/

  101. void Timer0_Routine(void) interrupt 1

  102. {

  103. unsigned char a;

  104. TH0=0x3C;//定时器初始产生50ms时基信号

  105. TL0=0xB0;//定时器初始产生50ms时基信号

  106.     a++;//定时器循环计数20次为一秒

  107. if (a==20){//定时器循环计数20次为一秒

  108. a=0;//次数清零,从新循环计数

  109. time++;//秒加一

  110. }

  111. }
复制代码





作者: 1783119269    时间: 2015-5-3 20:28
很棒收藏一下
作者: GG-路人乙    时间: 2015-5-14 08:28
谢谢分享,学习了
作者: 越快乐越堕落    时间: 2016-4-24 23:18
时间慢很多,亮度不行
作者: cn24145    时间: 2016-7-5 13:02
我问一下我是初学者怎么生成不了hex文件
作者: 正阳电子W    时间: 2016-9-2 20:30
感谢分享
作者: xieyajun888    时间: 2017-2-27 02:01
谢谢分享,谢谢楼主!!!
作者: micmiutom    时间: 2017-5-8 12:41
谢谢分享,谢谢楼主!!!
作者: 咯咯哈    时间: 2017-6-26 18:46
请问一下有PCB图吗

作者: 咯咯哈    时间: 2017-6-26 18:47
有PCB图吗
作者: 触景情伤    时间: 2018-1-31 23:14
看了半天电路图也没有找到4个100欧姆电阻放哪里了
作者: sui13816469793    时间: 2018-2-8 17:31
忙了一下午的 结果,不太理想!!!!!!!!!!!!!

1.jpg (170.91 KB, 下载次数: 127)

1.jpg

作者: GUOXUAN    时间: 2018-4-18 09:32
老师的作品好厉害呀
作者: 206004430    时间: 2018-7-1 23:15
sui13816469793 发表于 2018-2-8 17:31
忙了一下午的 结果,不太理想!!!!!!!!!!!!!

有源代码吗,四个上拉电阻用了没

作者: 小布@01    时间: 2018-11-10 00:34
标题: RE: STC12C2052AD单片机控制的数码管时钟程序及电路图
206004430 发表于 2018-7-1 23:15
有源代码吗,四个上拉电阻用了没

做出来的结果如何  有多慢 ??也打算弄个
作者: 小布@01    时间: 2018-11-10 00:36
206004430 发表于 2018-7-1 23:15
有源代码吗,四个上拉电阻用了没

哥们 效果怎么样
作者: 陈婷    时间: 2019-3-1 01:03
能不能发一个程序文件,我自己刚入门不太理解如何转换文件
作者: 553280487    时间: 2019-12-18 13:23
陈婷 发表于 2019-3-1 01:03
能不能发一个程序文件,我自己刚入门不太理解如何转换文件

你想要什么样的程序文件
作者: hui7279    时间: 2022-5-14 10:30
共阳极没有接驱动三极管,电流不会过大,影响单片机正常工作吗?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1