- 积分
- 338
贡献1078
飞刀116 FD
注册时间2011-12-29
在线时间69 小时
扫一扫,手机访问本帖
|
原帖地址:http://bbs.witech.com.cn/thread-13136-1-1.html
修改了几处地方,增加了跑马灯的速度控制,全亮全灭控制,要单个控制,只要看代码就知道怎么做,传个源码,以供学习!
第一步:声明API
//创建或打开对象,并返回一个可被对象访问的句柄
[DllImport("coredll.dll",EntryPoint="CreateFile")]
private static extern IntPtr CreateFile
(
string lpFileName,//文件名
uint dwDesiredAccess,//访问模式
uint dwShareMode,//共享模式
uint lpSecurityAttributes,//SD
uint dwCreationDisposition,//如何创建
uint dwFlagsAndAttributes,//文件属性
uint hTemplateFile//文件模板句柄
);
//对设备执行指定的操作,访问设备驱动程序
[DllImport("coredll.dll", EntryPoint = "DeviceIoControl")]
private static extern int DeviceIoControl
(
IntPtr hDevice,//设备句柄
int dwIoControlCode,//设备控制选项,带有 FSCTL_ 前缀的常数
byte lpInBuffer,//设备控制选项,具体取决于dwIoControlCode参数
uint nInBufferSize,//输入缓冲区的长度
byte lpOutBuffer,//设备控制选项,具体取决于dwIoControlCode参数
uint nOutBufferSize,//输出缓冲区的长度
ref int lpBytesReturned,//实际装载到输出缓冲区的字节数量
IntPtr lpOverlapped//重叠指针
);
第二步:自定义高电平低电平函数
/// <summary>
/// 发送高电平
/// </summary>
/// <param name="i"></param>
void SendIOHigh(int i)
{
IntPtr gpiodriver = CreateFile("LED1:", 0, 0, 0, 3, 0, 0);//打开LED
int bytesReturned = 0;
int ioHigh = 0x04001060;//与驱动里面的值对应
ioHigh += i * 0x10;
DeviceIoControl(gpiodriver, ioHigh, 0, 0, 0, 0, ref bytesReturned, IntPtr.Zero);
}
/// <summary>
/// 发送低电平
/// </summary>
/// <param name="i"></param>
void SendIOLow(int i)
{
IntPtr gpiodriver = CreateFile("LED1:", 0, 0, 0, 3, 0, 0);//打开LED
int bytesReturned = 0;
int ioHigh = 0x04001060;//与驱动里面的值对应
ioHigh += i * 0x10+1;
DeviceIoControl(gpiodriver, ioHigh, 0, 0, 0, 0, ref bytesReturned, IntPtr.Zero);
}
第三步:timer控件定时发送高低电平到对应LED灯,控制关和开
int i = 0;
private void timer1_Tick(object sender, EventArgs e)
{
SendIOLow(i);
i++;
if (i > 3)//到达最后一个LED灯
{
i = 0;
}
SendIOHigh(i);
}
private void trackBar1_ValueChanged(object sender, EventArgs e)
{
timer1.Interval = 100 * trackBar1.Value;
}
全开全灭:
private void btnAll_Click(object sender, EventArgs e)
{
if (btnAll.Text == "全亮")
{
SendIOHigh(0);
SendIOHigh(1);
SendIOHigh(2);
SendIOHigh(3);
btnAll.Text = "全灭";
}
else
{
SendIOLow(0);
SendIOLow(1);
SendIOLow(2);
SendIOLow(3);
btnAll.Text = "全亮";
}
} |
|