||
最近碰到一个天大的问题:21IC的博客有限制,上传文件大小不能超过2M,总容量不能超过50M。正好近期我的编译器“重拳升级”,压缩后已经3M了,不能像以前那样上传到博客了。我挖空心思琢磨了半天,终于想出一个解决办法,就是申请一个网络硬盘,把编译器压缩包传到网络硬盘,再把链接地址粘贴在我的博客中,。。呵呵,OK了。
看看俺的编译器又弄出什么新花样呢?嗯,就是支持电脑编程了。以前都是编译成某种单片机的机器码控制电路去,现在我把它移植到电脑上了,可以像C++,VB那样编出windows程序了。弄了一个寒假才做好的。其实有这个时间我可以学点别的东西,比如ASP网页编程什么的,哎 非要把时间浪费在一个虚幻的事情上,好奇怪。。我都不知道自己怎么想的,。。。前两天去找工作面试,回来后更感觉迷茫了,想想我应该学点正经东西,。。不去弄些歪门邪道的。
嗯,先不管这些了。看下编译器现在的界面:
这个是一个windows-uC语言的示例程序,控制声卡的:
//注意,这个程序运行后没有界面,只能用任务管理器结束进程
#cpu "PC80X86"
#include "windows\kernel32.c"
#include "windows\winmm.c"
#include "windows\extend\midi.c"
unit main
{
void main()
{
midi.open();
//用128种音色播放
for( uint8 ii = 0; ii < 128; ++ii ) {
//设置当前音色
midi.set_timbre( 0, ii );
//用当前音色播放一遍曲子,曲子一共有64个音符
for( uint8 i = 0; i < 64; ++i ) {
uint8 d = song[i];
uint16 t = d >> 4;
uint8 scale = d & 0x0f;
midi.play( 0, 50 + seg[scale], 90 );
kernel32.Sleep( t * 200 );
midi.stop( 0, 50 + seg[scale] );
}
kernel32.Sleep( 300 );
}
kernel32.ExitProcess( 0 );
}
//各个音的频率, 3-4 和 7-1 之间差一个半音,其他的相差一个全音
[]code uint8 seg = {
//01,02,03,04,05,06,07,01,02,03,04,05,06,07,01,02,03,04,05,06,07
0, 2, 4, 5, 7, 9,11,12,14,16,17,19,21,23,24,26,28,29,31,33,35
};
//敖包相会的曲子,每个字节的高位表示时值;低位表示音阶,0~f依次对应 67-1234567-1234567
[]code uint8 song = {
0x20,0x48,0x2a,0x2a,0x18,0x17,0x45,0x25,0x47,0x28,0x37,0x18,0x4a,0x88,
0x20,0x48,0x2a,0x2a,0x18,0x17,0x45,0x25,0x47,0x28,0x27,0x28,0x1a,0x28,0x27,0x85,
0x25,0x17,0x28,0x2a,0x25,0x24,0x23,0x20,0x44,0x24,0x23,0x34,0x15,0x28,0x27,0x85,
0x25,0x17,0x28,0x18,0x1a,0x25,0x24,0x23,0x20,0x34,0x17,0x25,0x25,0x33,0x10,0x24,0x23,0x80
};
}
这就是一个完整的windows程序了,和C语言差不多的。运行后没有界面,只能用任务管理器结束进程啦。它通过声卡播放MIDI音乐,MIDI有128种乐器,这个程序依次用各种乐器播放《敖包相会》的曲子。、、、正好过年那几天,处理编译器的参数传递部分,因为调用自己的函数用EBX寄存器做基址传递形参,而调用DLL函数要用堆栈传递形参,好头疼啊,。。还有一个大晚上,外面爆竹声声,俺还拿着《敖包相会》的谱子,对着一堆数字在计算器上算呀算。。真纠结呀~~ 不过后来终于完成的那一刻,听着电脑声卡播放出优美的旋律,呵呵,那种心情,。。。特别好~
还有一个重量级测试程序--俄罗斯方块,这个比较麻烦了,有windous窗口类,回调函数,消息机制等。编译生成的可执行文件的位置和单片机的一样,比如在某个文件夹建立一个单片机的uC程序,编译后就会在那个文件夹下产生一个HEX文件(没有任何别的中间文件,干净利落~,呵呵),对于windows的uC程序,编译后直接产生一个exe文件,然后双击即可运行。为了方便调试程序,我在编译器的工具栏增加了两个按钮,分别是“编译并运行”和“运行”,这样只需点击一下,保存、编译、运行自动完成,看上去挺时尚的,呵~
游戏运行效果下图这样:
如果各位大侠对这感兴趣,可以点击博客首页myrobot.21ic.org的软件列表找到下载地址,包括编译器源代码、可执行文件,还有一个测试程序集,解压后包括MCS51、AVR、SPCE061A和最近支持的PC80X86的好多测试程序,其实很多程序包括电路图,PCB板等,已经是一个小的电子产品了。上面的俄罗斯方块和播音乐的程序及exe文件都在PC80X86文件夹中。