范例:使用VB编写的上机位的串口控制
我的串口搞定与大家一起分享快乐.上位机是用VB编的.我想告诉大家是:其实串口通信也不是什么很难的事,只要用心去搞一定能作好的.
下面是二极管没有亮的软件介面.
http://cache.amobbs.com/bbs_upload782111/files_1/armok0130282.gif
这是二极管亮了的软件介面:
http://cache.amobbs.com/bbs_upload782111/files_1/armok0130283.gif
这是串口没有打开的软件介面:
http://cache.amobbs.com/bbs_upload782111/files_1/armok0130284.gif
下面是电路原理图:
点击此处打开armok0130782.pdf
下面是下载到mega 8 的C程序:
点击此处下载armok0130783.rar
下面是VB程序:(你的电脑要装VB才能运行,是我编的VB原程序,那位大哥如果会打包帮忙打一下包.)
点击此处下载armok0130784.rar
下面是下载到mega 8 的hex文件.
点击此处下载armok0130785.rar
VB 程序已经打包,把已经打包的程序上传:
点击此处下载armok0130822.rar 呵呵,如果你想更多人感受你的快乐,可以写成应用范例的形式,整理到网站中,供大家学习研究啊。 我没的摄像机,不能把实物拍出来,所以.......
http://www.527dz.com/AVR%20lab/exp7_p2.htm
这个网站有一个范例,"AVR单片机实验室版主"是阿莫
你那个网站已经有了一个串口的范例,我这个就算了吧!
我把这个贴出来一来是自己比较高兴,二来是想让大家知道串口通信其实也不是很难. 恭喜楼主...
眼过千遍不如手过一遍...自己付出的到底感觉不一样,不管别人说什么... 呵呵,我当然知道 527dz 有这个例子。 这个例子我们的网站也整理了。
不过如果有几个类似的例子我们也是欢迎的。这样即使一个例子有问题,起码也会有候补啊 :)
不过整理成范例需要时间与热心,这是不能勉强的事。 谢谢hotpower 上传到楼主位了。 因为是刚学VB,有可能会有意想不到的问题,如果你发现有什么问题记得告诉我.我的Email;dengchongguang@avl.com.cn 真牛! 向你学习! 提供一个VB的串口类:
UART.cls
-------------------------
Option Explicit
'-------------------------------------------------------------------------------'
' 类说明:该类作为串口通讯属性结构体,在类间传递数据 '
'-------------------------------------------------------------------------------'
'-------------------------------'
' 通讯属性结构体 '
'-------------------------------'
Public ComUART As Object '串口对象 '
Public DelayTimer As Object '定时器对象'
Public ComTransferMaxWaitTime As Integer '最大等待时间'
Public WaitTime As Integer '延时计数器'
Public UARTPortChoose As Integer '串口选择 '
Public UARTSetting As String '串口设定 '
UARTPort.cls
-----------------------
Option Explicit
'-------------------------------------------------------------------------------'
' 类说明:该类提供了串口通讯的基本函数 '
' 版本:v1.0 '
' 作者:傻孩子 '
' 日期:2005年7月12日 '
' '
'---------------------------------------------------------------------------'
' [功能说明] '
' 1、允许设定串口的基本通讯状态 '
' 2、提供了基于单字节模式下的基本收发字节函数 '
' '
'-------------------------------------------------------------------------------'
Private MachineUART As UART
'-------------------------------------------------------------------------------'
'函数说明:串口连接函数 '
'说明: 根据设定,连接相应的串口 '
'输入: 串口对象、定时器对象 串口选择、串口设定字符串 '
'输出: 打开串口的操作结果(Boolean) '
'-------------------------------------------------------------------------------'
Public Function StartConnect(TransferUART As UART) As Boolean
On Error GoTo Do_With_It_In_StartConnect:
Set MachineUART = TransferUART
With MachineUART
.ComUART = .ComUART
.DelayTimer = .ComTransferMaxWaitTime
.ComUART.CommPort = .UARTPortChoose
.ComUART.Settings = .UARTSetting
' 告诉控件读入整个缓冲区。
.ComUART.InputLen = 1
.ComUART.InputMode = comInputModeBinary
' 打开端口。
.ComUART.PortOpen = True
StartConnect = True
End With
Exit Function
Do_With_It_In_StartConnect:
'----------错误处理程序----------
StartConnect = False
Err.Clear
End Function
'-------------------------------------------------------------------------------'
'函数说明:串口单字节发送函数 '
'说明: 发送指定的字节,并且等待指定的回应 '
'输入: 需要发送的字节等待回应的字符(给/0时表示不等待回应) '
'输出: 发送是否成功(是否受到了指定的回应) '
'-------------------------------------------------------------------------------'
Public Function SendBytes(Datas As Byte, WaitSymble As Byte) As Boolean
On Error GoTo Do_With_It_In_SendBytes
Dim Temp() As Byte
Dim TempData() As Byte
Dim a As Integer
Dim Flag As Boolean
ReDim TempData(0 To 0)
ReDim Temp(0 To 0)
With MachineUART
TempData(0) = Datas
.ComUART.Output = TempData()
.WaitTime = .ComTransferMaxWaitTime
.DelayTimer.Enabled = True
If WaitSymble = 0 Then
Flag = True
Else
Flag = False
End If
re:
If .ComUART.InBufferCount = 0 Then
DoEvents
GoTo Judge
End If
Temp = .ComUART.Input
DoEvents
For a = 0 To 0
If WaitSymble = 0 Then
Flag = True
End If
If Temp(a) = WaitSymble Then
Flag = True
End If
Next a
Judge:
If Flag = False And .WaitTime > 0 Then
GoTo re:
End If
If Flag = False Then
SendBytes = False
Else
SendBytes = True
End If
.DelayTimer.Enabled = False
SendBytes = True
End With
Exit Function
Do_With_It_In_SendBytes:
'-----------------错误处理程序-------------------'
SendBytes = False
Err.Clear
End Function
'-------------------------------------------------------------------------------'
'函数说明:串口单字节接收函数 '
'说明: 等待字节,并且根据要求做出回应 '
'输入: 需要等待的内容 回应的内容 工作模式 '
'输出: 接收是否成功 '
'-------------------------------------------------------------------------------'
Public Function ReceiveBytes(Datas As Byte, SendSymble As Byte, Models) As Boolean
'-----------------------------------'
'Models 说明 '
'-----------------------------------'
' 0 等待一个值并立即反 '
' 回SendSymble的信号 '
' 受到的数据放在Dates'
' 1 等待一个特定的值返 '
' 回SendSymble的信号 '
' 2 等待一个值,放在 '
' Dates里面,不返回'
' 3 等待一个特定的值, '
' 不返回 '
' 4 收到什么返回什么 '
'-----------------------------------'
On Error GoTo Do_With_It_In_ReceiveBytes
Dim Temp() As Byte
Dim TempData() As Byte
Dim Flag As Boolean
ReDim Temp(0 To 0)
ReDim TempData(0 To 0)
With MachineUART
.WaitTime = 5
TempData(0) = SendSymble
.DelayTimer.Enabled = True
Select Case Models
Case Is = 0
'等待一个值,立即返回SendSymble信号,并将数据放到Dates变量里
Flag = False
Do
DoEvents
If .ComUART.InBufferCount > 0 Then
Temp = .ComUART.Input
Datas = Temp(0)
.ComUART.Output = TempData
Flag = True
End If
Loop While Flag = False And .WaitTime > 0
If Flag = False Then
ReceiveBytes = False
Else
ReceiveBytes = True
End If
.DelayTimer.Enabled = False
Exit Function
Case Is = 1
'等待一个特定的值,立即返回SendSymble信号
Flag = False
Do
DoEvents
If .ComUART.InBufferCount > 0 Then
Temp = .ComUART.Input
If Datas = Temp(0) Then
.ComUART.Output = TempData
Flag = True
End If
End If
Loop While Flag = False And .WaitTime > 0
If Flag = False Then
ReceiveBytes = False
Else
ReceiveBytes = True
End If
.DelayTimer.Enabled = False
Exit Function
Case Is = 2
'等待一个值,将其放入Datas ,不返回
Flag = False
Do
DoEvents
If .ComUART.InBufferCount > 0 Then
Temp = .ComUART.Input
Datas = Temp(0)
Flag = True
End If
Loop While Flag = False And .WaitTime > 0
If Flag = False Then
ReceiveBytes = False
Else
ReceiveBytes = True
End If
.DelayTimer.Enabled = False
Exit Function
Case Is = 3
'等待一个特定的值,不返回
Flag = False
Do
DoEvents
If .ComUART.InBufferCount > 0 Then
Temp = .ComUART.Input
If Datas = Temp(0) Then
Flag = True
End If
End If
Loop While Flag = False And .WaitTime > 0
If Flag = False Then
ReceiveBytes = False
Else
ReceiveBytes = True
End If
.DelayTimer.Enabled = False
Exit Function
Case Is = 4
'收到什么返回什么
Flag = False
Do
DoEvents
If .ComUART.InBufferCount > 0 Then
Temp = .ComUART.Input
Datas = Temp(0)
.ComUART.Output = Temp
Flag = True
End If
Loop While Flag = False And .WaitTime > 0
If Flag = False Then
ReceiveBytes = False
Else
ReceiveBytes = True
End If
.DelayTimer.Enabled = False
Exit Function
End Select
End With
Do_With_It_In_ReceiveBytes:
'-------------错误处理程序----------------'
Err.Clear
ReceiveBytes = False
End Function
-----此内容被Gorgon Meducer于2005-07-16,08:35:30编辑过 该类的是用方法:
1、在窗体中添加两个控件:MSComm控件和Timer控件。
2、在模块中声明两个类。分别用于使用如上的UARTPort类,其中UART类是用来做传输数据的结构体的。
例如:
Public MachineTransferWork As UARTPort
Public MachineInfo As UART
3、在Timer控件中填写相应的代码作为延时操作的依据:
例如:
Private Sub Timer_TransferDelay_Timer()
With MachineTransferWork
If .WaitTime > 0 Then
.WaitTime = .WaitTime - 1
Else
Timer_TransferDelay.Enabled = False
End If
End With
End Sub
4、使用的前,先初始化一下各个类。
例如:
Set MachineTransferWork = New UARTPort
Set MachineInfo = New UART
5、描述一下要打开的串口的信息,填写UART类的各个内容。其中串口设定的内容请参照MSComm Setting属性的设置方法。
通过Set方法为对象变量赋值。也就是把串口控件,定时器控件赋给相应的变量。
6、使用
1)打开一个串口:
MachineTransferWork.StartConnect(MachineInfo) '如果成功,函数返回True
2)发送一个字节,并且等待下位机返回内容作为校验。
MachineTransferWork.SendBytes(&HAC,&HAC) '发送AC,等待AC ,成功返回True
3)发送一个字节,不要求校验
MachineTransferWork.SendBytes(&HAC,0) '发送AC,不要求校验,成功返回True
4)等待接收一个字节,收到以后返回信号
MachineTransferWork.ReceiveBytes(&HA1,&HAC,1) '等待接收A1,收到以后返回AC
(接收字节的其他模式参见函数模式说明)
……
-----此内容被Gorgon Meducer于2005-07-16,08:54:53编辑过 好。谢谢。 牛人 用串口类有什么好处? 好处就是,可以重复利用,不用每一次都写一样的代码,而其封装过了,代码的可靠性好一点……其他没有什么,只是一个个人习惯,你完全可以把这些写道模块里面去。
以下为个人观点:
VB本身具有快速开发的特点,如果我们为常用的功能模块进行打包,以后的开发就像搭积木一样简单,实现快速工程(Rapid Application Development)。 搂主:
你的电路图上max232的16引脚不接+5V吗〉???????? 点击此处打开armok0178526.pdf
如此图所示
-----此内容被liushilei1234于2005-10-16,16:14:34编辑过 请教一下楼主,我在VB里面找不到MSCOMM控件是不是板本问题,你用的是那个板本啊? TO:liushilei1234
是我搞错了,要接到5V.
to:TKD2002
要加一个控件,VB自带的:Microsoft Comm Control 6.0 请教一下:
我看到程序中OSCCAL=0Xa0;
能讲解一下怎样配制振荡器标定寄存器- OSCCAL吗?
这个寄存器我一直都不明白怎么回事 它的作用就是AVR芯片在生产的过程中内部RC振荡器的电阻阻值、电容容值会有偏差。
所以要用这个标定寄存器作补偿。
所以每一个AVR芯片的的补偿值都是不一样的。
配制振荡器标定寄存器的方法:
1.点菜单“Command”
http://cache.amobbs.com/bbs_upload782111/files_4/armok0178667.jpg
2.点下拉菜单里的“Osc Cal.Bytes”
http://cache.amobbs.com/bbs_upload782111/files_4/armok0178668.jpg
3.然后就弹出这个窗口,这个窗口会用了吧?
http://cache.amobbs.com/bbs_upload782111/files_4/armok0178669.jpg UBRRL=(fosc/16/(baud+1))%256;
UBRRH=(fosc/16/(baud+1))/256;
楼主的波特率是这么算得。
可datasheet上是
UBRR=(fosc/16/buad-1)
怎么回事????????/ 终于好了,我是按datasheet上作的,用的6m晶体,在2400是可能误差太大,不行,设成9600
就好了。 请问下位机接收的数据不用校验吗????一定能保证接收数据正确???小弟是菜鸟,不对的地方请多指教!! 顶一下 用校验当然好一点. http://cache.amobbs.com/bbs_upload782111/files_5/armok0194411.JPG
点击此处下载armok0194410.rar
我前些天也搞了一个生产线看板联网程序,我也是刚学VB ,欢迎有空交流.波特率为9600,如果你的下位机没有问题,就可以接收正常,高手不要见笑!
-----此内容被yu_jun_feng于2005-12-27,16:56:22编辑过 想问一下dengchongguang
我想做的是在VB窗口中创建一个按钮控件(PC机通过串口与单片机通信),工作要求是这样的,按下按钮控件-------单片机控制的指示灯亮;松开按钮控件-------单片机控制的指示灯灭;也就是说,比如按下按钮时,PC机不停发送01H给单片机,单片机收到01H后第一个指示灯亮,鼠标松开按钮,PC机停止发送01H,单片机没有接收到01H,指示灯灭。这样的VB程序是怎样做,并请知道的大虾告之。先谢谢了。 怎么没人回复一下,告之一下 因为你问dengchongguang当然大家就不回答了。
简单地说,使用command按钮的MouseDown事件和MouseUp事件就可实现该功能了,不过不要连续发01H,你可以改为发01H时亮灯,发02H时灭灯,大概这样:
Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
PutToMCU &H1
End Sub
Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
PutToMCU &H2
End Sub
OK? 我用VB写了一个串口多机通讯轮训的上位机程序,回头整理整理发上来 不错,我以前学VB时也做了一个简单的,不过现在不知放那里去啦,一起努力哈 谢谢这么多热心的高手大虾 求教各位高手:搂主所写的串口程序我终于调通了,也可以亮二极管,但是我把程序稍作改动,用单片机发送一个数据,在vb界面用一个文本框接收却无论如何接收不到数据,改用网站上下载的串口调试软件也接收不到数据,到底什么原因还请知道的大虾告之,谢谢了! 怎么没有人回答啊,是不是我没说清楚。具体就是我在下载到mega 8 的C程序里加了一条puts("串口演示"),在vb程序里加了一个文本框和一条text1.text=MSComm1.input语句,可运行后文本框却收不到数据,简单点说就是单片机只能接受不能发送数据,不知各位有没有人碰到过类似问题,还请帮忙解答一下。 没学过VB,拿了楼主的程序花了点时间搞了一下,弄成一个给DS1302时钟校时的程序,还可以回显单片机发回的消息。
楼上的程序改一下看看,
dim instring as string
instring=MSComm1.input
text1.text=instring 发现楼上几句似乎没什么意义,在晓奇网站看到一个接收程序,我改了一下,可以显示字符。当然首先要在以下这个子程序
Private Sub Form_Load() '初始化
里加一句
MSComm1.RThreshold = 1'设置接收一个字节产生OnComm事件
Private Sub MSComm1_OnComm()
Dim S() As Byte
Dim SS(1024) As Byte
Static N As Long
If (MSComm1.CommEvent = comEvReceive) Then
S = MSComm1.Input '只要有数据就收进来,哪怕只是一个
For i = 0 To UBound(S) '一个数据包可能产生若干个oncomm事件
Text9.Text = Text9.Text + Right(Chr(S(i)), 3)
SS(N + i) = S(i) '接收数据包缓存于SS()
N = N + UBound(S)
Next i
End If
End Sub
以下是我在晓奇网站看到的程序
原贴地址为:http://www.xiao-qi.com/netfile/Mscomm.html
MSCOMM控件是个好东西,如果您能够充分了解他,他会为您衷心的效劳。
大致看了一下下午有关讨论MSCOMM的话题,觉得有必要说说我的心得,我一般只做硬件,没有系统的学过软件,只是业余时间
学学用用,多少掌握了一点,也在此拿出来玩玩,不知有错没有,我可是以为我已经做的很好了^_^
这是一个VB通用串口事件驱动接收程序。一次性接收一个数据包,数据包可以为任意字节,保证不会丢失一个数据!
Private Sub MSComm_OnComm()
Dim S() As Byte
Dim SS(1024) As Byte
Static N As Long
Static T As Variant
If (MSComm.CommEvent = comEvReceive) Then
S = MSComm.Input '只要有数据就收进来,哪怕只是一个
If (Timer - T > 0.01) Then '间隔10MS以上就认为是一个新的包
text1="" 'text1用于搜集和显示接收(HEX格式)
N = 0
End If
T = Timer
For i = 0 To UBound(S) '一个数据包可能产生若干个oncomm事件
Text1.Text = Text1.Text & Right("0" & Hex(S(i)) & "H", 3) + " "
SS(N+i)=S(i) '接收数据包缓存于SS()
N=N+UBound(S)
Next i
End If
End Sub 原来还可以再精简,呵呵,没学过VB走了很多歪路
Private Sub MSComm1_OnComm()
Dim S() As Byte
If (MSComm1.CommEvent = comEvReceive) Then
S = MSComm1.Input '只要有数据就收进来,哪怕只是一个
Text9.Text = Text9.Text + Right(Chr(S(i)), 1)
End If
End Sub 楼上的程序也不可靠
1、SS()从来没用过,放在事件内干吗?
2、VB的 Timer 函数是不准确的,最短的时间间隔是一个系统的时钟滴答(好象是12.5ms),根本算不出一个整ms来着。
3、MSComm_OnComm事件是准同步的,设MSComm1.RThreshold = 1,当系统收到一个字符时会产生一次事件,但当进入事件后接收系统还继续工作,处理是要时间的(特别在事件中作复杂处理时),如果接收缓冲区不够大,而通讯速率足够快时有可能产生缓冲区溢出,还是要丢数据。 谢谢各位,但我仍然没有调通。我觉得应该不是vb程序的问题,因为我用其他的串口调试软件同样接收不到数据,问题应该出在c程序或者硬件方面,我把我的c程序传上来,还请各位帮我看看。另外我查看了一下max232的数据手册它的接口电路电容用的是有极性的电解电容,而示例中电路用的是没有极性的普通电容,会不会是这个原因,因为手头没有合适的电解电容,我也没有试。
#include <iom8v.h>
#define fosc 8000000 //晶振8MHZ
#define baud 19200 //波特率
/* 端口初始化函数 */
void port_init(void)
{
PORTC &= 0xF0;
DDRC|= 0x0F;
}
/* 字符输出函数 */
void putchar(unsigned char c)
{
while (!(UCSRA&(1<<UDRE)));
UDR=c;
}
/* 字符输入函数 */
unsigned char getchar(void)
{
while(!(UCSRA& (1<<RXC)));
return UDR;
}
/* 字符串输出函数 */
int puts(char *s)
{
while (*s)
{
putchar(*s);
s++;
}
putchar(0x0a);//回车换行
putchar(0x0d);
return 1;
}
/* 不含回车换行的字符串输出函数 */
void putstr(char *s)
{
while (*s)
{
putchar(*s);
s++;
}
}
/* UART初始化 */
void uart_init(void)
{
OSCCAL=0Xa0;
UCSRB=(1<<RXEN)|(1<<TXEN);//允许发送和接收
UBRRL=(fosc/16/(baud+1))%256;
UBRRH=(fosc/16/(baud+1))/256;
UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
}
/* RS232通信main函数 */
void main(void)
{
unsigned char i;
port_init();
uart_init();
while(1)
{
i=getchar();
switch (i)
{
case 0x31: PORTC |= 0x01;
puts("第1个二极管亮");
break;//第1个二极管亮
case 0x32: PORTC &= 0xfe;
puts("第1个二极管灭");
break;//第1个二极管灭
case 0x33: PORTC |= 0x02;
puts("第2个二极管亮");
break;//第2个二极管亮
case 0x34: PORTC &= 0xfd;
puts("第2个二极管灭");
break;//第2个二极管灭
default: break;
}
}
} 还有,下图是我的熔丝位配置,不知是不是这里的问题?
http://cache.amobbs.com/bbs_upload782111/files_5/armok01106328.jpg 为什么非要发中文呢?中文没经过转换看不出来的,但是你也应该可以看到其中的一个数字。max232我通常都用0.1u的瓷片电容,没关系的,怀疑的话可以将连到单片机的收发端接起来,用串口调试助手测试。 我把电路重新焊了一遍,终于可以调通了,看来还是我不小心焊接出了问题哈,谢谢各位了! 楼主正是牛!我也想用VB编串口通讯!我先看看吧,不会了还要向你请教哦! VB中的MSComm控件怎么加进来啊 工程-部件里怎么没有的啊 ? 我现在学VC,要是有VC的例子就好了,不过还是谢谢以上各位!
//////////////////////////////////////////////////////////////
去
http://www.gjwtech.com/
看看,我也是在那儿起步的! 好啊,我原来使用MSComm_OnComm事件,数据一多超过8或9个以上就老丢。回头试试楼主的程序看看。 #include <iom64v.h>
#define UDRE 5
#define RXC7
#define RXEN 4
#define TXEN3
/* 端口初始化函数 */
void port_init(void)
{
PORTG= 0xFF;
DDRG= 0xff;
}
/* 字符输出函数 */
void putchar(unsigned char c)
{
while (!(UCSR1A&(1<<UDRE)));
UDR1=c;
}
/* 字符输入函数 */
unsigned char getchar(void)
{
while(!(UCSR1A& (1<<RXC)));
return UDR1;
}
/* 字符串输出函数 */
int puts(char *s)
{
while (*s)
{
putchar(*s);
s++;
}
putchar(0x0a);//回车换行
putchar(0x0d);
return 1;
}
/* 不含回车换行的字符串输出函数 */
void putstr(char *s)
{
while (*s)
{
putchar(*s);
s++;
}
}
void delay_1ms(void) //1ms延时函数
{
unsigned int i;
for (i=0;i<1140;i++);
}
void delay_nms(unsigned int n) //N ms延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1ms();
}
/* UART初始化 */
void uart_init(void)
{
//LI();
// 0X00; // I/O数据寄存器
UCSR1A = (1<<UDRE); // 数据寄存器空标志
UCSR1B = (1<<RXEN)|(1<<TXEN);//|(1<<TXCIE); // RXEN1,TXEN1使能
UCSR1C = 0X06; //8 位数据传送
UBRR1H = 0x00;
UBRR1L = 0x51;//8M频率波特率:9600
// OSCCAL=0Xa0;
//UCSR1B=(1<<RXEN1)|(1<<TXEN1);//允许发送和接收
//UBRR1L=(fosc/16/(baud+1))%256;
//UBRR1H=(fosc/16/(baud+1))/256;
//UCSR1C=(1<<UCSZ11)|(1<<UCSZ10);//8位数据+1位STOP位
}
/* RS232通信main函数 */
void main(void)
{
unsigned char i;
port_init();
uart_init();
while(1)
{
//PORTG= 0xf0;
//delay_nms(1000);
//PORTG= 0xff;
//delay_nms(1000);
i=getchar();
switch (i)
{
case 0X31: PORTG &= 0xfe; break;//第1个二极管亮
case 0X32: PORTG |= 0x01; break;//第1个二极管灭
//case 0x33: PORTG |= 0x02; break;//第2个二极管亮
// case 0x34: PORTG &= 0xfd; break;//第2个二极管灭
//case 0x35: PORTG |= 0x04; break;//第3个二极管亮
// case 0x36: PORTG &= 0xfb; break;//第3个二极管灭
// case 0x37: PORTG |= 0x08; break;//第4个二极管亮
// case 0x38: PORTG &= 0xf7; break;//第4个二极管灭
default: break;
}
}
}
没调通 哪的问题? hotpower 菜农是个好老师啊……
懂得学技术的真谛
看一百遍,不如一练 这个帖子怎么已经沉了这么长时间了,顶起来! 顶 顶下 大家好!我这里有法拉电容,免费发放,感兴趣的朋友电邮:5000322@163.com 学习中,多谢各位 软件界面有点难看 在此我看到人性的光辉,无私奉献上下求索的精神
向各位学习,向各位致敬 东西很不错。继续学习!! 楼主是好人好贴. 学习了,谢谢楼主 顶一下 学习 能不能来个51版的啊……手上没avr的片子,也没学过avr……………… 留个记号,顶! mark 学习了 GOOD mark,3q mark 万能论坛啊vb也有例子 用串口调试程序很方便 mark mark vb学习中 跟我刚做的有点像,我改用usb转串口的! mark Mark MARK 向各位大侠学习 mark 用EXCEL 的vba也可以做串口通信,我做了一个例子,找一下传上来大家看看。挺好玩的,excel直接读取操作串口。哈哈。 mark 回复【87楼】lovefei
-----------------------------------------------------------------------
很棒!正在研究VB串口与AVR通信。学习了! yu_jun_feng 发表于 2005-12-27 16:50 static/image/common/back.gif
点击此处下载armok0194410.rar
我前些天也搞了一个生产线看板联网程序,我也是刚学VB ,欢迎有空交流.波特 ...
您好,我有个看板正好跟你这个差不多,请问源码能提供吗,谢谢!或是根据我上传的通讯协议修改一份也可,跪求!! vb好搞还是vc好搞?我的老师说vc不难,我的学长都搞vb来编上位机······ {:victory:}{:handshake:}{:handshake:}
页:
[1]