虫虫首页| 资源下载| 资源专辑| 精品软件
登录| 注册

SC_TurboIC_<b>m</b>I<b>m</b>O

  • Euler函数: m = p1^r1 * p2^r2 * …… * pn^rn ai >= 1 , 1 <= i <= n Euler函数: 定义:phi(m) 表示小于等

    Euler函数: m = p1^r1 * p2^r2 * …… * pn^rn ai >= 1 , 1 <= i <= n Euler函数: 定义:phi(m) 表示小于等于m并且与m互质的正整数的个数。 phi(m) = p1^(r1-1)*(p1-1) * p2^(r2-1)*(p2-1) * …… * pn^(rn-1)*(pn-1) = m*(1 - 1/p1)*(1 - 1/p2)*……*(1 - 1/pn) = p1^(r1-1)*p2^(r2-1)* …… * pn^(rn-1)*phi(p1*p2*……*pn) 定理:若(a , m) = 1 则有 a^phi(m) = 1 (mod m) 即a^phi(m) - 1 整出m 在实际代码中可以用类似素数筛法求出 for (i = 1 i < MAXN i++) phi[i] = i for (i = 2 i < MAXN i++) if (phi[i] == i) { for (j = i j < MAXN j += i) { phi[j] /= i phi[j] *= i - 1 } } 容斥原理:定义phi(p) 为比p小的与p互素的数的个数 设n的素因子有p1, p2, p3, … pk 包含p1, p2…的个数为n/p1, n/p2… 包含p1*p2, p2*p3…的个数为n/(p1*p2)… phi(n) = n - sigm_[i = 1](n/pi) + sigm_[i!=j](n/(pi*pj)) - …… +- n/(p1*p2……pk) = n*(1 - 1/p1)*(1 - 1/p2)*……*(1 - 1/pk)

    标签: Euler lt phi 函数

    上传时间: 2014-01-10

    上传用户:wkchong

  • sbit CS = P1^0 sbit SCK = P1^6 sbit SIN = P1^7 sbit SOUT = P1^5 sbit WP = P1^1

    sbit CS = P1^0 sbit SCK = P1^6 sbit SIN = P1^7 sbit SOUT = P1^5 sbit WP = P1^1 void XReady(void) void XSendByte(unsigned char b) unsigned char XGetByte(void) void XWriteEn(void) void XWriteDis(void) unsigned char XReadStatus(void) void XWipPoll(void) void XWriteStatus(unsigned char b) void XReadData(unsigned char *m,unsigned char x,unsigned char n) void XWriteData(unsigned char *m,unsigned char x,unsigned char n) #define XResetDog() {CS=0 CS=1 } void InitX5045(void)

    标签: sbit SOUT SCK SIN

    上传时间: 2014-01-17

    上传用户:lijinchuan

  • C程序设计语言(第二版

    C程序设计语言(第二版,中文版,B.W.Kernighan、D.M.Ritchie 著)

    标签: C程序设计 语言

    上传时间: 2017-07-08

    上传用户:1109003457

  • C语言教程讲义(谭浩强)

    C语言是在 70 年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔实验室正 式 发 表 了 C 语 言 。 同 时 由 B.W.Kernighan 和 D.M.Ritchit 合 著 了 著 名 的 “THE C PROGRAMMING LANGUAGE” 一书。 通常简称为《 K&R》, 也有人称之为《 K&R》 标准。 但是, 在 《 K&R》中并没有定义一个完整的标准 C 语言, 后来由美国国家标准协会 ( American National Standards Institute) 在此基础上制定了一个 C 语言标准, 于一九八三年发表。 通常 称之为 ANSI C。

    标签: C语言 教程 讲义 谭浩强

    上传时间: 2016-08-03

    上传用户:vito

  • 学生管理啊

    #include <iostream.h> #include <string.h> #include <iomanip.h> #include "Stud.h" Stud::Stud(){} char *Stud::getno()              //获取学号 { return no; } char *Stud::getname()            //获取姓名 { return name; } char *Stud::getsex()             //获取性别 { return sex; } char *Stud::getminzu()           //获取民族 { return minzu; } char *Stud::getaddress()         //获取出生地 { return address; } char *Stud::getbirth()           //获取出生年月 { return birth; } int Stud::gettag()               //获取姓名 { return tag; } void Stud::changeno(char n[])                 //设置学号 { strcpy(no,n); } void Stud::changename(char na[])              //设置姓名 { strcpy(name,na); } void Stud::changesex(char s[])                //设置性别 { strcpy(sex,s); } void Stud::changeminzu(char m[])               //设置民族 { strcpy(minzu,m); } void Stud::changeaddress(char a[])             //设置出生地 { strcpy(address,a); } void Stud::changebirth(char b[])               //设置出生年月 { strcpy(birth,b); } void Stud::addstudent(char *rn,char *rna)      //增加学生 {     strcpy(no,rn); strcpy(name,rna); } void Stud::addstudent(char *rn,char *rna,char *rs,char *rm,char *ra,char *rb)    //增加学生 { tag=0; strcpy(no,rn); strcpy(name,rna); strcpy(sex,rs); strcpy(minzu,rm); strcpy(address,ra); strcpy(birth,rb); } void Stud::delstud()                         //设置删除标记 { tag=1; } void Stud::disp()                            //输出学生信息 { cout<<setw(15)<<no<<setw(10)<<name<<setw(10)<<sex<<setw(10)<<minzu<<setw(10)<<address<<setw(10)<<birth<<endl; } void Stud::display()                         //输出学生信息 {     cout<<setw(15)<<no<<setw(10)<<name; }

    标签: 学生

    上传时间: 2016-12-29

    上传用户:767483511

  • 数字图像处理技术 图像的基本运算

    1. 编写M程序,利用图像点运算的线性函数:G = aF + b, 给出a、b的不同值,改变图像的对比度、亮度以及图像反相的效果。 2.  利用“二值图像与原图像做点乘,得到子图像”的原理.,编写M程序,构造特殊的二值图像,最终得到需要的子图像。 3.  编写M程序,实现两个大小不同图像的叠加。 4,(提高题)编写M程序,实现图像的动态平移。

    标签: 数字图像 处理技术 图像 运算

    上传时间: 2017-05-10

    上传用户:mouroutao

  • 费曼物理学讲义卷三

    费恩曼(R.P.Feynman)1918年生于布鲁克林区,1942年在普林斯顿获得博士学位。第二次世界大战期间在洛斯阿拉莫斯,尽管当时他还很年轻,但已在曼哈顿计划中发挥了重要作用。以后,他在康奈尔大学和加利福尼亚理工学院任教。1965年,因他在量子电动力学方面的工作和朝永振一郎及施温格(J.Schwinger)同获诺贝尔物理学奖。费因曼博士获得诺贝尔奖是由于成功地解决了量子电动力学理论问题,他也创立了说是液氦中起流动性现象的数学理论。此后,他和盖尔曼(M.Gell-Mann)在B衰变等弱相互作用领域内做出了奠基性的工作。在以后的几年里,他在夸克理论的发展中起了关键性的作用,提出了他的高能质子碰撞过程的部分子模型。除了这些成就之外,费恩曼博士将新的基本计算技术及记号法引时物理学,首先是无处不在的费恩曼图,在近代科学历史中,它比任何其他数学形式描述都更大地改变了对基本物理过程形成概念及进行计算的方法。费恩曼是一位卓越的教育家。在他区得的许多奖项中,他对1972年获得的奥斯特教学奖章特别感到自豪。在1963年第一次出版的《费恩曼物理学讲义》被《科学叛国人》杂志的一位评论员描写为“咬不动但富于营养并且津津有味。25年后它仍是教师和最好的初学学生的指导书”。为了使外行的公众增加对物理学的了解,费恩曼博士写了《物理定律和量子电动力学的性质:光和物质的奇特理论》。他还是许多高级出版物的作者,这些都成为研究人员和学生的经典参考书和教科书。费恩曼是一个活跃的公众人物。他在挑战者号调查委员会里的工作是从所周知的,特别是他的著名的O型环对寒冷的敏感性的演示,这是一个优美的实验,除了一杯冰水以外其他什么也不需要。费恩曼博士1960年在加利福尼亚州课程促进会中的工作却很少人知道,他在会上抨击了教材的平庸。仅仅罗列费恩曼的科学和教育成就并没有恰当抓信这个人的本质。即使是他 最最技术性的出版物的读者都知识道,费恩曼活跃的多面的人格在他所有的工作中都闪闪发光。除了作为物理学家,在各种不同的场合下他变成不同的人物:有进是无线电修理工,有时是锁具收藏家,艺术家、舞蹈家、邦戈(bongo)鼓手,甚至玛雅象形文字的解释者。对他的世界人们永远好奇,他是一个典型的经验主义者。费恩曼于1998年2月15日在洛杉矶逝世。

    标签: 物理学

    上传时间: 2022-04-24

    上传用户:得之我幸78

  • 无感FOC控制原理

    FOC的控制核心——坐标变换■坐标系口一定子坐标系(静止)一A-B-C坐标系(三相定子绕组、相差120度)一a-β坐标系(直角坐标系:a轴与A轴重合、β轴超前a轴90度)口一转子坐标系(旋转)-d-q坐标系(d轴一转子磁极的轴线、q轴超前d轴90度)口一定向坐标系(旋转)M-T坐标系(M轴固定在定向的磁链矢量上,T轴超前M轴90度)转子磁场定向控制一-M-T坐标系与d-q坐标系重合FOC的控制核心——SVPWM■空间矢量口根据功率管的开关状态(上管导通是“1",关闭是“0")定义了8个空间矢量。其中000和111是零矢量。■扇区口空间矢量构成6个扇区口确定Vref位于哪个扇区,才能知道用哪对相邻的基本电压空间矢量去合成Vref。■参考电压矢量合成口利用基本电压空间矢量的线性时间组合得到定子参考电压Vref。■七段式SVPWM,由3段零矢量和4段相邻的两个非零矢量组成。3段零矢量分别位于PWM的开始、中间和结尾。■非零电压空间矢量能使电机磁通空间矢量产生运动,而零电压空间矢量使磁通空间矢量静止

    标签: foc

    上传时间: 2022-06-30

    上传用户:qdxqdxqdxqdx

  • TLC2543 中文资料

    TLC2543是TI公司的12位串行模数转换器,使用开关电容逐次逼近技术完成A/D转换过程。由于是串行输入结构,能够节省51系列单片机I/O资源;且价格适中,分辨率较高,因此在仪器仪表中有较为广泛的应用。 TLC2543的特点 (1)12位分辩率A/D转换器; (2)在工作温度范围内10μs转换时间; (3)11个模拟输入通道; (4)3路内置自测试方式; (5)采样率为66kbps; (6)线性误差±1LSBmax; (7)有转换结束输出EOC; (8)具有单、双极性输出; (9)可编程的MSB或LSB前导; (10)可编程输出数据长度。 TLC2543的引脚排列及说明    TLC2543有两种封装形式:DB、DW或N封装以及FN封装,这两种封装的引脚排列如图1,引脚说明见表1 TLC2543电路图和程序欣赏 #include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit clock=P1^0; sbit d_in=P1^1; sbit d_out=P1^2; sbit _cs=P1^3; uchar a1,b1,c1,d1; float sum,sum1; double  sum_final1; double  sum_final; uchar duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar wei[]={0xf7,0xfb,0xfd,0xfe};  void delay(unsigned char b)   //50us {           unsigned char a;           for(;b>0;b--)                     for(a=22;a>0;a--); }  void display(uchar a,uchar b,uchar c,uchar d) {    P0=duan[a]|0x80;    P2=wei[0];    delay(5);    P2=0xff;    P0=duan[b];    P2=wei[1];    delay(5);   P2=0xff;   P0=duan[c];   P2=wei[2];   delay(5);   P2=0xff;   P0=duan[d];   P2=wei[3];   delay(5);   P2=0xff;   } uint read(uchar port) {   uchar  i,al=0,ah=0;   unsigned long ad;   clock=0;   _cs=0;   port<<=4;   for(i=0;i<4;i++)  {    d_in=port&0x80;    clock=1;    clock=0;    port<<=1;  }   d_in=0;   for(i=0;i<8;i++)  {    clock=1;    clock=0;  }   _cs=1;   delay(5);   _cs=0;   for(i=0;i<4;i++)  {    clock=1;    ah<<=1;    if(d_out)ah|=0x01;    clock=0; }   for(i=0;i<8;i++)  {    clock=1;    al<<=1;    if(d_out) al|=0x01;    clock=0;  }   _cs=1;   ad=(uint)ah;   ad<<=8;   ad|=al;   return(ad); }  void main()  {   uchar j;   sum=0;sum1=0;   sum_final=0;   sum_final1=0;    while(1)  {              for(j=0;j<128;j++)          {             sum1+=read(1);             display(a1,b1,c1,d1);           }            sum=sum1/128;            sum1=0;            sum_final1=(sum/4095)*5;            sum_final=sum_final1*1000;            a1=(int)sum_final/1000;            b1=(int)sum_final%1000/100;            c1=(int)sum_final%1000%100/10;            d1=(int)sum_final%10;            display(a1,b1,c1,d1);           }         } 

    标签: 2543 TLC

    上传时间: 2013-11-19

    上传用户:shen1230

  • 驱动程序与应用程序的接口

    有两种方式可以让设备和应用程序之间联系:1. 通过为设备创建的一个符号链;2. 通过输出到一个接口WDM驱动程序建议使用输出到一个接口而不推荐使用创建符号链的方法。这个接口保证PDO的安全,也保证安全地创建一个惟一的、独立于语言的访问设备的方法。一个应用程序使用Win32APIs来调用设备。在某个Win32 APIs和设备对象的分发函数之间存在一个映射关系。获得对设备对象访问的第一步就是打开一个设备对象的句柄。 用符号链打开一个设备的句柄为了打开一个设备,应用程序需要使用CreateFile。如果该设备有一个符号链出口,应用程序可以用下面这个例子的形式打开句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3",  GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ,  NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路径名的前缀“\\.\”告诉系统本调用希望打开一个设备。这个设备必须有一个符号链,以便应用程序能够打开它。有关细节查看有关Kdevice和CreateLink的内容。在上述调用中第一个参数中前缀后的部分就是这个符号链的名字。注意:CreatFile中的第一个参数不是Windows 98/2000中驱动程序(.sys文件)的路径。是到设备对象的符号链。如果使用DriverWizard产生驱动程序,它通常使用类KunitizedName来构成设备的符号链。这意味着符号链名有一个附加的数字,通常是0。例如:如果链接名称的主干是L“TestDevice”那么在CreateFile中的串就该是“\\\\.\\TestDevice0”。如果应用程序需要被覆盖的I/O,第六个参数(Flags)必须或上FILE_FLAG_OVERLAPPED。 使用一个输出接口打开句柄用这种方式打开一个句柄会稍微麻烦一些。DriverWorks库提供两个助手类来使获得对该接口的访问容易一些,这两个类是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass类封装了一个设备信息集,该信息集包含了特殊类中的所有设备接口信息。应用程序能有用CdeviceInterfaceClass类的一个实例来获得一个或更多的CdeviceInterface类的实例。CdeviceInterface类是一个单一设备接口的抽象。它的成员函数DevicePath()返回一个路径名的指针,该指针可以在CreateFile中使用来打开设备。下面用一个小例子来显示这些类最基本的使用方法:extern GUID TestGuid;HANDLE OpenByInterface(  GUID* pClassGuid,  DWORD instance,  PDWORD pError){  CDeviceInterfaceClass DevClass(pClassGuid, pError);  if (*pError != ERROR_SUCCESS)    return INVALID_HANDLE_VALUE;  CDeviceInterface DevInterface(&DevClass, instance, pError);  if (*pError != ERROR_SUCCESS)    return INVALID_HANDLE_VALUE;  cout << "The device path is "    << DevInterface.DevicePath()    << endl;   HANDLE hDev;  hDev = CreateFile(   DevInterface.DevicePath(),    GENERIC_READ | GENERIC_WRITE,    FILE_SHARE_READ | FILE_SHARE_WRITE,    NULL,    OPEN_EXISTING,    FILE_ATTRIBUTE_NORMAL,    NULL  );  if (hDev == INVALID_HANDLE_VALUE)    *pError = GetLastError();  return hDev;} 在设备中执行I/O操作一旦应用程序获得一个有效的设备句柄,它就能使用Win32 APIs来产生到设备对象的IRPs。下面的表显示了这种对应关系。Win32 API  DRIVER_FUNCTION_xxxIRP_MJ_xxx  KDevice subclass member function CreateFile  CREATE  Create ReadFile  READ  Read WriteFile  WRITE  Write DeviceIoControl  DEVICE_CONTROL  DeviceControl CloseHandle  CLOSECLEANUP  CloseCleanUp 需要解释一下设备类成员的Close和CleanUp:CreateFile使内核为设备创建一个新的文件对象。这使得多个句柄可以映射同一个文件对象。当这个文件对象的最后一个用户级句柄被撤销后,I/O管理器调用CleanUp。当没有任何用户级和核心级的对文件对象的访问的时候,I/O管理器调用Close。如果被打开的设备不支持指定的功能,则调用相应的Win32将引起错误(无效功能)。以前为Windows95编写的VxD的应用程序代码中可能会在打开设备的时候使用FILE_FLAG_DELETE_ON_CLOSE属性。在Windows NT/2000中,建议不要使用这个属性,因为它将导致没有特权的用户企图打开这个设备,这是不可能成功的。I/O管理器将ReadFile和WriteFile的buff参数转换成IRP域的方法依赖于设备对象的属性。当设备设置DO_DIRECT_IO标志,I/O管理器将buff锁住在存储器中,并且创建了一个存储在IRP中的MDL域。一个设备可以通过调用Kirp::Mdl来存取MDL。当设备设置DO_BUFFERED_IO标志,设备对象分别通过KIrp::BufferedReadDest或 KIrp::BufferedWriteSource为读或写操作获得buff地址。当设备不设置DO_BUFFERED_IO标志也不设置DO_DIRECT_IO,内核设置IRP 的UserBuffer域来对应ReadFile或WriteFile中的buff参数。然而,存储区并没有被锁住而且地址只对调用进程有效。驱动程序可以使用KIrp::UserBuffer来存取IRP域。对于DeviceIoControl调用,buffer参数的转换依赖于特殊的I/O控制代码,它不在设备对象的特性中。宏CTL_CODE(在winioctl.h中定义)用来构造控制代码。这个宏的其中一个参数指明缓冲方法是METHOD_BUFFERED, METHOD_IN_DIRECT, METHOD_OUT_DIRECT, 或METHOD_NEITHER。下面的表显示了这些方法和与之对应的能获得输入缓冲与输出缓冲的KIrp中的成员函数:Method  Input Buffer Parameter  Output Buffer Parameter METHOD_BUFFERED  KIrp::IoctlBuffer KIrp::IoctlBuffer METHOD_IN_DIRECT  KIrp::IoctlBuffer KIrp::Mdl METHOD_OUT_DIRECT  KIrp::IoctlBuffer KIrp::Mdl METHOD_NEITHER  KIrp::IoctlType3InputBuffer KIrp::UserBuffer 如果控制代码指明METHOD_BUFFERED,系统分配一个单一的缓冲来作为输入与输出。驱动程序必须在向输出缓冲放数据之前拷贝输入数据。驱动程序通过调用KIrp::IoctlBuffer获得缓冲地址。在完成时,I/O管理器从系统缓冲拷贝数据到提供给Ring 3级调用者使用的缓冲中。驱动程序必须在结束前存储拷贝到IRP的Information成员中的数据个数。如果控制代码不指明METHOD_IN_DIRECT或METHOD_OUT_DIRECT,则DeviceIoControl的参数呈现不同的含义。参数InputBuffer被拷贝到一个系统缓冲,这个缓冲驱动程序可以通过调用KIrp::IoctlBuffer。参数OutputBuffer被映射到KMemory对象,驱动程序对这个对象的访问通过调用KIrp::Mdl来实现。对于METHOD_OUT_DIRECT,调用者必须有对缓冲的写访问权限。注意,对METHOD_NEITHER,内核只提供虚拟地址;它不会做映射来配置缓冲。虚拟地址只对调用进程有效。这里是一个用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE来定义一个IOCTL代码:#define IOCTL_MYDEV_GET_FIRMWARE_REV \CTL_CODE (FILE_DEVICE_UNKNOWN,0,METHOD_BUFFERED,FILE_ANY_ACCESS)现在使用一个DeviceIoControl调用:BOOLEAN b;CHAR FirmwareRev[60];ULONG FirmwareRevSize;b = DeviceIoControl(hDevice, IOCTL_MYDEV_GET_VERSION_STRING,  NULL, // no input  注意,这里放的是包含有执行操作命令的字符串指针  0, FirmwareRev,      //这里是output串指针,存放从驱动程序中返回的字符串。sizeof(FirmwareRev),& FirmwareRevSize,  NULL // not overlapped I/O );如果输出缓冲足够大,设备拷贝串到里面并将拷贝的资结束设置到FirmwareRevSize中。在驱动程序中,代码看起来如下所示:const char* FIRMWARE_REV = "FW 16.33 v5";NTSTATUS MyDevice::DeviceControl( KIrp I ){  ULONG fwLength=0;  switch ( I.IoctlCode() )  {    case IOCTL_MYDEV_GET_FIRMWARE_REV:      fwLength = strlen(FIRMWARE_REV)+1;      if (I.IoctlOutputBufferSize() >= fwLength)      {        strcpy((PCHAR)I.IoctlBuffer(),FIRMWARE_REV);        I.Information() = fwLength;         return I.Complete(STATUS_SUCCESS);      }      else      {              }    case . . .   } }

    标签: 驱动程序 应用程序 接口

    上传时间: 2013-10-17

    上传用户:gai928943