HHX-XXM 发表于 2014-3-17 20:30:17

Ti-68K简易C语言程序教程[课程1~4]

本帖最后由 HHX-XXM 于 2014-6-14 17:53 编辑

首先说明一下:
本教程是根据: http://www.technoplaza.net/programming/ 改编,在此感谢原作者!!!
The lessons is adapted from http://www.technoplaza.net/programming/ ,Thanks to the original author!
撰写人:HHX-XXM (你可以叫我大傻逼)
  本教程部分或全部例题均由原作者程序改写
  因此教程产生的任何问题本人或原作者均不负责
  本人是渣渣,请保持不完全相信的心态阅读此文章,本文章高危内容切勿模仿!
然后目的:
   促使自己学习TI-GCC,本文章是边学边写的,可能更新有点慢(最起码比nbzwt快就是了ヾ(●゜ⅴ゜)ノ(6.14:现在是慢了?dsa_┬)))
   然后,其实这个教程就是变相翻译+修改,望原作者理解(实际上我都不知道原作者是谁,Techno Plaza?科技广场)

本教程不会提到任何有关C语言的常识性问题(比如说int a是什么意思),请读者自行学习C语言(作者的C语言也是THQ水平的).
由于表达问题 , 所以文中有一些文字可能出现句不达意的情况 , 欢迎跟帖反馈 .
如果等不及的话 , 可以去文章头提到的原作者网站去观赏 . 相对来说TI-GCC是比较简单的 , 上手很容易 .

我已经做好了被喷死的准备
让暴风雨来得更猛烈些吧!!(现在看来根本没有人看,雨点都没有)

课程一,课程二 : 3#
课程三 : 10#
课程四 : 12#

课程撰写直播: https://qing.wps.cn/l/3b2e77e937fb45ec8a91fdfcd41a7f8b密码:ce0776f3 大家可以去围观,批注

P.S. 6.14:
             我很好骑吃死 为何加精

Cursor 发表于 2014-3-17 20:34:11

为什么叫做大傻逼?新人不懂啊π_π还有。。。唉算了。

HHX-XXM 发表于 2014-3-17 20:35:31

课程一 : 环境搭建所需软件包地址:http://www.technoplaza.net/downloads/details.php?program=56 TIGCC IDEhttp://www.technoplaza.net/downloads/details.php?program=94 TI-EMU安装方法:先安装TIGCC然后安装TI-EMU在TIGCC安装过程中,仅有IDE选项是必选的,其他选填TI-EMU是依靠GTK+的,请确保自己安装了GTK+TI-EMU与Ti-Gcc IDE的使用方法不多说了......
课程二 : 第一个Hello World程序首先,这是所有编程教程都会介绍的一个最基本的程序----打印Hello World...本次例程也针对一个简单的程序做说明...程序清单Hello World.c:请注意,也许打开TIGCC的IDE时候,新建源码会有一些自动填充的代码,我们不需要她,删除即可..
#include <tigcclib.h>//必须的头文件

void _main(void) {
    ClrScr(); //清除屏幕内容
    DrawStr(0, 0, "Hello, World!", A_NORMAL);//在屏幕右上角显示字符串
    ngetchx();//等待按键
}
然后单击DeBug>Run,或者点击F9,保存文档,然后程序会自动启动Ti-Emu,然后选择OS,开启模拟器进行测试...或许会出现异常,请按下ESC键返回Home界面然后再次Run.运行结果:http://www.technoplaza.net/images/programming/lesson1/hello/vpsghttp://www.technoplaza.net/images/programming/lesson1/hello/89ti.pnghttp://www.technoplaza.net/images/programming/lesson1/hello/vpsg关于屏幕:TI-89最高只能设置为159,99 她的屏幕尺寸是160x100 V200/TI-92+则是239,127,她的屏幕尺寸是240x128
最后一个参数是什么意思呢?A_NORMAL是告诉编译器不要给绘制的字符串添加任何效果..其他参数请参考TIGCC的说明文档..

wuzihaosg 发表于 2014-3-17 20:58:14

见到教程贴就进来了。。

Cursor 发表于 2014-3-17 21:08:35

jiage嘉哥 发表于 2014-3-17 20:34 static/image/common/back.gif
为什么叫做大傻逼?新人不懂啊π_π还有。。。唉算了。

呃。。。为什么不直接在一楼更新?

FreeBlues 发表于 2014-3-17 23:10:28

顶一下,希望有更多的人来分享自己的学习心得,稍微整理一下就是很不错的新手教程了

HHX-XXM 发表于 2014-3-17 23:40:49

