找回密码
 立即注册

QQ登录

只需一步,快速开始

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

这是一个按键控制四种波形图的程序,但是运行的时候一直卡在锯齿波是为什么呀,求解答

[复制链接]
ID:676077 发表于 2019-12-28 15:23 | 显示全部楼层 |阅读模式
#include<reg51.h>
#include <math.h>
#define  PI 3.1415
unsigned int num;
unsigned char count;
int countbeifen;
char i;
sbit key=P1^0;
void delay(unsigned int time)
{   unsigned int j=0;
    for(;time>0;time--)    for(j=0;j<125;j++);
}
void main()
{
  count=0;
  countbeifen=0;
  while (1)
  {
            countbeifen=count;
     if(key==0)
     {  
             delay(10);
             if(key==0)
                 {       
                count++;
                    if(count==5)
            count=0;  

                 }
         }
       
         //以上程序,会得到一个按键次数          0.1.2.3.4
       
          
       
    //count=3;               
       
       
                if(count==1        )
                {
                   for(i=0;i<=255;i++)
           P2=i;
                 count=countbeifen;
                   count=0;
                }  //锯齿波
               
        if(count==2)
                {
                   for(i=0;i<255;i++)
           P2=i;
                   for(i=255;i>0;i--)
           P2=i;
                  
                   count=countbeifen;
                   count=0;
            }
          //三角波
        if(count==3)
                {
             P2=0;  
             P2=!P2;
                         

                         count=countbeifen;
                     count=0;
        }   
         if(count==4)
            {
                    for (num = 0 ; num < 360 ; num++)
         P2= 127 +127 * sin((float)num / 180 * PI);       
                        count=countbeifen;
                        count=0;   
            }           //正弦波

        }
                                                                                     
}


回复

使用道具 举报

ID:155507 发表于 2019-12-28 23:56 | 显示全部楼层
不知道你的电路图是怎样的,发一下线路图

  1. #include <reg51.h>
  2. #include <math.h>
  3. #define  PI 3.1415
  4. unsigned int num;
  5. unsigned char count;
  6. int countbeifen;
  7. char i;
  8. sbit key=P1^0;
  9. void delay(unsigned int time)
  10. {
  11.         unsigned int j=0;
  12.         for(;time>0;time--)
  13.                 for(j=0;j<125;j++);
  14. }
  15. void main()
  16. {
  17.         count=0;
  18.         countbeifen=0;
  19.         while (1)
  20.         {
  21.                 countbeifen=count;
  22.                 if(key==0)
  23.                 {  
  24.                         delay(10);
  25.                         if(key==0)
  26.                         {      
  27.                                 count++;
  28.                                 //程序里按键没有松手检测,按下去等于是count一直在+,速度很快
  29.                                 //按钮程序没写等待释放语句,因此,按键值会不停增大,
  30.                                 while(!key);//等待按键释放
  31.                                 if(count==5)
  32.                                 count=0;  

  33.                         }
  34.                 }
  35.                
  36.                 //以上程序,会得到一个按键次数          0.1.2.3.4
  37.                
  38.                
  39.                
  40.                 //count=3;               
  41.                
  42.                
  43.                 if(count==1)
  44.                 {
  45.                         for(i=0;i<=255;i++)
  46.                         P2=i;
  47.                         count=countbeifen; //<---???? 有问题
  48.                         count=0;
  49.                 }  //锯齿波
  50.                
  51.                 if(count==2)
  52.                 {
  53.                         for(i=0;i<255;i++)
  54.                         P2=i;
  55.                         for(i=255;i>0;i--)
  56.                         P2=i;
  57.                        
  58.                         count=countbeifen; //<---???? 有问题
  59.                         count=0;
  60.                 }
  61.                 //三角波
  62.                 if(count==3)
  63.                 {
  64.                         P2=0;  
  65.                         P2=!P2;
  66.                        

  67.                         count=countbeifen;  //<---???? 有问题
  68.                         count=0;
  69.                 }   
  70.                 if(count==4)
  71.                 {
  72.                         for (num = 0 ; num < 360 ; num++)
  73.                         P2= 127 +127 * sin((float)num / 180 * PI);      
  74.                         count=countbeifen;  //<---???? 有问题
  75.                         count=0;   
  76.                 }           //正弦波

  77.         }
  78.        
  79. }

复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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