首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

各位帮小弟我看看可能是哪里出有关问题了,小弟我快郁闷死了

2012-01-19 
各位大虾帮我看看可能是哪里出问题了,我快郁闷死了用32个LED(第三方控件),LED的属性value1时LED亮,0时暗

各位大虾帮我看看可能是哪里出问题了,我快郁闷死了
用32个LED(第三方控件),LED的属性value=1时LED亮,=0时暗,我想做出某几个LED闪一闪然后全亮的效果,编了如下程序:
Option   Explicit

Dim   tempVal   As   Long
Dim   i   As   Integer
Dim   times   As   Integer
Const   m_chCount   As   Long   =   32   '通道数

Private   Sub   Form_Load()
tempVal   =   &H7FFFFFFF   '8个十六进制等于32个二进制,表示32个LED的亮暗情况
times   =   0
End   Sub

Private   Sub   Timer1_Timer()
        If   times   =   0   Then
                For   i   =   0   To   m_chCount   -   1
                        Led1(i).AllValue   =   tempVal
                Next   i
        ElseIf   times   =   1   Then
                For   i   =   0   To   m_chCount   -   1
                        Led1(i).AllValue   =   &H0
                Next   i
        Else
                For   i   =   0   To   m_chCount   -   1
                        Led1(i).AllValue   =   tempVal
                Next   i
        End   If
        times   =   times   +   1
End   Sub


tempval的值小于等于&H7FFFFFFF时程序可以正常运行,大于&H7FFFFFFF时LED全暗,无变化无效果。似乎是不能控制INDEX值最大的那个LED,郁闷!可能是哪里出问题了?

而且按我这个程序的编法不能让LED一直保持闪烁的,如果要它们一直保持闪烁该怎么编?

如果要它们先依次亮再闪烁又该怎么编?

我头大了,都是老师给我出的难题   -_-#

[解决办法]
Dim tempVal As Long的问题,&H7FFFFFFF已经是最大值了
[解决办法]
自己改控件源码
[解决办法]
vb long型取值范围:
正整数:x07FFFFFFF--0 :2147483647--0
负整数:x0FFFFFFFF--80000000 : -1--2147483648
[解决办法]
分析问题
1.你的最大值也就是所有灯全亮的tempval =&H7FFFFFFF,你把它转化成二进制看了么,是一个31位都为1的二进制数,每一位代表一盏灯的话你有32盏灯阿。所以自然就出现溢出了。

你的第三方控件allvalue这个属性以外,没有别的属性,单单设置这一盏灯么。从代码看来你得allvalue属性其实是一个整体的控制,也就是说已经把32个led编成组了

你可以解决的方法就是
1.在硬件连接部分,每16个分成一组然后进行控制。二就是用value来代替allvalue

还有你在亮与灭控制中我们来做个例子,index=2的那盏灯(我用二进制来描述)
led(2).allvalue=xx1.... '亮
led(2).allvalue=xx0.... '灭

而这个二进制的转换,在16进制的转换中是如何变化的,你要多考虑一下。

这个题目你要多想想二进制到16进制的转化
[解决办法]
在例子里面你设置断点,主要看第0个和第31个看那个时候tempStr的值。

只要你知道了那两个状态下的tempstr值,就好办了

别着急,都有例子了,怎么可能做不出来
[解决办法]
tempVal = IIf(tempVal < 0, tempVal + 65536, tempVal)
为什么要有这句? 你的是32位长整形 +65536 也不见得变正数

热点排行