找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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. }
复制代码




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

使用道具 举报

沙发
ID:78768 发表于 2015-5-3 20:28 | 只看该作者
很棒收藏一下
回复

使用道具 举报

板凳
ID:56948 发表于 2015-5-14 08:28 来自手机 | 只看该作者
谢谢分享,学习了
回复

使用道具 举报

地板
ID:99130 发表于 2016-4-24 23:18 | 只看该作者
时间慢很多,亮度不行
回复

使用道具 举报

5#
ID:120990 发表于 2016-7-5 13:02 来自手机 | 只看该作者
我问一下我是初学者怎么生成不了hex文件
回复

使用道具 举报

6#
ID:136894 发表于 2016-9-2 20:30 | 只看该作者
感谢分享
回复

使用道具 举报

7#
ID:166817 发表于 2017-2-27 02:01 | 只看该作者
谢谢分享,谢谢楼主!!!
回复

使用道具 举报

8#
ID:194701 发表于 2017-5-8 12:41 | 只看该作者
谢谢分享,谢谢楼主!!!
回复

使用道具 举报

9#
ID:214577 发表于 2017-6-26 18:46 | 只看该作者
请问一下有PCB图吗
回复

使用道具 举报

10#
ID:214577 发表于 2017-6-26 18:47 | 只看该作者
有PCB图吗
回复

使用道具 举报

11#
ID:229641 发表于 2018-1-31 23:14 来自手机 | 只看该作者
看了半天电路图也没有找到4个100欧姆电阻放哪里了
回复

使用道具 举报

12#
ID:164302 发表于 2018-2-8 17:31 | 只看该作者
忙了一下午的 结果,不太理想!!!!!!!!!!!!!

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

1.jpg
回复

使用道具 举报

13#
ID:249545 发表于 2018-4-18 09:32 | 只看该作者
老师的作品好厉害呀
回复

使用道具 举报

14#
ID:266802 发表于 2018-7-1 23:15 | 只看该作者
sui13816469793 发表于 2018-2-8 17:31
忙了一下午的 结果,不太理想!!!!!!!!!!!!!

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

使用道具 举报

15#
ID:248420 发表于 2018-11-10 00:34 | 只看该作者

RE: STC12C2052AD单片机控制的数码管时钟程序及电路图

206004430 发表于 2018-7-1 23:15
有源代码吗,四个上拉电阻用了没

做出来的结果如何  有多慢 ??也打算弄个
回复

使用道具 举报

16#
ID:248420 发表于 2018-11-10 00:36 | 只看该作者
206004430 发表于 2018-7-1 23:15
有源代码吗,四个上拉电阻用了没

哥们 效果怎么样
回复

使用道具 举报

17#
ID:423007 发表于 2019-3-1 01:03 | 只看该作者
能不能发一个程序文件,我自己刚入门不太理解如何转换文件
回复

使用道具 举报

18#
ID:645254 发表于 2019-12-18 13:23 来自手机 | 只看该作者
陈婷 发表于 2019-3-1 01:03
能不能发一个程序文件,我自己刚入门不太理解如何转换文件

你想要什么样的程序文件
回复

使用道具 举报

19#
ID:170800 发表于 2022-5-14 10:30 | 只看该作者
共阳极没有接驱动三极管,电流不会过大,影响单片机正常工作吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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