jiage嘉哥 发表于 2014-3-17 21:08:35 static/image/common/back.gif

呃。。。为什么不直接在一楼更新?

......打字慢

诗诺比 发表于 2014-3-18 12:01:03




HHX-XXM 发表于 2014-3-18 17:51:54

诗诺比 发表于 2014-3-18 12:01 static/image/common/back.gif


{:getlost:}大触

HHX-XXM 发表于 2014-3-19 21:08:30

课程三 : 按键输入大家都知道,一个程序最必要的就是输入,而输入大部分是用键盘进行的(手机也是有虚拟键盘的说~)...上节课的HelloWorld.c程序中,已经出现了一个关于按键的函数 : ngetchx() , 我们现在来看一看她的具体的使用方法:#include <tigcclib.h>



void _main(void)

{

clrscr();

int key;

printf("Press Enter Key\n");

printf("Press Esc Key to close\n");

key = ngetchx();

while(1)

{

if(key == KEY_ENTER)

{

printf("You pressed Enter Key\n");

}

else if(key == KEY_ESC)

{

break;

}

key = ngetchx();

}

}ngetchx函数会返回一个按键码 , KEY_开头的常量储存着它.(要养成常看说明文档的习惯) KEY_F1 = 268, KEY_F2 = 269, KEY_F3 = 270, KEY_F4 = 271, KEY_F5 = 272, KEY_F6 = 273, KEY_F7 = 274, KEY_F8 = 275, KEY_ESC = 264, KEY_QUIT = 4360, KEY_APPS = 265, KEY_SWITCH = 4361, KEY_MODE = 266, KEY_BACKSPACE = 257, KEY_INS = 4353, KEY_CLEAR = 263, KEY_VARLNK = 4141, KEY_CHAR = 4139, KEY_ENTER = 13, KEY_ENTRY = 4109, KEY_STO = 258, KEY_RCL = 4354, KEY_SIGN = 173, KEY_MATH = 4149, KEY_MEM = 4150, KEY_ON = 267, KEY_OFF = 4363 #define KEY_DIAMOND (PSEUDO_CONST_KBD (16384, 8192))#define KEY_DIAMOND (PSEUDO_CONST_KBD (16384, 8192)) 摘自 TIGCC文档 然后一些C语言的常识我就不说了 运行结果:
ti 89
还有一个函数叫做 : kbhit() 用来检测键盘是否被点击 . 可以用while(!kbhit())来做不按下键盘就一直进行的死循环然后就是本节课最后一个函数 : OSdequeue()这个函数在处理别的东西的时候进行按键操作特别好用 , 用来做游戏是极好的 首先,请欣赏这段代码:(代码由原作者编写)


#include <tigcclib.h>



void _main(void) {

    void *kbq = kbd_queue();

    unsigned short key;

    unsigned long count = 0;

    clrscr();

    printf("Please press a key.\n");

    while (OSdequeue(&key, kbq)) {

      print: %lu.\n", count);

      ++count;

    }

printf("The keycode was %hu\n", key);

    ngetchx();

} 然后让我们来剖析这个代码:首先让我们来了解一个东西----按键序列这个序列是在键盘被按下时存储在内存中的位置,系统会自动处理他们,所以我们需要做的只是将他们出队.按键序列是一个先进先出队列,任何一个东西先进入队列也是第一个出队的 . 系统已经为我们处理好了按键序列 , 我们仅仅需要自己检查队列而已...void * kbq=kbd_queue();一个无类型的指针 , 指针指向一个内存地址 , 可以理解为硬币的正反面 . (六合江山:就是一张纸,写着你们家门牌号。把这张纸交给杀手,你就完了。)OSdequeue(&key,kbq); 由于坑爹的TIGCC,所以这个函数在我这里不能正常运行 , 大家理解为从按键序列中获取按键码就可以了(能跑了将修改此部分)(注意阅读文档而获得更详细的帮助和支持)

HHX-XXM 发表于 2014-3-26 17:39:33

本帖最后由 HHX-XXM 于 2014-4-16 12:13 编辑

第九周期中考
最近抓紧学习中
恕我不能更新(差不多周六周日有可能...QQ还是能上的)
没人啊。。。

HHX-XXM 发表于 2014-5-25 15:44:57

