单片机什么时候会有中文的文字编程啊?

2020-02-05 09:29发布

单片机什么时候会有中文的文字编程啊?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
45条回答
小燕子神飞
2020-02-10 11:31
我设计了一个中文编程的语言,编译器基本完工了,下面是一段示例代码。如果真有人对这个感兴趣,我可以再详细介绍下。


**************************************************************************
电子琴程序


//注意,这个程序运行后没有界面,播放一遍音乐之后自动结束
ici cpu = ici cputype pc80x86 ici Wind 开始,

//加载windows内核类
import syslib.windows.kernel32,
//加载MIDI接口类
import syslib.windows_pack.midi,

link vdata code {} = ici Cloud code,

//=======================================
public void 开始()
{
        //打开MIDI设备并设置当前音 {MOD}为 "风铃" 10为风铃
        midi open[],
        midi set_timbre[ 0, 10 ],
       
        //用当前音 {MOD}播放一遍曲子,曲子一共有64个音符
        反复执行 初始 i(N8) = 0,每次 i + 1,直到 i == 65,
                //解码器
                节拍(N16) = 乐曲 i >> 4,
                节拍 * 200,
                音阶(N8) = 62 + 音符表(乐曲 i & 0x0f),
               
                //播放器
                midi play[ 0, 音阶, 90 ],
                kernel32 Sleep[ 节拍 ],
                midi stop[ 0, 音阶 ],
                ...
       
        //播放完成,退出程序
        kernel32 ExitProcess[ 0 ],
}
//各个音的频率, 3-4 和 7-1 之间差一个半音,其他的相差一个全音
音符表([code N8*?]) =
[
//        1, 2, 3, 4, 5, 6, 7,    1, 2, 3, 4, 5, 6, 7,    1, 2, 3, 4, 5, 6, 7
        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 N8*?]) =
[
        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,0x2a,0x18,0x17,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,0x23,0x13,0x10,0x24,0x23,0x80
],


******************************************************************
这是AVR流水灯的测试程序



ACI cpu = ACI cputype mega8 ACI Wind 启动,

导入 组件库 avr mega8 chip,
link 组件 芯片 {} = chip,

public void 启动()
{
        芯片 DDRB = 0xff,
        芯片 DDRD = 0xff,
       
        反复执行
                芯片 PORTB = 0xff,
                芯片 PORTD = 0xff,
                反复执行 8 次,
                        芯片 PORTB >> 1,
                        延时100MS[],
                        ...
                反复执行 8 次,
                        芯片 PORTD >> 1,
                        延时100MS[],
                        ...
                ...
}
void 延时100MS()
{
        反复执行 100 次,
                反复执行 100 次,
                ...
        ...
}


********************************************************************
这是一个秒表程序



ACI cpu = ACI cputype mega16 ACI Wind 引擎 启动,

导入 组件库 avr mega16 chip,
引擎 显示屏 = 显示屏,
引擎 键盘 = 键盘,
键盘 芯片 = chip,
显示屏 芯片 = chip,

//==========================================
组件 引擎
{
        public link 组件 显示屏 {}
        public link 组件 键盘 {}
       
        public void 启动()
        {
                键盘 初始化[],
                显示屏 初始化[],
                显示屏 清零[],
               
                开始键之前状态(N1) = 1,
                复位键之前状态(N1) = 1,
                暂停(T) = true,
               
                反复执行
                        //判断是否刚刚按下清零键
                        如果 键盘 复位键 == 0 && 复位键之前状态 == 1,
                                显示屏 清零[],
                                暂停 = true.
                       
                        //判断是否刚刚按下开始/暂停键
                        如果 键盘 开始键 == 0 && 开始键之前状态 == 1, !暂停.
                       
                        开始键之前状态 = 键盘 开始键,
                        复位键之前状态 = 键盘 复位键,
                       
                        如果 !暂停, 显示屏 时间累加[].
                        显示屏 显示[],
                        ...
        }
}
//==========================================
组件 键盘
{
        public link 组件 芯片 {}
       
        public void 初始化()
        {
                开始键_DDR = 0,
                复位键_DDR = 0,
        }
       
        public link 开始键(N1) = 芯片 PIND 7,
        public link 开始键_DDR(N1) = 芯片 DDRD 7,
       
        public link 复位键(N1) = 芯片 PIND 6,
        public link 复位键_DDR(N1) = 芯片 DDRD 6,
}
//==========================================
组件 显示屏
{
        public link 组件 芯片 {}
       
        link 虚拟类型 code {} = ACI Cloud code,
       
        public void 初始化()
        {
                port_dir = 0xff,
                select_dir = 0xff,
        }
       
        public void 清零()
        {
                data0 = 0,
                data1 = 0,
                data2 = 0,
                data3 = 0,
        }
        //改变显示数据,加1,满10进1
        public void 时间累加()
        {
                data0 + 1,
                如果 data0 != 10, 返回.
                data0 = 0,
                data1 + 1,
                如果 data1 != 10, 返回.
                data1 = 0,
                data2 + 1,
                如果 data2 != 10, 返回.
                data2 = 0,
                data3 + 1,
                如果 data3 != 10, 返回.
                data3 = 0,
        }
        public void 显示()
        {
                //显示小数位的数据
                select = 0b0000_0000,
                port = seg data0,
                select = 0b0000_1000,
                延时5ms[],
                //显示个位数据,并消隐十位和百位的零
                select = 0b0000_0000,
                port = seg data1 & 0b0111_1111,
                select = 0b0000_0100,
                延时5ms[],
                如果 data2 == 0 && data3 == 0,
                        延时5ms[],
                        延时5ms[],
                        select = 0b0000_0000,
                        返回.
               
                //显示十位数据,并消隐百位的零
                select = 0b0000_0000,
                port = seg data2,
                select = 0b0000_0010,
                延时5ms[],
                如果 data3 == 0,
                        延时5ms[],
                        select = 0b0000_0000,
                        返回.
               
                //显示百位数据
                select = 0b0000_0000,
                port = seg data3,
                select = 0b0000_0001,
                延时5ms[],
                select = 0b0000_0000,
        }
        void 延时5ms()
        {
                反复执行 10 次,
                        反复执行 100 次,
                        ...
                ...
        }
       
        //全局变量定义
        data0(N8),
        data1(N8),
        data2(N8),
        data3(N8),
       
        //数码管字形表
        seg([code N8*10]) =
        [
                0b1100_0000, 0b1111_1001, 0b1010_0100, 0b1011_0000, 0b1001_1001,//0,1,2,3,4
                0b1001_0010, 0b1000_0010, 0b1111_1000, 0b1000_0000, 0b1001_0000 //5,6,7,8,9
        ],
        //数据端口
        link port(N8) = 芯片 PORTA,
        link port_dir(N8) = 芯片 DDRA,
       
        link select(N8) = 芯片 PORTB,
        link select_dir(N8) = 芯片 DDRB,
}






一周热门 更多>