专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
单片机什么时候会有中文的文字编程啊?
2020-02-05 09:29
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
5643
45
45
单片机什么时候会有中文的文字编程啊?
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
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,
}
加载中...
查看其它45个回答
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
**************************************************************************
电子琴程序
//注意,这个程序运行后没有界面,播放一遍音乐之后自动结束
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,
}
一周热门 更多>