找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1052|回复: 2
收起左侧

这个单片机程序 为什么数码管不亮?

[复制链接]
ID:529972 发表于 2020-11-24 22:04 | 显示全部楼层 |阅读模式
  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. /************函数声明**************/
  14. void delayxms(uint z); //延时
  15. void Motor_add();          //电机加速,即增加占空比
  16. void Motor_dec();           //电机减速,即减少占空比
  17. void timer0_init();                //定时器0初始化
  18. void display(uint count);
  19. /*********主函数********************/
  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) //显示函数
  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. }
复制代码
回复

使用道具 举报

ID:235200 发表于 2020-11-25 00:33 | 显示全部楼层
接了一位数码管,要显示count计数值的低两位,而且这两位各只显示5ms,人的眼睛无法观察到这短时间的显示
回复

使用道具 举报

ID:848831 发表于 2020-11-25 10:37 | 显示全部楼层
led0=0;led1=0;这两个语句去除
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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