標題: 單片機數碼管顯示數值,按鍵設置數值 源碼加proteus仿真 [打印本頁]

作者: fengdao6    時間: 2017-5-8 20:48
標題: 單片機數碼管顯示數值,按鍵設置數值 源碼加proteus仿真
簡單的51練手,下面是proteus仿真原理圖:


單片機源程序:
  1.   #include<reg52.h>
  2.   #define uchar unsigned char
  3.   #define uint unsigned int
  4.   sbit key1=P3^4;
  5.   sbit key2=P3^5;
  6.   sbit wei4=P2^0;
  7.   sbit wei3=P2^1;
  8.   uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77};
  9.   void delayms(uint);
  10.   uchar numt0,num,flat;
  11.    void delayms(uint xms)
  12.    {   
  13.        uint i,j;
  14.            for(i=xms;i>0;i--)
  15.              for(j=110;j>0;j--);
  16.           }
  17.    void display(uchar numdis)
  18.   {
  19.     uchar shi,ge;
  20.         shi=numdis/10;
  21.         ge=numdis%10;
  22.         wei4=1;
  23.         wei3=1;
  24.         P1=table[shi];
  25.         wei4=1;
  26.         wei3=0;
  27.         delayms(5);
  28.         wei4=1;
  29.         wei3=1;
  30.         P1=table[ge];
  31.         wei4=0;
  32.         wei3=1;
  33.         delayms(5);
  34.         }
  35.         void init()
  36.         {
  37.        TMOD=0x01;
  38.            TH0=(65536-45872)/256;
  39.            TL0=(65536-45872)%256;
  40.            EA=1;
  41.            ET0=1;
  42.            }
  43.    void keyscan()
  44.    {
  45.       if(key1==0)
  46.           {
  47.             delayms(10);
  48.                 if(key1==0)
  49.                 {
  50.              num++;
  51.                  flat++;
  52.                  if(num==99)
  53.                      num=0;
  54.                 while(!key1);
  55.           }
  56.         }
  57.    if(key2==0);
  58.    {
  59.       delayms(10);
  60.           if(key2==0)
  61.           {
  62.              if(num==0)
  63.                    num=99;
  64.                    flat=99;
  65.                    flat--;
  66.                    num--;
  67.                    while(!key2);
  68.                    }
  69.         }
  70.   }
  71.   void main()
  72.   {init();
  73.    while(1)
  74.    {
  75.      keyscan();
  76.          display(num);
  77.          }}
  78.         void T0_time() interrupt 1
  79.         {TH0=(65536-45872)/256;
  80.          TL0=(65536-45872)%256;
  81.          numt0++;
  82.          if(numt0==20)
  83.          {numt0=0;
  84.          num++;
  85.          if(num==60)
  86.             num=0;

  87. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

下載:
按鍵控制數碼管顯示.rar (55.45 KB, 下載次數: 25)


作者: w1179benp    時間: 2017-5-10 07:19
LZ沒認真跑過這個程序吧?怎的不能顯示99能,當顯示98后再按一次就變00了。其次,每當按鍵按下不抬起,十位就熄滅不亮,覺得不爽,
作者: export    時間: 2017-5-10 12:42
支持一下。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1