以文本方式查看主题 - <我爱电子>论坛 (http://88fff.cn/ab/dv04/index.asp) -- 动手制作的情趣 (http://88fff.cn/ab/dv04/list.asp?boardid=5) ---- [实例]用ST08系统做18路LED彩灯程序控制 (http://88fff.cn/ab/dv04/dispbbs.asp?boardid=5&id=131) |
-- 作者:plc388 -- 发布时间:2008/12/23 17:37:23 -- [实例]用ST08系统做18路LED彩灯程序控制 高工程师接到一项LED彩灯亮化控制项目.时间很紧.第二天就要上墙按装.
工程要求如下:
1. 工程项目中有6个灯组.每个灯组中各有红.绿.蓝.三路LED灯串. 总计是:6*3=18 路
2.亮化的程序流程: (下面我们用0表示该组的灯亮,用1表示该组的灯灭) 红绿蓝 红绿蓝 红绿蓝 红绿蓝 红绿蓝 红绿蓝 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 (路)
状态1: 0 1 1 0 0 1 1 0 1 1 0 0 1 1 0 0 1 0
2: 持续亮1秒
3. 0 0 1 1 0 1 1 0 0 1 1 0 0 1 0 0 1 1
4. 持续亮1秒
5. ...(中间程序略)
.....
12. 0 1 0 0 1 1 0 0 1 1 0 1 1 0 0 1 1 0
13. 持续亮1秒
14. 程序重新开始.无限循环 [此贴子已经被作者于2008-12-23 23:45:53编辑过]
|
-- 作者:plc388 -- 发布时间:2008/12/23 18:04:20 -- 按上面的要求:我们选用了 ST08可编程控制器成品电路板
这是用了有32个对外接口的电路板. 我们只要用上18个输出口.这是足够了. 这电路板上带有全部接口的外接插脚.连接外接电路是非常方便的. 另外此板可直接使用ST-0806系统软件 自带<数字简码>指令编程.用它是很方便的.
[此贴子已经被作者于2010-12-23 23:12:46编辑过]
|
-- 作者:plc388 -- 发布时间:2008/12/23 22:37:21 -- 程序编程方法和技巧说明:
1. 这个程序要求总计控制 18个输出口. 使用ST-0806系统软件 指令表 中的组合输出指令56N 57N 58N 是比较好的. 只要用2个数码就能控制8个输出口的输出状态
我们把这18个要控制的口分成3组. 每一组用6个输出口. 由于56N 57N 58N每次使用时.控制的都是8位.那么我们在使用时主要用后面的6位. 前2位让它仍保持原高电平设为1
2. 关于持续亮1秒,在指令表中有现成的延时一秒的指令 用一条76就可以了.
3.由于这个程序要求,周而复始循环运行, 那么只要在程序运行的最后.用上 指令00 让程序接着重新开始就可以了.
实际编好的程序如下:
地址: 00 01 02 03 04 05 06 07 08 09 指令: 56 217 57 236 58 242 76 56 205 57 地址: 10 11 12 13 14 15 16 17 18 19 指令: 230 58 211 76 56 236 57 242 58 217 地址: 20 21 22 23 24 25 26 27 28 29 指令: 76 56 230 57 211 58 205 76 56 242 地址: 30 31 32 33 34 35 36 37 38 39 指令: 57 217 58 236 76 56 211 57 205 58 地址: 40 41 42 43 44 45 46 47 48 49 指令: 230 76 00 ** ** ** ** ** ** **
这程序.只要数入42个两位数的<数字简码>程序就设计完成了.
[此贴子已经被作者于2008-12-23 23:51:24编辑过]
|
-- 作者:plc388 -- 发布时间:2008/12/23 23:44:54 -- 关于56N 57N 58N (59N)指令中参数N的计算.
这里的56表示是控制单片机的P0接口的; 57 58 59 分别表示控制单片机的P1 P2 P3接口的.
这里的指令参数N 它是个十进制数.数值范围 00-255 共计256个数.
这个十进制参数正好能代表8位输出口的全部数出状态.
如十进制的00 用二进制数表示 就是 00000000 这正好能表示这8个输出口的输出状态 LED 发光管全亮 如十进制的01 用二进制数表示 就是 00000001 只有末位的LED 发光管不亮 如十进制的03 用二进制数表示 就是 00000011 有末位的2位LED 发光管不亮 ......
在实际应用中,我们常会先确定输出状态 ,得到的是二进制数,然后要将它换算出十进制参数. 如 01010010 这样的二进制表示接口状态的数怎样才能转换成十进制的程序参数呢!
有一个简单的方法, 我们可先把二进制数的各位的权标出.
如上面这个二进制数 0 1 0 1 0 0 1 0 它们的各位代表的权 128 64 32 16 8 4 2 1
那么只要把上面那个二进制数是1状态的权加在一起.就是它的十进制参数了. 这个示例就这样加 64+16+2=82
这样在使用56N 57N 58N (59N)指令中只要用82替代那个N, 那么相应的输出口的状态就是 0 1 0 1 0 0 1 0 (有5路输出是低电平.LED灯亮)
[此贴子已经被作者于2008-12-24 9:38:12编辑过]
|