找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 9899|回复: 9

NXC教程——按键篇

  [复制链接]
发表于 2010-7-30 18:01:31 | 显示全部楼层 |阅读模式
      这篇主要是介绍NXT可编程砖上的按键的,函数内容不多,我干脆就直接写了个程序,大家先看,不懂的提问,我再根据提问下教程。
      这是一个时钟程序,可以自己设置时间,按右方向键数字加一,按左方向键数字减一,按橙色键确定。时间还是蛮准的,就是如果拿着这么大个时钟的话未免有点OUT,纯属娱乐和学习了。

本篇所涉及的函数:
bool ButtonPressed (const byte  btn,
                                  bool resetCount
                                 )
其中参数btn为按键值,可取常用值为:  BTNRIGHT  BTNLEFT BTNCNETER ,分别对应NXT主机上的左、右三角按钮和中间橙色按钮。
参数resetCount为是否重置按键计数器标志,一般取值为false(0)
函数返回值类型为布尔值,即按下后返回为true(1),没按下返回为false(0)


  1. char hour = 0;
  2. char min = 0;
  3. char sec = 0;
  4. char clear = 0;
  5. void display()
  6. {
  7.     if(clear == 0)
  8.         NumOut(74, LCD_LINE3, sec);
  9.     else
  10.         NumOut(74, LCD_LINE3, sec, 1);
  11.     TextOut(58, LCD_LINE3, ":");
  12.     NumOut(42, LCD_LINE3, min);
  13.     TextOut(26, LCD_LINE3, ":");
  14.     NumOut(10, LCD_LINE3, hour);
  15.    
  16.     TextOut(15, LCD_LINE7, "Designed by ");
  17.     TextOut(25, LCD_LINE8, "Hollwen");
  18.     TextOut(10, LCD_LINE1, "www.cmnxt.com");
  19. }
  20. void SetTime(char T)
  21. {
  22.     char temp = 0;
  23.     while(ButtonPressed(BTNCENTER,false) != 1){
  24.         if(ButtonPressed(BTNRIGHT,false) == 1)
  25.         {
  26.             Wait(100);
  27.             if(ButtonPressed(BTNRIGHT,false) == 1)
  28.                 temp++;
  29.         }
  30.         if(ButtonPressed(BTNLEFT,false) == 1)
  31.         {
  32.             Wait(100);
  33.             if(ButtonPressed(BTNLEFT,false) == 1)
  34.                 temp--;
  35.         }
  36.         switch(T){
  37.             case 0: hour = temp;
  38.                     TextOut(5, LCD_LINE5, "INPUT THE HOUR", 0);
  39.                     break;
  40.             case 1: min = temp;
  41.                     TextOut(5, LCD_LINE5, "INPUT THE MIN", 0);
  42.                     break;
  43.             case 2: sec = temp;
  44.                     TextOut(5, LCD_LINE5, "INPUT THE SEC", 0);
  45.                     break;
  46.         }
  47.         display();
  48.     }
  49. }
  50. void Run()
  51. {
  52.     while(1){
  53.         display();
  54.         if(sec<59)
  55.             sec++;
  56.         else {
  57.             sec = 0;
  58.             if(min<59)
  59.                 min++;
  60.             else{
  61.                 min = 0;
  62.                 if(hour<23)
  63.                     hour++;
  64.                 else{
  65.                     sec = 0;
  66.                     min = 0;
  67.                     hour = 0;
  68.                 }
  69.             }
  70.         }
  71.         Wait(1000);
  72.     }
  73. }
  74. task main()
  75. {
  76.     SetTime(0);
  77.     Wait(1000);
  78.     SetTime(1);
  79.     Wait(1000);
  80.     SetTime(2);
  81.     ClearScreen();
  82.     clear = 1;
  83.     Run();
  84. }
复制代码

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2010-8-11 21:19:55 | 显示全部楼层
学习了,多谢!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-9-26 14:18:11 | 显示全部楼层
好哇!辛苦了!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-1-9 16:29:05 | 显示全部楼层
学习了。。。。。。。。。。。。。。。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-4-11 15:16:08 | 显示全部楼层
很有帮助,期待新教程!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-8-16 17:18:43 | 显示全部楼层
希望能推出后续的篇章哦。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-9-1 22:48:35 | 显示全部楼层
ok】
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-10-12 15:50:19 | 显示全部楼层
这个程序精彩...
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-11-3 21:45:38 | 显示全部楼层
学习下
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-12-23 19:07:41 | 显示全部楼层
我运行这个程序的时候发现两个问题,想拿出来和大家探讨下:
1.调整时间的过程中,10减小为9时,个位数的0没有没清除掉  
2.调整时间时,数值超出正常时间范围

感谢糖老大的NXC教程,可能我有点较真了
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

GMT+8, 2024-4-26 19:56 , Processed in 0.122684 second(s), 19 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

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