课程四:屏幕操作
一个程序光靠命令行来进行交互操作是不现实的,想要程序做的好,必定要有一个好看的GUI,以便进行操作。
身为一个为计算器设计的语言,里面已经集成了绘图函数。
而且使用方法很简单。
首先我们来熟悉几个常量:
LCD_WIDTH和LCD_HEIGHT
这两个常量分别代表了长度和宽度
在TI-89上面,显示屏是160*100的,TI-92和V200则是240*128的
对于TI-89,LCD_WIDTH就是160,LCD_HEIGHT就是100
TI-92/V200同理
下面我们来了解一下第一个函数:
DrawLine
这个函数的目的就是画一条线
她有五个参数:
DrawLine(x1,x2,y1,y2,绘制方式)
同样,我们的方式依旧是A_NORMAL,其他方式请阅读TI-GCC说明文档
比如,在2,2和22,22的地方画一条线,可以采用:
DrawLine(2,2,22,22,A_NORMAL);
原文中提到了一个
x1 = random(LCD_WIDTH);
这个就不多解释了,随机数的意思

那么,下面我们来进行第二个函数的学习
我们来认识一个新概念----精灵
精灵是个好东西,很多游戏开发软件(如Gamemaker)中通常都有这个说法
TIGCC也为我们准备了三个函数来绘制精灵
她们是:
{Sprite8 , Sprite16 , Sprite32}
这三个函数是用来在屏幕上绘制精灵的函数
让我们来看一个示例:#include <tigcclib.h>



unsigned char S1[] = {0x3C,0x42,0x42,0x7E,0x42,0x42,0x42,0x42};

unsigned short int S2[] =

{

0xFFFF,0x8001,0xBFFD,0xA005,0xAFF5,0xA815,0xABD5,0xAA55,0xAA55,0xABD5,0x        A815,0xAFF5,0xA005,0xBFFD,0x8001,0xFFFF

};

unsigned long int S3[] = {

0x00000000,0x00000000,0x00000000,0x00000000,        0x00000000,0x00000000,0x00E07000,0x01FE7F80,        0x03FEFF80,0x07B9CE00,0x03188E00,0x03FFFF00,        0x01FFFF00,0x01C00700,0x01FFFF00,0x01C00700,        0x01FFFF00,0x01C00700,0x01FFFF00,0x01FFFF00,        0x00383800,0x07FFFFC0,0x07FFFFC0,0x00703800,        0x00F03800,0x01E03800,0x00403800,0x00000000,        0x00000000,0x00000000,0x00000000,0x00000000

};

void _main(void)

{

ClrScr();

Sprite8(10,20,8,S1,LCD_MEM,SPRT_XOR);

Sprite16(30,20,16,S2,LCD_MEM,SPRT_XOR);

Sprite32(60,20,32,S3,LCD_MEM,SPRT_XOR);

ngetchx();

}运行结果如下:https://preview.wps.cn/onlinedoc/1/2014-05-25/webkit/a35/4b8/c97/a354b8c97aae31205eae8ff22651c3f119b44822/preview.files/image004.jpg
下面就让我们来剖析这个程序首先,在程序的开头我们定义了三个变量:S1,S2,S3它们分别为”Unsigned Char”,”Unsigned short int”和”Unsigned long int”这三个变量储存着三个不同的精灵(8x8        16x16        32x32)然后通过程序中的Sprite8(10,20,8,S1,LCD_MEM,SPRT_XOR);        Sprite16(30,20,16,S2,LCD_MEM,SPRT_XOR);        Sprite32(60,20,32,S3,LCD_MEM,SPRT_XOR);这三个函数绘制在屏幕上那么怎么把图片(点阵图)变成精灵的数据呢?很简单有过单片机开发经验的朋友都知道,有一种软体叫做字符取模也就是将图片变成C51格式的字符串这个软体我会在帖子结尾上传下面是软件截图:https://preview.wps.cn/onlinedoc/1/2014-05-25/webkit/a35/4b8/c97/a354b8c97aae31205eae8ff22651c3f119b44822/preview.files/image006.jpg https://preview.wps.cn/onlinedoc/1/2014-05-25/webkit/a35/4b8/c97/a354b8c97aae31205eae8ff22651c3f119b44822/preview.files/image005.jpg 也许大家就要问了为什么我把一个32x32或16x16的图片取模后和我的格式不一样呢?这是由于Sprite16和Sprite32的函数只能接受这种格式可以手动将0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x70,0x00,0x01,0xFE,0x7F,0x80,

0x03,0xFE,0xFF,0x80,0x07,0xB9,0xCE,0x00,0x03,0x18,0x8E,0x00,0x03,0xFF,0xFF,0x00,

0x01,0xFF,0xFF,0x00,0x01,0xC0,0x07,0x00,0x01,0xFF,0xFF,0x00,0x01,0xC0,0x07,0x00,

0x01,0xFF,0xFF,0x00,0x01,0xC0,0x07,0x00,0x01,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0x00,

