嵌入式爱好者

查看: 11404|回复: 5

改进版的LED跑马灯程序(C#编写)

[复制链接]

69

主题

184

帖子

338

积分

RK3568通行证

扫一扫,手机访问本帖
发表于 2012-3-29 14:31:23 | 显示全部楼层 |阅读模式
原帖地址: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 = "全亮";
            }
        }
回复

使用道具 举报

69

主题

184

帖子

338

积分

RK3568通行证

 楼主| 发表于 2012-3-29 14:33:27 | 显示全部楼层
myLED.zip (49.25 KB, 下载次数: 76)
回复 支持 反对

使用道具 举报

69

主题

184

帖子

338

积分

RK3568通行证

 楼主| 发表于 2012-3-29 17:19:12 | 显示全部楼层
QQ截图20120329171904.jpg
回复 支持 反对

使用道具 举报

bxl131 该用户已被删除
发表于 2012-3-30 16:39:22 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

21MCUEL_SZ 该用户已被删除
发表于 2012-3-30 23:34:10 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

一叶蓝天 该用户已被删除
发表于 2013-5-10 00:18:20 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-11-23 17:12

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表