C# wince 蜂鸣器 发声 C#调用设备驱动函数

摘要:
使用System.ComponentModel;使用System.Threading;constUInt32GENERIC_READ=0x80000000;constUInt32GENERIC_WRITE=0x4000000;常量32IOCTL_PWM_集合_ DIVIDER=2;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Threading;

namespace createfile
{
    unsafe public partial class Form1 : Form
    {
        const UInt32 OPEN_EXISTING = 3;
        const UInt32 GENERIC_READ = 0x80000000;
        const UInt32 GENERIC_WRITE = 0x40000000;
        const Int32 INVALID_HANDLE_VALUE = -1;

        private IntPtr hPort;

        // PWM的控制字,来源TQ2440/Src/Drivers/PWMDriver/PWMDriver.h文件
        const UInt32 IOCTL_PWM_SET_PRESCALER = 1;
        const UInt32 IOCTL_PWM_SET_DIVIDER = 2;
        const UInt32 IOCTL_PWM_START = 3;
        const UInt32 IOCTL_PWM_GET_FREQUENCY = 4;

        [DllImport("coredll.dll")]
        public static extern IntPtr CreateFile(
            String lpFileName,
            UInt32 dwDesiredAccess,
            UInt32 dwShareMode,
            IntPtr lpSecurityAttributes,
            UInt32 dwCreationDisposition,
            UInt32 dwFlagsAndAttributes,
            IntPtr hTemplateFile
            );
        [DllImport("coredll.dll")]
        public static extern bool DeviceIoControl(
            IntPtr hDevice,
            UInt32 dwIoControlCode,
            UInt32[] lpInBuffer,
            UInt32 nInBufferSize,
            Byte[] lpOutBuffer,
            UInt32 nOutBufferSize,
            UInt32 lpBytesReturned,
            IntPtr lpOverlapped
            );

        public Form1()
        {
            InitializeComponent();
            hPort = CreateFile("PWM1:", GENERIC_READ | GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0,

IntPtr.Zero);

            if (hPort == (IntPtr)INVALID_HANDLE_VALUE)
            {
                MessageBox.Show("Open PWM Driver Fail");
            }

        }

        private void button1_Click(object sender, EventArgs e)
        {
            UInt32[] buff = new UInt32[3] { 0, 488, 244 };//488,244来源
            /*int freq = 800;       // 工作频率初值
#define S3C2440_PCLK 50000000    // PCLK是50MHz
#define Prescaler0 15     // 预分频
#define MUX0   8     // 定时器分频值
#define TCNTB0   (S3C2440_PCLK/128/freq)   // 工作频率
#define TCMPB0   (TCNTB0>>1)    // 占空比,默认是50%

BYTE prescale[2] = {0, Prescaler0};
BYTE divider[2] = {0, MUX0};
DWORD buff[3] = {0, TCNTB0, TCMPB0};*/
            UInt32[] prescale = new UInt32[2] { 0, 15 };
            UInt32[] divider = new UInt32[2] { 0, 8 };
            //初始化硬件
            DeviceIoControl(hPort, IOCTL_PWM_SET_PRESCALER, prescale, 2, null, 0, 0, IntPtr.Zero);
            DeviceIoControl(hPort, IOCTL_PWM_SET_DIVIDER, divider, 2, null, 0, 0, IntPtr.Zero);

            //DeviceIoControl(hPort, IOCTL_PWM_START, buff, 3, null, 0, 0, IntPtr.Zero);
            Thread t = new Thread(hh);
            button2.Enabled = false;
            timer1.Enabled = true;
            t.Start();
            while (button2.Enabled == false) ;
            t.Abort();
        }
        public void hh()
        {
            UInt32[] buff = new UInt32[3] { 0, 488, 244 };//488,244来源
            DeviceIoControl(hPort, IOCTL_PWM_START, buff, 3, null, 0, 0, IntPtr.Zero);
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            button2.Enabled = true;
        }
    }
}

免责声明:文章转载自《C# wince 蜂鸣器 发声 C#调用设备驱动函数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C#全局键盘监听(Hook)if语句之猜拳下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ORA-00604的解决方法

分类: Oracle 从错误的角度可以推出:应该是表空间不足   根据查看表空间的使用情况: select b.file_name 物理文件名, b.tablespace_name 表空间, b.bytes/1024/1024 大小M, (b.bytes-sum(nvl(a.bytes,0)))/1024/1024 已使用M, substr((b.by...

飞思卡尔XS128系列(二) PWM模块

      为有别于其他讲解PWM模块的文章,本文不打算拿出大篇幅对PWM模块各个寄存器进行详细讲解,因为那些东西网上、书店到处都是。如果英语好的话,可以参考datasheet,762页的PDF文档,可惜了我那可怜的英文水平……       本文将结合着实际智能小车的控制来写点东西,多写点控制策略上的东西。       如在寄存器方面有何疑问,都可以留言,...

Django之 Models组件

引子讲django的models之前, 先来想一想, 让你通过django操作数据库,你怎么做? 做苦思冥想,可能会这样写。12345678910111213141516import pymysql  def index(request):    # 创建连接 &nbs...

mui-——picker使用示例

使用picker的时候一直没有什么效果 后来根据网上的一些示例 和mui帮助文档才得以实行的效果 总结了一下使用方法 效果图:依次是: 一级联  》二级联 》 三级联                       ...

JS将时间戳转化为时间

//将时间戳转化为时间 function timestampToTime(timestamp) { var date = new Date(timestamp * 1000);//时间戳为10位需*1000,13位的话不需要 Y = date.getFullYear() + "-"; M = (date.getMonth()+...

Pivot Table系列之展开/折叠用法 (Expand/Collapse)

1.遇到的问题: PivotTable中本来已经展开的维度的Hierarchy(层次结构),在切换切片器的数据集时,层次结构就折叠在一起了;没有按照之前的方式展开显示。 2.在做成PivotTable时,正常显示 3.如果切换到201512数据版本,月份的层级结构Y-Q-M默认折叠起来显示了。 分析: PivotTable中的层级结构(Hierarchy...