找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 3792|回复: 0

关于三角函数不能编译的问题

[复制链接]
发表于 2012-2-27 20:18:14 | 显示全部楼层 |阅读模式
前两天写了一个钟表的程序,很多朋友反映在BCC不连接NXT时可以编译,但连上后就报错,这是因为NXT固件问题,升级一下固件就可以了(从BCC自带的下载到NXT中,个人感觉只要BCC在不连NXT时可编译,BCC中带的固件就应该我可以,但不敢保证)
我的BCC版本:3.3.8.9,附件为我用的固件。
升级前最好备份声音文件,否则声音文件会丢失的。
附钟表程序:
//by prcthinker
//2012-2-22
task main()
{
int i;
int flag,flag1,sound,soundNum,soundTime;
int x1,y1,x2,y2; //划线坐标
float a;
float sec,min,hour;  //时间
long t;  //NXT时钟
sec=0;
min=0;
hour=0;
t=CurrentTick();
flag1=0;
flag=0;
sound=0;
soundNum=0; //整点响铃次数
soundTime=0; //整点响铃间隔时间
while(true)
{
   while(CurrentTick()-t<500)   //秒针0.5s移动一次
   {
   /*****************调整时间**************************/
   //ButtonPressed(BTNEXIT,false)  //退出键,这里不用
    //橙色键,以确定调整小时还是分钟
    if (ButtonPressed(BTNCENTER,false)==true)
    {
     if(flag==0)
      flag=1; //调整小时
     else
      flag=0;  //调整分钟
     Wait(500);
    }
     //右键,增加
     if(ButtonPressed(BTNRIGHT,false)==true)
      {
       if(flag==0)
       {
        min++;
        if(min>60)    //判断是否超出范围,下同
         min=min-60;
        hour=hour+1/60;
        if(hour>12)
         hour=hour-12;
       }
       else
       {
        hour++;
        if(hour>12)
         hour=hour-12;
        }
        flag1=0;    //响铃次数赋值标记取消,以免调整时间时响铃次数产生错误
       Wait(500);
      }
    //左键,减少
    if(ButtonPressed(BTNLEFT,false)==true)
      {
       if(flag==0)
       {
        min--;
        if(min<0)
          min=min+60;
        hour=hour-1/60;
        if(hour<0)
          hour=hour+12;
       }
       else
        {
         hour--;
         if(hour<0)
          hour=hour+12;
        }
       flag1=0;
       Wait(500);
      }
    /********************调整时间结束****************************/
   }
   t=t+500;
   ClearScreen();    //清屏
   PointOut(50, 32);   //时钟中心
   CircleOut(50, 32, 30);  //画表盘
   for(i=0;i<12;i++)       //画刻度
   {
    a=i*30*PI/180;
    x1=50+30*cos(a);
    y1=32+30*sin(a);
    x2=50+26*cos(a);
    y2=32+26*sin(a);
    LineOut(x1, y1, x2, y2);
   }
   //3、6、9、12点加粗
   LineOut(49, 62, 49, 58);
   LineOut(50, 62, 50, 58); //因计算精度问题 ,12点位置重画
   LineOut(51, 62, 51, 58);
   LineOut(49, 2, 49, 6);
   LineOut(51, 2, 51, 6);
   LineOut(20, 31,24,31);
   LineOut(20, 32,24,32);
   LineOut(20, 33,24,33);
   LineOut(80, 31,76,31); //9点位置重画
   LineOut(80, 33,76,33);
   sec=sec+0.5;         //时间变量赋值
   min=min+0.5/60;
   hour=hour+0.5/3600;
   a=sec*6*PI/180;      //计算秒针位置
   x1=50+24*sin(a);
   y1=32+24*cos(a);
   x2=50+3*sin(a);
   y2=32+3*cos(a);
   LineOut(x1, y1, x2, y2);  //画秒针
   a=min*6*PI/180;      //计算分针位置
   x1=50+20*sin(a);
   y1=32+20*cos(a);
   x2=50+3*sin(a);
   y2=32+3*cos(a);
   LineOut(x1, y1, x2, y2);  //画分针
   a=hour*30*PI/180;   //计算时针位置
   x1=50+16*sin(a);
   y1=32+16*cos(a);
   x2=50+3*sin(a);
   y2=32+3*cos(a);
   LineOut(x1, y1, x2, y2); //画时针

   if(60-min<2 && flag1==0)  //在60分附近时对正点响铃次数赋值
    {                         //精度原因,min在整点时可能比60大一点,也可能小一点
     soundNum=hour+1;         //小数部分被舍去,+1
     flag1=1;                 //响铃次数赋值标志,1表示以后不再被赋值
    }
   if(sec==60)                //sec到60归零
     sec=0;
   if(abs(min-60)<0.008)      //判断是否整点,同样因精度原因min可能不会正好是60
     {
      min=0;
      sound=1;                //整点,响铃标志
     }
   if(abs(hour-12)<0.0002)    //hour归零
     hour=0;
    if(sound==1)              //整点响铃
    {
     if(soundTime%3==0)       //响铃间隔
     {
      PlayTone(462,200);       //响铃
      soundNum--;
     }
     soundTime++;
    }
    if(soundNum<=0)           //响铃完成后取消个标志
     {
      sound=0;                //不再响铃
      flag1=0;                //响铃次数可重新赋值
      soundTime=0;            //响铃次数清零
     }
   if(abs(min-30)<0.5 && sec==0)  //半点响铃
    PlayTone(562,500);
}
}



lms_arm_nbcnxc_131.rar

87.53 KB, 下载次数: 39

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-5-9 01:59 , Processed in 0.080990 second(s), 25 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

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