找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 62806|回复: 143

NXC教程——显示篇

   火... [复制链接]
发表于 2010-7-30 10:44:29 | 显示全部楼层 |阅读模式
在NXT可编程砖的液晶屏幕上能显示100*64像素的黑白点阵。
在NXC中规定NXT的屏幕X方向取值0-99,Y方向取值0-63,坐标(0,0)为左下角。


本篇相关函数:
NumOut(x, y, value, clear = false) 显示数字
TextOut(x, y, msg, clear = false)  显示文本
GraphicOut(x, y, filename, clear = false) 显示一个图片文件,起点为(x,y)
CircleOut(x, y, radius, clear = false) 以坐标(x,y)为圆心画圆,radius为半径
LineOut(x1, y1, x2, y2, clear = false) 绘制从坐标(x1,x2)到 (x2,y2)的直线
PointOut(x, y, clear = false)  在坐标(x,y)处画点
RectOut(x, y, width, height, clear = false) 以(x,y)为起点,横向延伸width像素,纵向延伸heigh像素,画矩形
ResetScreen() 复位屏幕
ClearScreen()  清除屏幕

下面以TextOut(x, y, msg, clear = false)函数为例介绍一下本篇内容。

示例1:

  1. task main()
  2. {
  3.     while(1){
  4.         TextOut(0, LCD_LINE1, "Hello World!");
  5.     }
  6. }
复制代码
编译运行后的效果为在NXT屏幕一直显示 Hello World!,
仔细看的读者会发现示例函数和标准的函数有区别,示例函数只有3个参数,而标准的有4个参数,这个是为什么呢?
原来上面所列函数中的clear = false部分是可以省略的,默认为0,意思为默认不清除!
另外说明一下LCD_LINE1这个参数,NXC中定义NXT屏幕分为8行,分别为LCD_LINEX(X=0,1,2,……7)。
那清除是什么效果呢?
接着看


示例2
  1. task main()
  2. {
  3.     while(1){
  4.         TextOut(0, LCD_LINE1, "Hello World!");
  5.         Wait(5000);
  6.         TextOut(0, LCD_LINE8, "Hello World!", 1);
  7.         Wait(5000);
  8.     }
  9. }
复制代码
编译运行示例2后大家可以看出效果了,第一行先是显示Hello World! 5秒,然后清除,接着第8行显示5秒,但不清除。这个就是函数最后一个参数的作用,函数后面参数为真时,先进行全屏清除操作,然后才进行输出显示操作。

那为什么要搞得这么复杂,清除不清楚这么用呢,

示例3

  1. task main()
  2. {
  3.     int i;
  4.     while(1){
  5.         TextOut(0, LCD_LINE4, "I am   years old!", 1);
  6.         for(i=1;i<100;i++)
  7.         {
  8.             NumOut(26, LCD_LINE4, i);
  9.             Wait(1000);
  10.         }
  11.     }
  12. }
复制代码
好了,一般在文本和数字组合,或者其他组合的时候会这样写。记住,如果想静态输出一段,同时动态输出一段的话,为了不让动态的那部分产生显示叠加则需要先清除后显示。并且清除操作应该像示例一样要清除在先,如果顺序反了就只显示数字,而没有“I AM  YEARS OLD"了。

最后给大家留个作业,
1.根据本章所学写出一个画同心圆的程序出来。
2.利用矩形框和线条函数,模仿画出一个进度条(读取进度条,一个慢慢填充进度框的动画效果)。安装软件或者玩游戏时候经常出现的那种。

作业答案:
游客,如果您要查看本帖隐藏内容请回复




如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2010-7-30 14:08:55 | 显示全部楼层
回复 糖伯虎 的帖子
  1. task main()
  2. {
  3. while(1){
  4. CircleOut(50,32,30);
  5. CircleOut(50,32,15);
  6. }
  7. }
复制代码
作业完成!谢谢糖老大!



   

点评

做得不错,那你试看完成作业2吧。  发表于 2010-7-30 14:29

评分

参与人数 1乐币 +5 收起 理由
糖伯虎 + 5

查看全部评分

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-7-30 16:02:34 | 显示全部楼层
回复 糖伯虎 的帖子
  1. task main()
  2. {
  3. while(1){
  4. RectOut(10,10,80,30);
  5. LineOut(15,20,85,20);
  6. }
  7. }
复制代码
作业2的代码。不知道我做得是否合要求。再次谢谢唐老大!呵呵!


   

点评

这个不对啦,我要求的是一个读进度条的效果,安装软件的时候你总见过进度条吧?  发表于 2010-7-30 16:35
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-7-30 19:25:48 | 显示全部楼层
是我理解错了。看了示例知道,作业2是动态的,需要一个for循环,学习了!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

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

使用道具 举报

发表于 2010-9-25 17:21:11 | 显示全部楼层
初学者,谢谢楼主的无私帮助
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-10-2 13:56:47 | 显示全部楼层

画圆作业

本帖最后由 kmtx001 于 2010-10-2 14:31 编辑
  1. task main()
  2. {
  3.    int r;
  4.    int a;
  5.    int b;
  6.    int x;
  7.    int y;
  8.    while(1){
  9.             x = Random(100);
  10.             y = Random(64);
  11.             r = Random(10)+5;
  12.             b = Random(5);
  13.             //b = b+5;
  14.             for(a=1;a<b;a++)
  15.               {
  16.                 CircleOut(x,y,r+a);
  17.                 Wait(150);
  18.                 //ClearScreen();
  19.                }
  20.             }
  21. }
复制代码

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-10-2 14:01:25 | 显示全部楼层

进度条作业

本帖最后由 kmtx001 于 2010-10-2 14:03 编辑
  1. task main()
  2. {
  3. &#160; &#160;int h;
  4. &#160; &#160;while(1){
  5. &#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;RectOut(10,29,80,6,1);
  6. &#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;for(h=1;h<80;h++)
  7. &#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;{
  8. &#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; RectOut(10,29,h,6);
  9. &#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; Wait(200);
  10. &#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;}
  11. &#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;}
  12. }
复制代码


如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-10-29 06:54:13 | 显示全部楼层
呵呵,不错,多谢!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-11-18 11:04:03 | 显示全部楼层
我刚在学,还没摸出头脑
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-11-28 19:05:11 | 显示全部楼层
我也想学习一下。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-12-1 09:27:35 | 显示全部楼层
看来是C语言呢
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2011-1-19 16:08:35 | 显示全部楼层
正在学习中
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 20:31 , Processed in 0.252127 second(s), 20 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

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