找回密码
 立即注册

QQ登录

只需一步,快速开始

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

简易单片机秒表Proteus仿真与代码

[复制链接]
跳转到指定楼层
楼主
需要的自取,有代码和proteus仿真

单片机源程序如下:

  1. #include<reg52.h>                 //库文件
  2. #define uchar unsigned char//宏定义无符号字符型
  3. #define uint unsigned int  //宏定义无符号整型

  4. #define DUAN P0          //P0口控制段
  5. #define WEI  P2          //P2口控制位
  6. sbit k_shi=P1^0;// 更改小时按键
  7. sbit k_fen=P1^1;// 更改分钟按键
  8. sbit k_miao=P1^2;// 更改秒按键
  9. /********************************************************************
  10.                             初始定义
  11. *********************************************************************/
  12. uchar Table[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//七段码对应值
  13. uchar numb[8];         //定义字符串
  14. uint miao=0,fen,shi;
  15. /********************************************************************
  16.                             延时函数
  17. *********************************************************************/
  18. void delay(uchar t)
  19. {
  20.   uchar i,j;
  21.    for(i=0;i<t;i++)
  22.    {
  23.             for(j=13;j>0;j--);
  24.          { ;
  25.          }
  26.    }
  27. }
  28. /********************************************************************
  29.                             求值函数
  30. *********************************************************************/
  31. void t_to_dis()
  32. {
  33. numb[0]=shi/10;        //显示小时十位
  34. numb[1]=shi%10;        //显示小时个位
  35. numb[2]=10;                //显示横杠
  36. numb[3]=fen/10; //显示分十位
  37. numb[4]=fen%10;        //显示分个位
  38. numb[5]=10;                //显示横杠
  39. numb[6]=miao/10;//显示秒十位
  40. numb[7]=miao%10;//显示秒个位
  41.   }

  42. /********************************************************************
  43.                             显示函数
  44. *********************************************************************/        
  45. void display()//显示函数
  46. {
  47. /*****************数据转换*****************************/
  48. uchar i,j;
  49. uchar sel;
  50. i=30;           //定义延时显示时间
  51. sel=0x01;  //扫描位初值
  52. for(j=0;j<8;j++)
  53.         {
  54.         WEI=sel;                  //选通最右边的数码管
  55.     DUAN=~Table[numb[j]];          //送字型码
  56.     delay(i);                 //显示延时   
  57.     sel=sel<<1;   
  58.         }

  59. }
  60. /********************************************************************
  61.                            按键函数
  62. *********************************************************************/        
  63. void key()//函数
  64. {
  65. if(k_shi==0){shi++;while(!k_shi);if(shi>=24)shi=0;}
  66. if(k_fen==0){fen++;while(!k_fen);if(fen>=60)fen=0;}
  67. if(k_miao==0){miao++;while(!k_miao);if(miao>=60)miao=0;}
  68. }

  69. /********************************************************************
  70.                            定时器中断函数
  71. *********************************************************************/
  72. void timer1(void)interrupt 3
  73. {
  74. uchar i;
  75. TH1=0X3c;//定时初值
  76. TL1=0Xaf;//定时初值
  77.   i++;
  78. if(i>=20)
  79.    {i=0;
  80.     miao++;//秒加1
  81.      if(miao>=60)
  82.        {miao=0;//秒清零
  83.              fen++;//60秒后分加1
  84.                if(fen>=60)
  85.                 {fen=0;//分清零
  86.                    shi++;//60分后时加1
  87.                      if(shi>=24)
  88.                            shi=0;//时清零
  89.                                                   }
  90.                                    }
  91.                                   }
  92. }
  93. /********************************************************************
  94.                            中断初始化
  95. *********************************************************************/
  96. void cshh()
  97. {
  98. TMOD=0X10;//定义定时器工作方式
  99. TH1=0X3c;
  100. TL1=0Xaf;
  101. ET1=1;
  102. TR1=1;//开定时器
  103. EA=1;//开中断
  104. }
  105. /********************************************************************
  106.                             主函数
  107. *********************************************************************/

  108. main()
  109. {
  110. cshh();         //中断初始化
  111. while(1)
  112. {
  113. key();//按键函数
  114. t_to_dis();//确定秒分时值
  115. display();        //显示秒分时值
  116. }
  117. }
  118.        
  119. /********************************************************************
  120.                               结束
  121. *********************************************************************/
复制代码

Keil代码与Proteus8.13仿真下载:
数字钟设计.7z (65.8 KB, 下载次数: 12)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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