找回密码
 立即注册

QQ登录

只需一步,快速开始

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

我的51单片机时钟设计代码和proteus仿真

[复制链接]
跳转到指定楼层
楼主
这是一个51单片机的时钟设计,可以调节
秒,分,时的数。一共有四个键一个复位,
其他分别是调节秒分时的键。
  1. #include<reg51.h>
  2. #include<absacc.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. /*七段共阴管显示定义*/
  6. uchar code dispcode[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,
  7. 0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF};
  8. /*定义并初始化变量*/
  9. uchar seconde=0;
  10. uchar minite=0;
  11. uchar hour=0;
  12. uchar mstcnt=0;
  13. sbit P1_0=P1^0;                // second 调整定义
  14. sbit P1_1=P1^1;                //minite调整定义
  15. sbit P1_2=P1^2;                            //hour调整定义
  16. sbit P1_3=P1^3;                //暂停定义
  17. /*函数声明*/
  18. void delay(uchar k );      //延时子程序
  19. void time_pro( );    //时间处理子程序
  20. void display( );      //显示子程序
  21. void keyscan( );                //键盘扫描子程序
  22. /*延时子程序*/
  23. void delay (uchar k)
  24. {
  25. uchar j;
  26. while((k--)!=0)
  27. {
  28. for(j=0;j<125;j++)
  29. {;}
  30. }
  31. }
  32. /*时间处理子程序*/
  33. void time_pro( void)
  34. {
  35. if(seconde==60)                    //秒钟设为60进制
  36. { seconde=0;
  37. minite++;
  38. if( minite==60)              //分钟设为60进制
  39. { minite=0;
  40. hour++;
  41. if(hour==24)              //时钟设为24进制
  42. {hour=0; }
  43. }
  44. }
  45. }
  46. /* 显示子程序*/
  47. void display(void)
  48. {
  49. P2=0x01;
  50. P0=dispcode[hour/10];                //显示小时的十位
  51. delay(10);
  52. P2=0x02;
  53. P0=dispcode[hour%10];        //显示小时的个位
  54. delay(10);
  55. P2=0x04;
  56. P0=dispcode[minite/10];              //显示分的十位
  57. delay(10);
  58. P2=0x08;
  59. P0=(dispcode[minite%10]);        //显示分的个位
  60. delay(10);
  61. P2=0x10;
  62. P0=dispcode[seconde/10];            //显示秒的十位
  63. delay(10);
  64. P2=0x20;
  65. P0=dispcode[seconde%10];            //显示秒的个位
  66. delay(10);
  67. }
  68. /*键盘扫描子程序*/
  69. void keyscan (void)
  70. {
  71. if(P1_0==0)                    //按键1秒的调整
  72. {
  73. delay(30);
  74. if(P1_0==0)
  75. {
  76. seconde++;
  77. if(seconde==60)
  78. {seconde=0; }
  79. }
  80. }
  81. if(P1_1==0)                    //按键2分的调整
  82. {
  83. delay(30);
  84. if(P1_1==0)
  85. {
  86. minite++;
  87. if(minite==60)
  88. {minite=0;}
  89. }
  90. }
  91. if(P1_2==0)                  //按键3小时的调整
  92. {
  93. delay(30);
  94. if(P1_2==0)
  95. {
  96. hour++;
  97. if(hour==24)
  98. {hour=0; }
  99. }
  100. }
  101.         if(P1_3==0)
  102.         {
  103.           delay(30);
  104.          if(P1_3==0)
  105.          {
  106.                  while(!P1_3);
  107.                 {TR0=~TR0;}                   //启动或停止定时器0
  108.                 }                                 
  109. }
  110. }
  111. void timer0(void) interrupt 1
  112. {
  113. TH0=0x3c;
  114. TL0=0xb0;
  115. mstcnt++;
  116. if(mstcnt==20)
  117. {
  118. seconde++;
  119. mstcnt=0;    //清零
  120. }              //
  121. }
  122. /*主函数*/
  123. void main(void)
  124. {      P1=0xff;                //初始化p1口,全设为1
  125. TMOD = 0x11; //time0为定时器,方式1
  126. TH0=0x3c;            //预置计数初值
  127. TL0=0xb0;
  128. EA=1;
  129. ET0=1;
  130. TR0=1;
  131. while (1)
  132. {
  133. keyscan( );    //按键扫描
  134. time_pro( ); //时间处理
  135. display( ); //显示时间
  136. }
  137. }
复制代码


时钟.jpg.png (562.03 KB, 下载次数: 37)

时钟.jpg.png

时钟20407.rar

70.48 KB, 下载次数: 56, 下载积分: 黑币 -5

新时钟20407.rar

34.31 KB, 下载次数: 50, 下载积分: 黑币 -5

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

使用道具 举报

沙发
ID:460136 发表于 2019-1-6 15:45 | 只看该作者
受益匪浅 谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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