0x00,0x38,0x38,0x00,0x07,0xFF,0xFF,0xC0,0x07,0xFF,0xFF,0xC0,0x00,0x70,0x38,0x00,

0x00,0xF0,0x38,0x00,0x01,0xE0,0x38,0x00,0x00,0x40,0x38,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00这种格式转化为0x00000000,0x00000000,0x00000000,0x00000000,        0x00000000,0x00000000,0x00E07000,0x01FE7F80,        0x03FEFF80,0x07B9CE00,0x03188E00,0x03FFFF00,        0x01FFFF00,0x01C00700,0x01FFFF00,0x01C00700,        0x01FFFF00,0x01C00700,0x01FFFF00,0x01FFFF00,        0x00383800,0x07FFFFC0,0x07FFFFC0,0x00703800,        0x00F03800,0x01E03800,0x00403800,0x00000000,        0x00000000,0x00000000,0x00000000,0x00000000这种格式也就是把四个一个字节的数据合并成为一个四个字节的数据.然后我们来正式介绍着三个函数 SpriteXX函数接受6个参数分别是:x位置 , y位置 , 图像高度 , 图像数据 , 显存指针 , 绘制方法Xy位置自然不用说图像高度就是精灵中图像的高度(图像宽度就是SpriteXX中的XX)图像数据从Sprite8至Sprite32分别为:无符号的字符数组,无符号的短整型数组,无符号的长整形数组至于显存指针,您只需要记住:当前屏幕的显存指针通常就是 LCD_MEM(除非您是想将精灵绘制到其他的地方,我们或许在以后的课程中提到)下面,让我们来看一看绘制方法:我推荐大家使用的绘制方法是SPRT_XOR也就是说异或下面通过一组代码您会充分认识到这个绘制方法的好处:首先我们定义unsigned char S4[] = {0x18,0x18,0x18,0xFF,0xFF,0x18,0x18,0x18};unsigned char S5[] = {0xC3,0x66,0x24,0x00,0x00,0x24,0x66,0xC3};

    https://preview.wps.cn/onlinedoc/1/2014-05-25/webkit/a35/4b8/c97/a354b8c97aae31205eae8ff22651c3f119b44822/preview.files/image007.jpg
Sprite8(1,1,8,S4,LCD_MEM,SPRT_XOR);https://preview.wps.cn/onlinedoc/1/2014-05-25/webkit/a35/4b8/c97/a354b8c97aae31205eae8ff22651c3f119b44822/preview.files/image008.jpg
Sprite8(1,1,8,S5,LCD_MEM,SPRT_XOR);https://preview.wps.cn/onlinedoc/1/2014-05-25/webkit/a35/4b8/c97/a354b8c97aae31205eae8ff22651c3f119b44822/preview.files/image009.jpg
Sprite8(1,1,8,S4,LCD_MEM,SPRT_XOR); 您会发现:第一句代码和第二句代码一模一样为什么会产生不同的效果呢?这是因为我们使用了SPRT_XOR这个绘制方法是很好用的如果绘制的地方没有像素点,那么就绘制一个像素点如果绘制的地方已经有了一个像素点,那么就抹掉一个像素点 这就是我为什么推荐这个绘制方法很好用,而且很方便更多的方法请翻阅GUIDE,谢谢


    P.S. 我死灰复燃了

ayako.uiharu 发表于 2014-7-25 02:44:30

你弃坑了吗

Cursor 发表于 2014-7-25 09:52:04

再来顶顶大傻逼

cfrpg 发表于 2014-12-16 12:29:37

普通92可以用吗?另外下载链接跪了

liuzidian 发表于 2014-12-17 21:19:23

恭喜再上首页
(吃我一记洛阳铲

randomzoom 发表于 2014-12-17 22:18:25

在电脑上做的,还是ti里做的。如何给ti装编译器。

5tuaner 发表于 2014-12-17 22:42:01

HHX-XXM 发表于 2014-5-25 15:44
课程四:屏幕操作
一个程序光靠命令行来进行交互操作是不现实的,想要程序做的好,必定要有一个好看的GUI ...

就喜欢教程,写的好,就是图片不显示.

zdz88 发表于 2014-12-19 16:30:13

请问这是直接在计算器上就能编程的吗。

HHX-XXM 发表于 2015-2-1 18:33:39

randomzoom 发表于 2014-12-17 22:18
在电脑上做的,还是ti里做的。如何给ti装编译器。

这个是在电脑上做的,但是ti里面也可以
具体情况请在本论坛寻找ti68k的机上编译器
页: [1] 2
查看完整版本: Ti-68K简易C语言程序教程[课程1~4]