標題: 這個單片機程序 為什么數(shù)碼管不亮? [打印本頁]

作者: jdlover    時間: 2020-11-24 22:04
標題: 這個單片機程序 為什么數(shù)碼管不亮?
  1. #include<reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char                                                         
  4. uchar time;
  5. uint count=0;        //定義占空比,并初始占空比為0%
  6. sbit PWM=P2^0;      //P2^0口輸出PWM
  7. sbit key_add=P3^4;   //電機加速的按鍵 的I/O口
  8. sbit key_dec=P3^5;   //電機減速的按鍵 的I/O口
  9. sbit led0 = P2^1;  
  10. sbit led1 = P2^2;
  11. unsigned char code table[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
  12. uint i=0,j;
  13. /************函數(shù)聲明**************/
  14. void delayxms(uint z); //延時
  15. void Motor_add();          //電機加速,即增加占空比
  16. void Motor_dec();           //電機減速,即減少占空比
  17. void timer0_init();                //定時器0初始化
  18. void display(uint count);
  19. /*********主函數(shù)********************/
  20. void main()
  21. {         
  22.         timer0_init();
  23.         delayxms(2);
  24.         while(1)
  25.         {
  26.          Motor_add();
  27.          Motor_dec();  
  28.      display(count);
  29. }
  30. }

  31. /****************延時處理**********************/
  32. void delayxms(uint z) //延時xms程序
  33. {
  34.     uint x,y;
  35.         for(y=z;x>0;x--)
  36.                 for(y=110;y>0;y--);
  37. }


  38. void Motor_add()  //電機加速
  39. {
  40.   if(key_add==0)
  41.   {
  42.           delayxms(2); //此處時間不能太長,否者會的中斷產生沖突
  43.   if(key_add==0)
  44.   {
  45.           count+=1;        //每按一次加速按鍵占空比加1
  46.    if(count>=99)            //限定占空比上限
  47.         {
  48.          count=99;
  49.         }
  50.   }
  51.         while(!key_add);
  52.   }
  53. }
  54. void Motor_dec()//電機減速
  55. {
  56. if(key_dec==0)
  57. {
  58.   delayxms(2);//此處時間不能太長,否者會的中斷產生沖突
  59.   if(key_dec==0)
  60.   {
  61.           count-=1;                 //每按一次減速按鍵占空比減1
  62.    if(count<=0)    //限定占空比下限
  63.    {
  64.         count=0;
  65.    }
  66.   }
  67.         while(!key_dec);
  68.    }
  69. }
  70. /***********定時器0初始化***********/
  71. void timer0_init()
  72. {
  73.   TMOD=0x01; //定時器0工作于方式1
  74.   TH0=(65536-10)/256;
  75.   TL0=(65536-10)%256;
  76.   TR0=1;
  77.   ET0=1;
  78.   EA=1;
  79. }
  80. /**************定時0中斷處理******************/
  81. void timer0_int() interrupt 1
  82. {        
  83.   TR0=0;    //設置定時器初值期間,關閉定時器
  84.   TH0=(65536-10)/256;
  85.   TL0=(65536-10)%256;
  86.   TR0=1;         
  87.   time++;
  88.   if(time<count)          //count為占空比
  89.   {
  90.         PWM=1;           //輸出高電平
  91.   }
  92.   else
  93.         PWM=0;        
  94.   if(time>=100)
  95.   {
  96.         time=0;
  97.   }
  98. }
  99. void display(uint count) //顯示函數(shù)
  100. {
  101. i = count/10;   
  102. j = count-i*10;
  103.   led1=0;
  104. P0=table[i];
  105. led0=1;
  106. delayxms(5);
  107. led0=0;
  108. P0=table[j];
  109. led1=1;
  110. delayxms(5);
  111. }
復制代碼

作者: csmyldl    時間: 2020-11-25 00:33
接了一位數(shù)碼管,要顯示count計數(shù)值的低兩位,而且這兩位各只顯示5ms,人的眼睛無法觀察到這短時間的顯示
作者: hukangjaki1    時間: 2020-11-25 10:37
led0=0;led1=0;這兩個語句去除




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