各位大虾帮我看看可能是哪里出问题了,我快郁闷死了
用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 也不见得变正数