VB6.0自动红绿灯设计及代码
- 格式:docx
- 大小:350.91 KB
- 文档页数:2
VB的诞生VB的出现可以说是Microsoft Windows的日渐成熟的必然产物。
Microsoft Windows为程序员和最终用户提供了一个共同的人机界面。
对用户,Windows提供了一个图形鼠标的操作环境,该环境对所有的应用程序都一样;对于程序员,Windows提供了一组预定义工具----称之为Microsoft Windows 的软件开发工具箱(SDK),该工具能使程序员建立一个与Windows界面相同的应用程序,而且,程序员不必关心最终用户的硬件配置情况。
在这一开发环境中,程序员唯一困难的是Microsoft SDK提供了六百多个函数和与其一致的事件驱动(event-driven)编程技术。
两种新方法的交叉使众多的程序员重新陷入困境,程序员不仅要掌握程序驱动编程技术和六百多个函数的功能,而且还得用C语言描述这些问题。
因此一般情况下,程序员首先要掌握C程序设计技术,而后再开始学习SDK。
这样的条件下就要求在Microsoft多任务环境下出现一种操作方便,使用简单的新工具----Visual Basic由此诞生。
何为可视英文Visual的意思是“视觉的”,“可视的Baisc”这个名字可能抽象了点,但实际上它却是最直观的编程方法,之所以叫做“可视”,你只要看到VB的界面就会明白,实际上你无需编程,就可以完成许多步骤。
在VB中引入了控件的概念,在Windows中控件的身影无处不在,各种各样的按钮、文本框、无线钮,都是控件的种类,VB把这些控件模式化,并且每个控件都有若干属性用来控制控件的外观,工作方法。
这样你就可以象在画板上一样,随意点几下鼠标,一个按钮就完成了,这些在以前的编程语言下是要经过相当复杂的工作的。
我的希望:我在学习VB的过程中也曾遇到了许多困难,而且用的参考书大都来自译文,毕竟美国人和中国人的表达方式有所不同。
这也造成了理解上的困难,所以我想为什么我不能写一个给中国人看到VB教程呢,于是我这么做了。
im ErrCde As Long ' Error code 保存函数调用错误时的代码Dim szErrMsg As String * 80 ' Error string 长度为80,用于保存错误信息Dim DriverHandle As Long '用于保存设备句柄Dim DioReadPortByte As PT_DioReadPortByte '模拟通道配置时需要的结构体变量,结构中的参数可以查手册获得Dim DioWritePortByte As PT_DioWritePortByte '模拟量输入时需要的结构体变量,结构中的参数可以查手册获得Dim flag As LongDim output As LongDim output1 As LongDim output2 As LongPrivate Sub Command1_Click()Timer2.Enabled = TrueEnd SubPrivate Sub Command2_Click()Timer1.Enabled = FalseTimer2.Enabled = FalseDioWritePortByte.Port = 0DioWritePortByte.Mask = 255DioWritePortByte.state = 255ErrCde = DRV_DioWritePortByte(DriverHandle, DioWritePortByte) '调用函数完成设置EndEndEnd SubPrivate Sub Timer1_Timer()ErrCde = DRV_DeviceOpen(1, DriverHandle) ' Make sure device number = 0,调用函数打开设备,函数参数含义见手册DioWritePortByte.Port = 0DioWritePortByte.Mask = 255DioWritePortByte.state = 255ErrCde = DRV_DioWritePortByte(DriverHandle, DioWritePortByte) '调用函数完成设置DioReadPortByte.Port = 0DioReadPortByte.value = DRV_GetAddress(output)ErrCde = DRV_DioReadPortByte(DriverHandle, DioReadPortByte) '调用函数完成设置output = output And 1If (output = 0) Thenflag = 1End IfWhile flag = 1DioWritePortByte.state = 115Shape1.FillColor = &HFF&Shape2.FillColor = &H0&Shape3.FillColor = &H0&Shape4.FillColor = &H0&Shape5.FillColor = &H0&Shape6.FillColor = &HFF00&Shape7.FillColor = &HFF&Shape8.FillColor = &H0&Shape9.FillColor = &H0&Shape10.FillColor = &H0&Shape11.FillColor = &H0&Shape12.FillColor = &HFF00&Shape13.FillColor = &HFF00&Shape14.FillColor = &H0&ErrCde = DRV_DioWritePortByte(DriverHandle, DioWritePortByte) '调用函数完成设置Call MySleep(5000)DioWritePortByte.state = 235Shape1.FillColor = &H0&Shape2.FillColor = &HFFFF&Shape3.FillColor = &H0&Shape4.FillColor = &H0&Shape5.FillColor = &H0&Shape6.FillColor = &HFF00&Shape7.FillColor = &H0&Shape8.FillColor = &HFFFF&Shape9.FillColor = &H0&Shape10.FillColor = &H0&Shape11.FillColor = &H0&Shape12.FillColor = &HFF00&Shape13.FillColor = &HFF00&Shape14.FillColor = &H0&ErrCde = DRV_DioWritePortByte(DriverHandle, DioWritePortByte) '调用函数完成设置Call MySleep(2000)DioWritePortByte.state = 158Shape1.FillColor = &H0&Shape2.FillColor = &H0&Shape3.FillColor = &HFF00&Shape4.FillColor = &HFF&Shape5.FillColor = &H0&Shape6.FillColor = &H0&Shape7.FillColor = &H0&Shape8.FillColor = &H0&Shape9.FillColor = &HFF00&Shape10.FillColor = &HFF&Shape11.FillColor = &H0&Shape12.FillColor = &H0&Shape13.FillColor = &H0&Shape14.FillColor = &HFF00&ErrCde = DRV_DioWritePortByte(DriverHandle, DioWritePortByte) '调用函数完成设置Call MySleep(5000)DioWritePortByte.state = 221Shape1.FillColor = &H0&Shape2.FillColor = &H0&Shape3.FillColor = &HFF00&Shape4.FillColor = &H0&Shape5.FillColor = &HFFFF&Shape6.FillColor = &H0&Shape7.FillColor = &H0&Shape8.FillColor = &H0&Shape9.FillColor = &HFF00&Shape10.FillColor = &H0&Shape11.FillColor = &HFFFF&Shape12.FillColor = &H0&Shape13.FillColor = &H0&Shape14.FillColor = &HFF00&ErrCde = DRV_DioWritePortByte(DriverHandle, DioWritePortByte) '调用函数完成设置Call MySleep(2000)WendErrCde = DRV_DeviceClose(DriverHandle) '调用函数关闭设备End SubPrivate Sub Timer2_Timer()DioReadPortByte.Port = 0DioReadPortByte.value = DRV_GetAddress(output)ErrCde = DRV_DioReadPortByte(DriverHandle, DioReadPortByte) '调用函数完成设置'If (flag = 0) Thenoutput1 = output And 1If (output1 = 0) ThenTimer1.Enabled = True'Else'Timer1.Enabled = FalseEnd If'output2 = output And 2'If (output2 = 2) Then'Timer1.Enabled = False'End'End If'End SubEnd Sub。
一、设计一个窗体,要求每单击一个按钮,即可变换出不同颜色的交通信号等图标。
要求窗体界面和程序功能如“交通信号灯.exe ”文件所示。
参考代码:Private Sub Command1_Click() Imagered.Visible = True Imageyellow.Visible = False Imagegreen.Visible = False Label1.Caption = "红灯亮" End Sub Private Sub Command2_Click()Imageyellow.Visible = True Imagered.Visible = False Imagegreen.Visible = False Label1.Caption = "黄灯亮" End Sub Private Sub Command3_Click() Imagegreen.Visible = True Imageyellow.Visible = False Imagered.Visible = False Label1.Caption = "绿灯亮"End SubPrivate Sub Form_Load()Imagered.Left = Imageyellow.Left Imagered.Top = Imageyellow.Top Imagegreen.Left = Imageyellow.LeftImagegreen.Top = Imageyellow.Top End Sub二、用inputbox 函数输入一个整数,若该数能被7整除,则用msgbox 输出“该数是7的倍数”,否则显示“该数不能被7整除”,界面和效果如下图所示:Private Sub Form_Load()a = InputBox("请输入一个整数", "整数输入")If a Mod 7 = 0 ThenMsgBox"该数是7的倍数", , "判断界面"Else: MsgBox"该数不能倍7整除", , "判断界面"End IfEnd Sub部分同学的界面设计:参考代码:Private Sub Command1_Click()If Text1.Text Mod 7 = 0 ThenMsgBox "该数是7的倍数", 0, "判断界面"ElseMsgBox "该数不能被7整除", 0, "判断界面"End IfEnd Sub三、三、制作一个个人所得税的计算程序:从2006年1月1日起,个人所得税起征点调整为1600元。
计算机二级VB实例编程红绿灯控制程序实验规定(1)掌握有关Shape形状控件旳使用;(2)进一步掌握定期器控件(Timer)旳使用措施。
实验内容用Visual Basic制作一种红绿灯程序,程序界面如图8-1、图8-2、图8-3所示。
图8-1 运营界面效果 1 图8-2 运营界面效果2一、程序阐明程序旳顾客界面如图8-4所示,当顾客在图8-1旳控制台上选择“自动”时,红、黄、绿三灯将按一定旳时间依次亮,如图8-2所示,并有时间显示;当选择“手动”后,红灯、黄灯、绿灯这3个按钮可用,点哪个按钮,相应灯亮,如图8-1所示。
图8-3 设计界面图1图8-4设计界面图2二、技术分析Shape形状控件通过设立其Shape属性值,重要用于以便显示矩形、正方形、椭圆、圆形、圆角矩形或者圆角正方形几何图形。
本程序运用形状控件设立两组红黄绿灯,一组颜色较暗,一组颜色较亮,运用对象旳Visible可见属性和Timer控件旳Timer属性实现对红黄绿三灯变换旳控制。
三、创立顾客界面如图8-4所示,其中,三个比较亮旳红色、黄色和绿色圆,分别是名称为Shape2、Shape3和Shape4旳图形控件;三个比较暗旳红色、黄色和绿色圆,分别是名称为Shape6、Shape7、Shape8旳图形控件,这6个图形控件相应互相重叠,Shape2、Shape3和Shape4在上面,Shape6、Shape7、Shape8在下面。
所有控件及其属性设立状况如下表所示。
表实验八对象及其属性四、编写程序代码Dim s As IntegerDim n As Integer'单击“红灯”按钮Private Sub Command1_Click()Shape6.Visible = True : Shape7.Visible = False : Shape8.Visible = False End Sub'单击“黄灯”按钮Private Sub Command2_Click()Shape6.Visible = False : Shape7.Visible = True : Shape8.Visible = FalseEnd Sub'单击“绿灯”按钮Private Sub Command3_Click()Shape6.Visible = False : Shape7.Visible = False : Shape8.Visible = True End Sub'单击“自动”按钮Private Sub Command4_Click()Timer1.Enabled = TrueCommand1.Enabled = FalseCommand2.Enabled = FalseCommand3.Enabled = Falsen = 0 : s = 0End Sub'单击“手动”按钮Private Sub Command5_Click()Timer1.Enabled = FalseLabel1.Caption = ""Shape6.Visible = False Shape7.Visible = False Shape8.Visible = False Command1.Enabled = True Command2.Enabled = True Command3.Enabled = True End Sub'时钟控件启动Private Sub Timer1_Timer() Select Case nCase 0Shape6.Visible = True Shape7.Visible = False Shape8.Visible = False Label1.Caption = 3 - ss = s + 1If s > 3 Thenn = 1s = 0End IfCase 1Shape6.Visible = False Shape7.Visible = True Shape8.Visible = False n = 2Case 2Shape6.Visible = False Shape7.Visible = False Shape8.Visible = True Label1.Caption = 3 - s s = s + 1If s > 3 Thenn = 0 : s = 0End IfEnd SelectEnd Sub五、保存并运营程序执行【文献】→【保存工程】命令,打开“文献另存为”对话框,按提示分别保存窗体文献及工程文献;然后,执行【运营】→【启动】命令(或直接按F5键),运营程序检测运营成果与否符合题意。
用Visual Basic程序实现霓虹灯动态效果谭立球;邵博雅【摘要】Visual Basic是一种功能强大,且简单易学的程序设计语言.用Visual Basic程序设计开发平台能够实现很多应用功能.本文基于Visual Basic6.0开发平台,通过利用Visual Basic中的计时器控件(Timer),Label控件进行设计,实现了一种霓虹灯闪烁和移动的动态效果.【期刊名称】《山西电子技术》【年(卷),期】2017(000)005【总页数】3页(P55-57)【关键词】动态效果;计时器;Label;Visual Basic;控件【作者】谭立球;邵博雅【作者单位】中南大学信息与网络中心,湖南长沙410083;长沙市南雅中学,湖南长沙410129【正文语种】中文【中图分类】TP311.52Visual Basic(VB)程序设计是一种简单易学,但功能强大的程序设计语言。
另一方面,VB在设计思想上引入两个重要的方法:可视化编程以及事件驱动的编程机制。
这大大地简化了程序设计的难度,使没有任何编程基础的人也能够在短时间内掌握。
因此,VB程序设计在过去的20年中成为了一种广泛的程序设计语言。
应用VB进行程序开发,一个重要的方面就是实现动画效果。
在动画设计方面,学者李艳通过利用Timer、Picture、shape等控件实现了一个简单的动画效果;陈艇等人利用PictureClip控件实现了连续图片动画效果;文献提出了VB程序设计的动画设计方法;而文献利用VB设计了一个简单的霓虹灯效果。
本文是在上述文献的基础上,基于VB 6.0开发平台,利用Timer控件、Label控件等实现了一个星星闪烁的霓虹动态效果。
霓虹灯是一种低气压冷阳极辉光放电发光的光源,是我们日常生活中最常见的。
通过使光源发出不同的颜色,形成了迷人的闪烁效果。
另一方面,如果让不同位置的光源不同时间发光,则会展示出一种动态的效果。
本文便是利用这一原理,基于VB实现霓虹灯的动态效果。
交通灯程序设计交通灯程序设计是嵌入式系统和自动化控制领域中的一项基本技术。
它涉及到对交通灯信号的控制逻辑进行编程,以确保交通安全和流畅。
下面将详细介绍交通灯程序设计的基本概念、设计步骤和实现方法。
基本概念交通灯系统通常由红、黄、绿三种颜色的信号灯组成,用于指挥车辆和行人的通行。
一个典型的交通灯系统需要实现以下功能:- 红灯亮起时,禁止车辆通行。
- 绿灯亮起时,允许车辆通行。
- 黄灯亮起时,警告车辆即将变灯,准备停车或加速通过。
设计步骤1. 需求分析:确定交通灯控制的基本需求,包括信号灯的切换时间、特殊情况下的信号控制等。
2. 系统设计:设计交通灯的硬件架构和软件架构,包括信号灯、传感器、控制器等。
3. 程序设计:编写控制交通灯的程序代码,实现信号灯的逻辑控制。
4. 测试与调试:在模拟环境中测试程序,确保其正确性和稳定性。
5. 部署与维护:将程序部署到实际的交通灯系统中,并进行定期的维护和更新。
实现方法1. 硬件选择:根据需求选择合适的微控制器或计算机系统作为交通灯的控制单元。
2. 信号灯控制:使用GPIO(通用输入输出)端口来控制信号灯的状态。
3. 时间控制:使用定时器或计时器来实现信号灯的定时切换。
4. 逻辑控制:编写程序逻辑,根据交通流量和时间来调整信号灯的切换时间。
5. 异常处理:设计异常处理机制,如紧急情况下的信号灯控制。
程序示例以下是一个简单的交通灯控制程序的伪代码示例:```pseudo初始化信号灯状态为红灯设置红灯持续时间为30秒设置绿灯持续时间为20秒设置黄灯持续时间为5秒while 程序运行:红灯亮起等待30秒绿灯亮起等待20秒黄灯亮起等待5秒回到红灯亮起状态```考虑因素- 安全性:确保程序在各种情况下都能安全运行,避免因程序错误导致的交通事故。
- 可靠性:程序应能稳定运行,不受外界干扰。
- 灵活性:程序应能根据实际情况调整信号灯的切换逻辑,如交通高峰期的信号控制。
- 可维护性:程序应易于维护和升级,以适应未来的需求变化。
Public str_out As StringDim setaddr As String, char As String, setad As StringDim dz As StringDim dz1 As StringPublic str As StringPrivate Sub COMBO1_Change()Select Case COMBO1.ListIndexCase Ydz1 = Right(COMBO1.Text, Len(COMBO1.Text) - 1)Case Mdz1 = Right(COMBO1.Text, Len(COMBO1.Text) - 1)Case Tdz1 = Right(COMBO1.Text, Len(COMBO1.Text) - 1)Case Cdz1 = Right(COMBO1.Text, Len(COMBO1.Text) - 1)Case Sdz1 = Right(COMBO1.Text, Len(COMBO1.Text) - 1)End SelectEnd SubPrivate Sub Command1_Click() 'PLC运行停止按钮If MSComm1.PortOpen = False Then '如果串口未打开MSComm1.PortOpen = True '则打开串口End IfSelect Case Command1.Caption '选择事件Case "PLC RUN"str = "00050C30FF00" '通讯字符串LRC = Chr_lrc(str) '计算lrc校验值stx = ":" '起始字符冒号str_out = stx + str + LRC + Chr$(13) + Chr$(10) '发送字符串内容MSComm1.Output = str_out '通过串口发送Command1.Caption = "PLC STOP" '按钮显示PLC STOP 等待下次按压此按钮Command1.BackColor = &HFF& '按钮背景颜色为红色Case "PLC STOP" '事件PLC STOPstr = "00050C300000" '通讯字符串LRC = Chr_lrc(str) '计算lrc校验值stx = ":" '起始字符冒号str_out = stx + str + LRC + Chr$(13) + Chr$(10) '发送的字符串MSComm1.Output = str_out '通过串口发送Command1.Caption = "PLC RUN" '按钮显示PLC RUN 等待下次按压此按钮Command1.BackColor = &HFF00& '按钮背景颜色为绿色End SelectEnd SubPrivate Sub Command2_Click() '写寄存器按钮stx = ":" '起始字符为冒号a = Right(Text1.Text, Len(Text1.Text) - 1) 'a为需要写入寄存器的数据C = Text4.Text 'c为需写入数据的寄存器地址If Len(C) > 1 Then SRDZ = Right(C, Len(C) - 1) '如果c的长度大于1,则输入地址srdz为去掉左边的一个字符后的字符If Mid(Text4.Text, 2) = "" Then '如果地址文本框的第二个字符为空格,那么MsgBox ("请输入元件号!") '提示请输入元件号Text4.SetFocus '光标移至文本框Text4.SelStart = 1 '光标在文本框第二个字符处闪烁Exit SubElseIf Val(SRDZ) > 999 Then '如果输入地址SRDZ大于999则MsgBox ("元件地址超过限制!") '提示元件地址超过限制Text4.SetFocus '光标移至文本框Text4.SelStart = 1 '光标在文本框第二字符处闪烁Text4.SelLength = Len(C) '文本框字符长度为原长度Exit SubEnd IfEnd IfD = Hex(SRDZ + 4096) '输入地址转换为十六进制数的台达PLC地址If Len(a) >= 0 Then '如果写入寄存器的数值大于等于零If Mid(a, 1) = "" Then '如果写入的数值字符的第一位是空格MsgBox ("请输入数值!") '则提示请输入数值!Text1.SetFocus '光标移至文本框Text1.SelStart = 1 '光标在文本框第二位闪烁Exit SubElseIf Option2.Value = True Then '如果选择十六进制数制If Len(a) = 1 Then '且数值长度为1a1 = "000" + a '那么,写入的数值为000加上输入的一位数据ElseIf Len(a) = 2 Then '如果输入数据长度为2a1 = "00" + a '则写入的数值为00加上输入的两位数据ElseIf Len(a) = 3 Then '如果输入数据长度为3a1 = "0" + a '则写入的数值为0加上输入的三位数据ElseIf Len(a) = 4 Then '如果输入数据长度为4a1 = a '则写入的数值为输入的数据End IfEnd IfEnd IfEnd IfElse '如果选择十进制数制b1 = Hex(a) '那么,直接将输入的数据转换为十六进制数If Len(b1) = 1 Then '如果输入一位十六进制数a1 = "000" + b1 '那么,写入的数值为000加上输入的一位十六进制数ElseIf Len(b1) = 2 Then '如果输入的数据长度为2a1 = "00" + b1 '那么,写入的数值为00加上输入的两位十六进制数ElseIf Len(b1) = 3 Then '如果输入的数据长度为3a1 = "0" + b1 '那么写入的数值为0加上输入的一位十六进制数ElseIf Len(b1) = 4 Then '如果输入的数据长度为4a1 = b1 '那么写入的数值为输入的数据End IfEnd IfEnd IfEnd IfEnd IfIf Val(a) > 65535 Then '如果输入的数据大于65535MsgBox ("设值超过限制!") '则提示设值超过限制Text1.SetFocus '光标移至文本框Text1.SelStart = 1 '光标在文本框第二个字符处闪烁Text1.SelLength = Len(a) '文本框长度等于原长度Exit SubEnd IfEnd IfEnd Ifstr = "0106" + D + a1 '发送字符地址01命令06(写入)地址D数据a1 LRC = Chr_lrc(str) '计算lrc校验值If Len(LRC) = 1 Then '如果lrc校验值为一位LRC = "0" + LRC '则lrc校验值补零ElseLRC = LRC '否则校验值为计算值End IfMSComm1.Output = stx + str + LRC + Chr$(13) + Chr$(10) '通过串口发送写入命令MSComm1.InBufferCount = 0End SubPrivate Sub Command3_Click() '读取暂存器按钮setaddr = Text2.Text '变量setaddr为文本text2的内容If Len(setaddr) > 1 Then setad = Right(setaddr, Len(setaddr) - 1) '如果文本内容长度大于1则setad的值为去掉最左边的字符If Mid(Text2.Text, 2) = "" Then '如果文本的第二个字符为空格MsgBox ("请输入地址!") '则提示请输入地址Text2.SetFocus '同时光标移至文本框Text2.SelStart = 1 '光标在第二个字符处闪烁Exit SubElseIf Val(setad) > 1300 Then '如果输入的地址大于1300,则MsgBox ("元件地址超出范围!") '提示元件地址超出范围Text2.SetFocus '光标移至文本框Text2.SelStart = 1 '光标在第二个字符处闪烁Text2.SelLength = Len(setaddr) '文本框的字符长度为原长度Exit SubEnd IfEnd IfFIRSTLOOP:MSComm1.InBufferCount = 0 '串口输入缓冲器清零MSComm1.OutBufferCount = 0 '串口输出缓冲器清零stx = ":" '起始字符为冒号a = Hex(setad + 4096) '将地址加上H1000,并转换为16进制数str = "0103" + a + "0001" 'str为0103加地址加读取长度LRC = Chr_lrc(str) '计算str的lrc校验值MSComm1.Output = stx + str + LRC + Chr$(13) + Chr$(10) '串口发送'Tim = Timer'' Do' If Timer > Tim + 3 Then '如果通讯200毫秒以上,那么' If MsgBox("请检查通讯!", vbRetryCancel + vbCritical) = vbCancel Then '弹出子窗口提示请检查通讯' Exit Sub' Else' GoTo FIRSTLOOP' End If' End If' Loop Until MSComm1.InBufferCount = 13 '直到串口输入缓冲器字符长度等于13SETIN = MSComm1.Input 'SETIN为串口输入缓冲器字符串bh = Mid(SETIN, 8, 4) 'bh为回传数据的第八个字符开始的4个字符If Option1.Value = True Then '如果选择为十进制数值模式则hcsj = Val("&H" + bh) '回传数据为数值Text3.Text = "K" + CStr(hcsj) '文本框显示十进制K加读回的数据ElseText3.Text = "H" + bh '否则,为16进制,文本框显示16进制H加数据End IfEnd SubPrivate Sub Command4_Click()Call dizhistx = ":"str = "0105" + dz1 + "FF00"LRC = Chr_lrc(str)Text6.Text = dz1If dzcw = True Then Exit SubMSComm1.OutBufferCount = 0MSComm1.InBufferCount = 0FG:MSComm1.Output = stx + str + LRC + Chr$(13) + Chr$(10)Tim = TimerDoIf Timer > Tim + 1 Then: Exit DoLoop Until MSComm1.InBufferCount > 1If MSComm1.InBufferCount > 0 ThenQZ = MSComm1.InputQZ1 = Mid(QZ, 10, 4)If QZ1 = "FF00" Then Exit SubElseIf MsgBox("置位不成功", vbRetryCancel + vbCritical) = vbCancel Then Exit SubIf MsgBox("置位不成功", vbRetryCancel + vbCritical) = vbRetry Then GoTo FG End IfEnd SubPrivate Sub Command5_Click()Call dizhistx = ":"str = "0105" + dz1 + "0000"LRC = Chr_lrc(str)Text6.Text = dz1If dzcw = True Then Exit SubMSComm1.OutBufferCount = 0MSComm1.InBufferCount = 0FG:MSComm1.Output = stx + str + LRC + Chr$(13) + Chr$(10)Tim = TimerDoIf Timer > Tim + 1 Then: Exit DoLoop Until MSComm1.InBufferCount > 1If MSComm1.InBufferCount > 0 ThenQZ = MSComm1.InputQZ1 = Mid(QZ, 10, 4)If QZ1 = "0000" Then Exit SubElseIf MsgBox("复位不成功", vbRetryCancel + vbCritical) = vbCancel Then Exit SubIf MsgBox("复位不成功", vbRetryCancel + vbCritical) = vbRetry Then GoTo FG End IfEnd SubPrivate Sub Command6_Click()EndEnd SubPrivate Sub dzjs_Click()End SubPrivate Sub Form_Load() '窗口打开If MSComm1.PortOpen = False Then '如果串口未打开那么MSComm1.PortOpen = True '打开串口End IfOption1.Value = True '预设十进制'i = initial() '执行初始化功能End SubFunction initial() '窗口打开初始化功能块FH:str = "00010C300001" 'Read PLC RUN/STOP LRC = Chr_lrc(str) '计算字符串str的lrc校验值stx = ":" '起始字符为冒号str_out = stx + str + LRC + Chr$(13) + Chr$(10) '发送字符串为起始字符加str加校验再加0D0AMSComm1.Output = str_out '串口发送字符串Tim = TimerDoIf Timer > Tim + 1 ThenIf MsgBox("请检查与PLC的通讯", vbRetryCancel + vbCritical) = vbCancel Then '如果超时未通讯上,则显示字符“请检查与PLC的通讯”Exit FunctionElseGoTo FH '否则重新发送命令End IfEnd IfLoop Until MSComm1.InBufferCount = 11 '直到串口读回数据长度为11个字节zt = MSComm1.Input 'zt为串口回传的数据If Mid(zt, 9, 1) = 1 ThenCommand1.Caption = "PLC STOP" '如果读回的状态为1则按钮显示PLC STOP 等待再次按下次按钮时停止PLC的运转Command1.BackColor = &HFF& '同时,按钮显示红色ElseCommand1.Caption = "PLC RUN" '否则,按钮显示PLC RUN等待再次按下次按钮时运转PLCCommand1.BackColor = &HFF00& '同时,按钮显示绿色End IfEnd Function'LRC check sumFunction Chr_lrc(str As String) As StringC = 0For C = C + 1 To lc_data = Mid$(str, C, 2)d_lrc = d_lrc + Val("&H" + c_data)C = C + 1Next CIf d_lrc > &HFF Thend_lrc = d_lrc Mod &H100End Ifh_lrc = Hex(&HFF - d_lrc + 1)If Len(h_lrc) > 2 Thenh_lrc = Mid(h_lrc, Len(h_lrc) - 1, 2)End IfChr_lrc = h_lrcEnd FunctionPrivate Sub Option1_Click() '十进制数选择zf = Text1.Text '写入数据文本sf = Text3.Text '读出数据文本If Len(zf) > 1 Then '如果写入数据文本长度大于1 zf1 = Right(zf, Len(zf) - 1) '则zf1为去掉文本当中最左边的一个字符zf2 = Val("&h" + zf1) '将zf1转换为数值形式Text1.Text = "K" + CStr(zf2) '文本框显示K加十进制数据ElseText1.Text = "K" '否则,文本框显示十进制符号KEnd IfIf Len(sf) > 1 Then '如果读出数据长度大于1sf1 = Right(sf, Len(sf) - 1) '则sf1为去掉文本当中最左边的一个字符sf2 = Val("&h" + sf1) '将sf1转换为数值形式Text3.Text = "K" + CStr(sf2) '文本框显示十进制数据ElseText3.Text = "K" '否则,文本框显示十进制符号KEnd IfEnd SubPrivate Sub Option2_Click() '十六进制数选择hzf = Text1.Text 'hzf为写入数据文本hsf = Text3.Text 'hsf为读出数据文本If Len(hzf) > 1 Then '如果写入数据文本长度大于1 hzf1 = Right(hzf, Len(hzf) - 1) '则hzf1为去掉文本当中最左边的一个字符Text1.Text = "H" + Hex(hzf1) '将hzf1转换为数值形式ElseText1.Text = "H" '否则,文本框显示十六进制符号HIf Len(hsf) > 1 Then '如果读出数据文本长度大于1hsf1 = Right(hsf, Len(hsf) - 1) '则hsf1为去掉文本当中最左边的一个字符Text3.Text = "H" + Hex(hsf1) '文本框显示十六进制数值ElseText3.Text = "H" '否则,显示十六进制符号HEnd IfEnd SubPrivate Sub sysm_Click()Form2.ShowEnd SubPrivate Sub tc_Click()Unload Form1End SubPrivate Sub Text1_KeyPress(KeyAscii As Integer)If Option2 = True Thenchar = Chr(KeyAscii)KeyAscii = Asc(UCase(char)) '转换为大写ElseExit SubEnd IfEnd SubPrivate Sub Text2_KeyPress(KeyAscii As Integer)char = Chr(KeyAscii)KeyAscii = Asc(UCase(char))End SubPublic Sub dizhi()addr = Text5.TextIf Len(addr) > 1 Then: dz = Right(addr, Len(addr) - 1)If Mid(Text5.Text, 2) = "" ThenMsgBox ("请输入元件号!")Text5.SetFocusText5.SelStart = 1 '返回或设置所选择的文本的起始点;如果没有文本被选中,则指出插入点的位置。
一、设计一个窗体,要求每单击一个按钮,即可变换出不同颜色的交通信号等图标。
要求窗体界面和程序功能如“交通信号灯.exe ”文件所示。
参考代码:Private Sub Command1_Click() Imagered.Visible = True Imageyellow.Visible = False Imagegreen.Visible = False Label1.Caption = "红灯亮" End Sub Private Sub Command2_Click()Imageyellow.Visible = True Imagered.Visible = False Imagegreen.Visible = False Label1.Caption = "黄灯亮" End Sub Private Sub Command3_Click() Imagegreen.Visible = True Imageyellow.Visible = False Imagered.Visible = False Label1.Caption = "绿灯亮"End SubPrivate Sub Form_Load()Imagered.Left = Imageyellow.Left Imagered.Top = Imageyellow.Top Imagegreen.Left = Imageyellow.LeftImagegreen.Top = Imageyellow.Top End Sub二、用inputbox 函数输入一个整数,若该数能被7整除,则用msgbox 输出“该数是7的倍数”,否则显示“该数不能被7整除”,界面和效果如下图所示:Private Sub Form_Load()a = InputBox("请输入一个整数", "整数输入")If a Mod 7 = 0 ThenMsgBox"该数是7的倍数", , "判断界面"Else: MsgBox"该数不能倍7整除", , "判断界面"End IfEnd Sub部分同学的界面设计:参考代码:Private Sub Command1_Click()If Text1.Text Mod 7 = 0 ThenMsgBox "该数是7的倍数", 0, "判断界面"ElseMsgBox "该数不能被7整除", 0, "判断界面"End IfEnd Sub三、三、制作一个个人所得税的计算程序:从2006年1月1日起,个人所得税起征点调整为1600元。
一、课程设计(综合实验)的目的与要求目的:1.熟悉EDA试验箱的操作。
2.熟悉并掌握CPLD编程及下载。
3.掌握编写一个工程的基本流程。
4.学习并熟悉硬件编程思想。
5.掌握VHDL状态机设计。
实验要求:1、使用VHDL语言实现上述模块并显示交通计时。
2、编译、下载、验证。
二、设计(实验)正文实验内容:设计一个由一条主干道和一条支干道的汇合点形成的十字交叉路口的交通灯控制器,具体要求如下:(1) 主、支干道各设有一个绿、黄、红指示灯,两个显示数码管。
(2)主、支道交替允许通行,主干道每次放行45 s,支干道每次放行25 s,在每次由亮绿灯变成亮红灯的转换过程中,要亮5 s的黄灯作为过渡,并进行减计时显示。
问题分析:红绿灯周期转换示意图:东西主干道红灯持续时间40S,黄灯5s,绿灯25s南北次干道红灯持续时间45S,黄灯5s,绿灯20s由以上的红绿灯周期转换示意图可以知道:一个完整的红绿灯周期里,主干道每次放行45 s,支干道每次放行25 s,5 s的黄灯作为绿灯转为红灯的过渡,这样一个周期的总时间为:70s,满足设计要求。
具体分析一下红绿灯周期转换的规律可以发现,红绿灯在转换过程中总共有四个状态:s0,s1,s2和s3,以r0,y0,g0分别表示东西主干道的红灯,黄灯,绿灯的状态,以r1,y1,g1分别表示南北次干道的红灯,黄灯,绿灯的状态,用“1”和“0”表示亮灭状态,则四个状态的具体描述如下表所示:设计步骤:1.编程实现主次干道红绿灯的周期转换,根据问题的实际背景将问题简化:即将红绿灯的转换变为四个状态的相互切换。
2.设计计数器来实现计时功能,同时要注意最后的输出信号要为二进制码,这要能保证输出后的信号直接控制数码管的显示。
3.设置全局使能en,用其来控制计数的开始,在为“1”时能够实现置数功能。
用case和if判断语句语句,自动进行红绿灯四个状态的转换。
4.在电脑上用软件对编号的程序进行编译和仿真,检查是否有错误,看能否实现预期的功能。
VB教程:序言-不再游戏我们需要什么我们需要什么?当我们在一个精彩的游戏世界中游历了一番之后,或是惊叹于某一工具软件的小巧精致之余,多少总会产生些许编程的冲动。
编程吗,在以前如果你对电脑还是一个门外汉,那实在是一件可望而不可及的事情。
如果运用基于DOS下的编程语言,譬如C、Qbasic、Pascal等等,真不知何年何月才能有所成就。
编程是需要天赋的,你必须在大脑中对整个程序有一个清晰的轮廓,一个高效的流程,这并不是每个人都能做到的,你必须思之慎之,这也使编程变成一件最枯燥无味的事情。
但在第四代计算机语言(可视化编程)出现后,可以确切的说它开发了人们的更多天赋,并不局限于那些头脑异常清晰的人,每一个人都可以发现自己也可以编出一些从前不敢问津的程序,想象力的充分发挥才是第四代语言的精粹。
Visual Basic(以下简称VB)可以说是可视化语言的先驱了,而且它也是可视化程度最高的一个,从几年前VB诞生之日起到现在,它已经经历了五个版本,而且现在微软正在紧张的进行着VB6.0的研制、测试,这么高的更新率,不外乎说明两个问题:用户对VB的热衷,微软对VB的重视。
不可否认微软对市场的预测能力是极为高明的,而它强大的技术、财力支持也使它在许多以前未进入的领域,在不长的时间内有成为最有力的竞争对手,如IE之于浏览器领域,《帝国时代》之于游戏都是最好的例证。
对于VB现在也有一个很强的竞争对手――Delphi,有人把它称作VB杀手,这显然有偏激之处,VB的确有它的不足之处,但Delphi又何尝不是呢,而且以微软对VB的倾心,VB的功能必然会越来越强大。
VB的诞生VB的出现可以说是Microsoft Windows的日渐成熟的必然产物。
Microsoft Windows为程序员和最终用户提供了一个共同的人机界面。
对用户,Windows提供了一个图形鼠标的操作环境,该环境对所有的应用程序都一样;对于程序员,Windows提供了一组预定义工具----称之为Microsoft Windows 的软件开发工具箱(SDK),该工具能使程序员建立一个与Windows 界面相同的应用程序,而且,程序员不必关心最终用户的硬件配置情况。
模拟交通灯报告学院材料学院班级材料074 学号072996 姓名李金鹏成绩一、设计思路1.要达到的目的①培养综合利用VB语言进行程序设计的能力,重要是培养利用VB的标准控件进行应用程序设计的技能。
②多次锻炼控件数组的使用。
③了解各个控件属性,培养对控件属性的设置。
④了解各个控件间的联系以及熟练应用各种控件。
⑤程序界面美观,能够完成主要的功能。
2.关键问题的解决①红绿灯的进度显示通过用picrurebox和label组合,使label的长宽与picturebox相等。
并使label的长度随着时间变化增长来达到模拟交通灯进度条的目的②白天模式与夜间模式的转换通过定义的NSV 和NIGHT两个逻辑变量,并规定两个模式下的不同,最终达到区分白天模式和夜间模式的交通灯变化的目的二、部分程序关键源代码及注释1. 实现数码到字形码的转换rivate Sub Form_Load()timeleft = bgn.Textled(0) = "1011111"led(1) = "0000011"led(2) = "1110110"led(3) = "1110011"led(4) = "0101011"led(5) = "1111001"led(6) = "1111101"led(7) = "1001011"led(8) = "1111111"led(9) = "1111011"End SubSub Draw(k As Long)For i = 1 To 7ln(i - 1).Visible = -Val(Mid(led(k \ 10), i, 1))NextFor i = 8 To 14ln(i - 1).Visible = -Val(Mid(led(k Mod 10), i - 7, 1))NextEnd Sub实现数码到字形码的转换与任务书上的方法略有不同,大同小异,基本思想一致。