Chinaunix首页 | 论坛 | 博客
  • 博客访问: 418661
  • 博文数量: 121
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1393
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-11 12:17
个人简介

www.vibexie.com vibexie@qq.com

文章分类

全部博文(121)

文章存档

2015年(55)

2014年(66)

我的朋友

分类: C/C++

2014-04-24 10:59:51


点击(此处)折叠或打开

  1. //用数码管的前两位显示一个十进制数,变化范围为00-59,开始时显示00,每按下S2键一次,数值加1,每按下S3,数值减1,每按下S4,数值归零,每按下S5
  2. //功能开始自动加1,再次按下S5,数值停止自动加1,保持显示原数。

  3. #include<reg52.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. sbit key1=P3^4;
  7. sbit key2=P3^5;
  8. sbit key3=P3^6;
  9. sbit key4=P3^7;
  10. sbit dula=P2^6;
  11. sbit wela=P2^7;

  12. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  13. uchar numt0,num;

  14. void delayms(uint);
  15. void display(uchar numdis);
  16. void init();
  17. void keyscan();

  18. int main()
  19. {
  20.     init();
  21.     while(1)
  22.     {
  23.         keyscan();
  24.         display(num);
  25.     }
  26.     return 0;
  27. }

  28. void display(uchar numdis)
  29. {
  30.     uchar shi,ge;
  31.     shi=numdis/10;
  32.     ge=numdis%10;

  33.     dula=1;
  34.     P0=table[shi];
  35.     dula=0;

  36.     P0=0xff;

  37.     wela=1;
  38.     P0=0xfe;
  39.     wela=0;
  40.     delayms(5);

  41.     dula=1;
  42.     P0=table[ge];
  43.     dula=0;

  44.     P0=0xff;

  45.     wela=1;
  46.     P0=0xfd;
  47.     wela=0;
  48.     delayms(5);
  49. }

  50. void delayms(uint xms)
  51. {
  52.     uint i,j;
  53.     for(i=xms;i>0;i--)
  54.         for(j=124;j>0;j--);
  55. }

  56. void init()
  57. {
  58.     TMOD=0x01;
  59.     TH1=(65535-45872)/256;
  60.     TL1=(65535-45872)%256;
  61.     EA=1;
  62.     ET0=1;
  63. }

  64. void keyscan()
  65. {
  66.     if(key1==0)
  67.     {
  68.         delayms(10);
  69.         if(key1==0)
  70.         {
  71.             num++;
  72.             if(num==60)
  73.                 num=0;
  74.             while(!key1);//等待key1释放
  75.         }
  76.     }

  77.     if(key2==0)
  78.     {
  79.         delayms(10);
  80.         if(key2==0)
  81.         {
  82.             num--;
  83.             if(num==60)
  84.                 num=0;
  85.             while(!key2);//等待key2释放
  86.         }
  87.     }

  88.     if(key3==0)
  89.     {
  90.         delayms(10);
  91.         if(key3==0)
  92.         {
  93.             num=0;
  94.             while(!key3);
  95.         }
  96.     }

  97.     if(key4==0)
  98.     {
  99.         delayms(10);
  100.         if(key4==0)
  101.         {
  102.             while(!key4)
  103.                 TR0=~TR0;//启动和停止定时器0
  104.         }
  105.     }
  106. }

  107. void T0_time() interrupt 1
  108. {
  109.     TH1=(65535-45872)/256;
  110.     TL1=(65535-45872)%256;
  111.     numt0++;
  112.     if(numt0==20)
  113.     {
  114.         numt0=0;
  115.         num++;
  116.         if(num==60)
  117.             num=0;
  118.     }
  119. }

阅读(5650) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~