找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3322|回复: 1
收起左侧

51单片机记时秒表,暂停、清零、开始 外加矩阵键盘定时秒表上限反向计时

[复制链接]
ID:303163 发表于 2018-4-7 15:07 | 显示全部楼层 |阅读模式
秒表,暂停、清零、开始  外加矩阵键盘定时秒表上限反向计时


单片机源程序如下:
  1. #include <reg52.h>

  2. unsigned int code Act_Num[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//不带下标的数字编码
  3. unsigned int code Set_Num[] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//带有下标的数字编码
  4. unsigned char code BitNumber[] = {0xef,0xdf,0xbf,0x7f};
  5. unsigned int x0,flag = 0,j,num=80,key,key1,k=0,x1;
  6. unsigned char temp, led[4];

  7. sbit KEY = P3^2;
  8. sbit KEY1 = P3^3;

  9. void delay(int time);
  10. void inti();
  11. void inti1();

  12. void main()
  13. {
  14.         unsigned int i;
  15.        
  16.         TMOD = 0x01;
  17.         ET0 = 1;
  18.         EA = 1;
  19.        
  20.         inti();
  21.         inti1();
  22.         while (1)
  23.         {               
  24.                 led[0] = Act_Num[flag/10%10];
  25.                 led[1] = Set_Num[flag%10];
  26.                 led[2] = Act_Num[x1/10%10];
  27.                 led[3] = Act_Num[x1%10];
  28.                 for(i=0;i<4; i++)
  29.                 {
  30.                         P0=0x00;
  31.                         P0=led[i];
  32.       P2=BitNumber[i];
  33.       delay(4);
  34.                         P2=0xff;
  35.           }
  36.         }
  37. }

  38. void time0() interrupt 1
  39. {
  40.         unsigned int i;
  41.         TH0 = 0xff;
  42.         TL0 = 0xa4;
  43.         x0++;
  44.         i++;
  45.         if (x0==10000)
  46.         {
  47.                 x0 =0;
  48.        
  49.                 if (flag==60)
  50.                 {
  51.                         k=1;
  52.                 }
  53.                 else if (flag==0)
  54.                 {
  55.                         k=0;
  56.                 }
  57.                 if (k==1)
  58.                 {
  59.                         flag--;
  60.                 }
  61.                 else
  62.                 {
  63.                         flag++;
  64.                 }
  65.         }
  66.         if (i==100)
  67.         {
  68.                 i=0;
  69.                 if (k==1)
  70.                 {
  71.                         x1--;
  72.                 }
  73.                 else
  74.                 {
  75.                         x1++;
  76.                 }
  77.                 if (x1==60)
  78.                 {
  79.                         x1=0;
  80.                 }
  81.         }
  82. }
  83. void delay(int time)
  84. {
  85.         unsigned int i;
  86.         for (i = 0; i< time;i++)
  87.         {
  88.                
  89.         }
  90. }
  91. void inti()
  92. {
  93.         EA = 1;
  94.         IT0 = 1;
  95.         EX0 = 1;
  96. }
  97. void stop()interrupt 0
  98. {
  99.         if (KEY==0)
  100.         {
  101.                 delay(2);
  102.                 if (KEY==0)
  103.                 {
  104.                         j++;
  105.                         switch(j)
  106.                         {
  107.                                 case 1:
  108.                                         TH0 = 0xff;
  109.                                         TL0 = 0xa4;
  110.                                         TR0 = 1;
  111.                                         break;
  112.                                 case 2:
  113.                                         TR0= 0;
  114.                                         j=0;
  115.                                         num=80;
  116.                                         break;
  117.                         }
  118.                         while(KEY==0);
  119.                 }
  120.         }
  121.         while(!KEY);
  122. }
  123. void inti1()
  124. {
  125.         EA = 1;
  126.         IT1 = 1;
  127.         EX1 = 1;
  128. }
  129. void qinglin()interrupt 2
  130. {
  131.         if (KEY1==0)
  132.         {
  133.                 delay(2);
  134.                 if (KEY1==0)
  135.                 {
  136.                         j=0;
  137.                         TR0=0;
  138.                         flag=0;
  139.                         x1=0;
  140.                 }
  141.                         while(KEY1==0);
  142.         }
  143.         while(!KEY1);
  144. }
复制代码

所有资料51hei提供下载:
带分.zip (29.76 KB, 下载次数: 24)


回复

使用道具 举报

ID:1 发表于 2018-4-7 16:26 | 显示全部楼层
有原理图吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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