lpc17库函数
- 格式:docx
- 大小:28.55 KB
- 文档页数:3
Cortex-M 系列针对成本和功耗敏感的MCU 和 终端应用(如智能测量、人机接口设备、汽车和 工业控制系统、大型家用电器、消费性产品和医 疗器械)的混合信号设备进行过优化。
.比较Cortex-M 处理器Cortex-M 系列是适用于具有不同的成本、功耗和性能的一系列易于使用的兼容嵌入式设备 (如微控制器(MCU ))的理想解决方案。
每个处理器都针对十分广泛的嵌入式应用范围提供 最佳权衡取舍。
关于Cortex-M4与Cortex-M3的区别,:M4不是用来取代M3的,它只是多了浮点运算功能。
如果 你不需要浮点DSP, M3就足够了"8/16位”应用“8/16位”应用"16/32位”应用“32位/DSC ”应用低成本和简单性低成本,最佳能效高性能,通用有效的数字信号控制20-50M 工作频率20-50M 工作频率32-100M 工作频率80-204M 工作频率冯诺依曼结冯诺依曼结哈佛结哈佛结构构构构Cortex-M 系列处理器都是二进制向上兼容的,这使得软件重用以及从一个Cortex-M 处理器 无缝发展到另一个成为可能。
FPGA Low Cost MCU High Performance MCUMCortex-M 技术RISC 处理器内核Thumb-2® 技术•高性能32位CPU •具有确定性的运尊•低延退3阶段管道• 16/32位指令的最佳混合•小于8位设费3倍的代码大小•对性能没有负面影响低功耗模式嵌套矢堂中断控制器(NVIC)•集成的睡眠状态支持•多电源域•基于架构的软件控制•低延返、低抖动中断响应•不需要汇编编程•以纯C 语言编写的中断服务例程工具和RTOS 支持99[竺!9里袒试犯建朦.厂泛的第三方工具支持• Cortex 微控制器软件接口标准(CMSIS)•最大限度地增加软件成果重用• JTAG 或2针串行线调试(SWD)连接•支持多处理器•支持实时跟踪CMSISARM Cortex 微控制器软件接口标准(CMSIS) 是Cortex-M 处理器系列的与供应商无关的硬 件抽象层。
C51的常用库函数详解C51语言的编译器中包含有丰富的库函数,使用库函数可以大大简化用户程序设计的工作量,提高编程效率;每个库函数都在相应的头文件中给出了函数原型声明,在使用时,必须在源程序的开始处使用预处理命令include将有关的头文件包含进来;C51库函数中类型的选择考虑到了8051单片机的结构特性,用户在自己的应用程序中应尽可能地使用最小的数据类型,以最大限度地发挥8051单片机的性能,同时可减少应用程序的代码长度;下面将C51的库函数分类列出并详细介绍其用法;1字符函数字符函数的原型声明包含在头文件CTYPE.H中;常用的一些字符函数介绍如下;1.1检查英文字母函数检查英文字母函数用于检查形参字符是否为英文字母,其函数原型如下:bitisalphacharc;其中,c为待判断的字符,如果是英文字母则返回1,否则返回0;程序示例如下:1.2检查字母数字函数检查字母数字函数用于检查形参字符是否为英文字母或数字字符,其函数原型如下:bitisalnumcharc;1.3检查控制字符函数检查控制字符函数用于检查形参字符是否为控制字符,其函数原型:bitiscntrlcharc;其中,c为待判断的字符;控制字符其取值范围为0x00~0xlF之间或等于0x7F,如果是,则返回1,否则返回0;十进制数字检查函数用于检查形参字符是否为十进制数字,其函数原型如下:bitisdigitcharc;其中,c为待判断的字符,如果是十进制数字则返回1,否则返回0;1.5可打印字符检查函数可打印字符检查函数用于检查形参字符是否为可打印字符,其函数原型如下:bitisgraphcharc;其中,c为待判断的字符;可打印字符的取值范围为0x21~0x7C,不包含空格,如果是可打印字符则返回1,否则返回0;1.6包含空格的可打印字符检查函数包含空格的可打印字符检查函数用于检查形参字符是否为可打印字符以及空格,其函数原型如下:bitisprintcharc;其中,c为待判断字符;如果是则返回1,否则返回0;该函数与isgraph的区别在于包含了空格符,空格符为0x20;1.7格式字符检查函数格式字符检查函数用于检查形参字符是否为标点、空格或格式字符,其函数原型如下:bitispunctcharc;其中,c为待判断字符,如果是则返回1,否则返回0;1.8小写英文字母检查函数小写英文字母检查函数用于检查形参字符是否为小写英文字母,其函数原型如下:bitislowercharc;1.9大写英文字母检查函数大写英文字母检查函数用于检查形参字符是否为大写英文字母,其函数原型如下:bitisuppercharc;其中,c为待判断字符;如果是大写英文字母则返回1,否则返回0;1.10控制字符检查函数控制字符检查函数用于检查形参字符是否为控制字符,其函数原型如下:bitisspacecharc;其中,c为待判断字符;如果是控制字符则返回1,否则返回0;控制字符包括:空格、制表符、回车、换行、垂直制表符和送纸,其取值范围为0x09~0x0d,或为0x20;1.11十六进制数字检查函数十六进制数字检查函数用于检查形参字符是否为十六进制数字,其函数原型如下:bitisxdigitcharc;其中,c为待判断字符;如果是16进制数字字符则返回1,否则返回0;1.12十六进制数字转换函数十六进制数字检查函数用于转换形参字符为十六进制数字,其函数原型如下:chartointcharc;其中,c为待转换字符;该函数将形参字符0~9、a~f大小写无关转换为16进制数字;其中,对于字符0~9,返回值为0H~9H,对于ASCII字符a~f大小写无关,返回值为0AH~0FH;1.13大写字符转换函数chartolowercharc;其中,c为待转换的大写字符;如果字符参数不在A~Z之间,则该函数将不起作用,而直接返回原字符;1.14小写字符转换函数小写字符转换函数用于将小写字符转换为大写字符,其函数原型如下:chartouppercharc;其中,c为待转换的小写字符;如果字符参数不在a~z之间,则该函数将不起作用,而直接返回原字符;1.15ASCII字符转换函数ASCII字符转换函数用于将任何字符型参数缩小到有效的ASCII范围之内,其函数原型如下:chartoasciicharc;其中,c为待转换的字符;该函数执行的操作是将形参数值和0x7f做与运算,从而去掉第7位以上的所有位数;如果形参已是有效的ASCII字符,则不作处理,直接返回原字符;1.16大写字符宏转换函数大写字符宏转换函数用于大写字符转换为小写字符,其函数原型如下:char_tolowercharc;其中,c为待转换的大写字符;这其实是一个由宏定义完成的操作,其功能是将字符参数c与常数0x20逐位进行或运算,从而将大写字符转换为小写字符;1.17小写字符宏转换函数小写字符宏转换函数用于小写字符转换为大写字符,其函数原型如下:char_touppercharc;其中,c为待转换的小写字符;这其实是一个由宏定义完成的操作,其功能是将字符参数c与常数0xdf逐位进行与运算,从而将小写字符转换为大写字符;2字符串函数字符串函数的原型声明包含在头文件STRING.H中;在C51语言中,字符串应包括2个或多个字符,字符串的结尾以空字符来表示;字符串函数通过接受指针串来对字符串进行处理;常用的字符串函数介绍如下;2.1字符查找函数字符查找函数用于在字符串中顺序查找字符,其函数原型如下:voidmemchrvoidsl,charval,intlen;其中,s1为输入字符串,val为待查找的字符,len为查找的长度范围;该函数的功能是在字符串s1中顺序搜索前len个字符以找出字符val,如果找到则返回sl中指向val的指针,如果没有找到则返回NULL;2.2指定长度的字符串比较函数指定长度的字符串比较函数用于按照指定的长度比较两个字符串的大小,其函数原型如下:charmemcmpvoids1,voids2,intlen;其中,s1和s2为输入字符串,len为比较的长度;该函数的功能是逐个比较字符串sl和s2的前len个字符,如果相等则返回0,如果字符串s1大于s2,则返回一个正数,如果字符串s1小于s2,则返回一个负数;如果两个字符串的长度小于len,该函数仍将一直比较len个字符,这种情况下,有可能结果是错误的;因此应该保证len不能超过最短字符串的长度;2.3字符串复制函数字符串复制函数用于复制指定长度的字符串,其函数原型如下:其中,dest为目标字符串,src为源字符串,len为复制的长度;该函数的功能是从src所指向的字符串中复制len个字符到dest字符串中,其返回值指向dest中的最后一个字符的指针;2.4带终止字符的字符串复制函数带终止字符的字符串复制函数用于复制字符串,如果遇到终止字符则停止复制,其函数原型如下:voidmemccpyvoiddest,voidsrc,charval,intlen;其中,dest为目标字符串,src为源字符串,val为终止字符,len为复制的长度;该函数的功能是复制字符串src中的len个字符到dest中,复制len个字符后则返回NULL;如果遇到字符val则停止复制,此时返回一个指向dest中的下一个元素的指针;2.5字符串移动函数字符串移动函数同样用于复制字符串,其函数原型如下:voidmemmovevoiddest,voidsrc,intlen;其中,dest为目标字符串,src为源字符串,len为复制长度;该函数的功能是从src所指向的字符串中复制len个字符到dest字符串中,其返回值指向dest中的最后一个字符的指针;其功能与memcpy相同,但是复制区间src与dest可以发生交迭;2.6字符串填充函数字符串填充函数用于按规定的字符填充字符串,其函数原型如下:voidmemsetvoids,charval,intlen;其中,s为待填充的字符串,val为填充字符,len为填充的长度;该函数实现的操作是用字符val来填充字符串s,共填充len个单元2.7字符串追加函数voidstrcatchars1,chars2;其中,s1为目标字符串,s2为待复制的字符串;该函数实现的操作是将字符串s2复制到字符串s1的尾部;其中字符串s1要有足够的大小来保存两个字符串;该函数的返回值指向字符串s1中的第一个字符的指针;2.8指定长度的字符串追加函数指定长度的字符串追加函数用于复制指定长度的字符串到另一个字符串的尾部,其函数原型如下:voidstrncat,chars1,chars2,intn;其中,s1为目标字符串,s2为待复制的字符串,n为复制的长度;该函数实现的操作是从字符串s2中复制n个字符添加到字符串s1的尾部;其中,如果字符串s2的长度比n小,则将全部复制字符串s2包括串结束符;2.9字符串比较函数字符串比较函数用于比较两个字符串的大小,其函数原型如下:charstrcmpchars1,chars2;其中,s1和s2为待比较的字符串;该函数的功能是比较字符串s1和s2,如果两者相等则返回0;如果s1<s2,则返回一个负数;如果s1>s2,则返回一个正数;2.10包含结束符的字符串比较函数包含结束符的字符串比较函数用于比较两个字符串的大小,其函数原型如下:charstrncmpchars1,chars2,intn;其中,s1和s2为待比较的字符串,n为比较的长度;该函数的功能是比较字符串s1和s2的前n个字符,如果两者相等则返回0;如果s1<s2,则返回一个负数;如果s1>s2,则返回一个正数;这里需要和memcmp函数相区别,如果字符串的长度小于n,则strncmp函数比较到字符串结束符后便停止,这和memcmp函数是不一样的;字符串覆盖函数用于将一个字符串覆盖另一个字符串,其函数原型如下:charstrcpychars1,chars2;其中,s1为目标字符串,s2为源字符串;该函数的功能是将字符串s2包括结束符复制到字符串s1中的第1个字符指针处;这里需要注意和strcat函数相区别,strcat 函数将字符串s2复制到字符串s1的末尾;2.12指定长度的字符串覆盖函数指定长度的字符串覆盖函数用于将一个指定长度的字符串覆盖另一个字符串,其函数原型如下:charstrncpychars1,chars2,intn;其中,s1为目标字符串,s2为源字符串,n为长度;该函数实现的操作是从字符串s2包括结束符中复制n个字符到字符串s1中的第1个字符指针处;如果字符串s2的长度小于n,则s1串以0补齐到长度n;2.13获取字符串个数函数获取字符串个数函数用于返回字符串中字符总数,其函数原型如下:charstrlenchars1;其中,s1为输入字符串;该函数的功能是获取字符串s1中的字符个数,返回值的大小不包括结尾的字符串结束符;2.14搜索字符串函数搜索字符串函数用于搜索字符串出现的位置,其函数原型如下:charstrstrconstchars1,chars2;其中,s1为目标字符串,s2为搜索的字符串;该函数实现的操作是在字符串s1中搜索第一次出现字符串s2的位置,并返回该处的指针;如果字符串s1中不包括字符串s2,则该函数返回一个空指针;搜索字符函数用于搜索字符出现的位置,其函数原型如下:charstrchrchars1,charc;其中,s1为目标字符串,c为待搜索的字符;该函数的功能是搜索字符串s1中是否包含字符c,如果包含则返回第一次指向该字符的指针,否则返回NULL;被搜索的字符可以是串结束符,此时返回值是指向串结束符的指针;2.16返回位置值的字符搜索函数返回位置值的字符搜索函数用于搜索并返回字符出现的位置,其函数原型如下:intstrposchars1,charc;其中,s1为目标字符串,c为搜索的字符;该函数的功能是查找并返回字符c在字符串s1中第一次出现的位置值,没有找到该字符则返回-1,s1串首字符的位置值是0;strpos函数的功能与strchr类似,只不过返回值不同;2.17字符包含函数字符包含函数用于检查字符串中是否包含某字符,其函数原型如下:charstrrchrchars1,charc;其中,s1为目标字符串,c为查找的字符;该函数的功能是搜索字符串s1中是否包含字符c,如果包含则返回最后一次指向该字符的指针,否则返回NULL;被搜索的字符可以是串结束符,此时返回值是指向串结束符的指针;2.18返回位置值的字符包含函数返回位置值的字符包含函数同样用于检查字符串中是否包含某字符,其函数原型如下:intstrrposchars1,charc;其中,s1为目标字符串,c为查找的字符;该函数的功能是查找并返回字符c在字符串s1中最后一次出现的位置值,没有找到该字符则返回-1,s1串首字符的位置值是2.19在指定字符集中查找不包含字符函数在指定字符集中查找不包含字符函数用于查找不包含在指定字符集中的字符,其函数原型如下:intstrspnchars1,charset;其中,s1为目标字符串,set为字符集;该函数的功能是搜索字符串s1中第一个不包含在set串中的字符,返回值是字符串s1中包括在set中的字符的个数;如果s1中所有的字符都包含在set中,则返回s1的长度不包括结束符;如果set是空字符串则返回0;2.20在指定字符集中查找包含字符函数在指定字符集中查找包含字符函数用于查找包含在指定字符集中的字符,其函数原型如下:intstrcspnchars1,charset;其中,s1为目标字符串,set为字符集;该函数的功能是搜索的是第一个包含在set串中字符,返回值是字符串s1中包括在set中的字符的个数;如果s1中所有的字符都包含在set中,则返回s1的长度不包括结束符;如果set是空字符串则返回0;2.21查找第一个包含字符函数查找第一个包含字符函数用于查找第一个包含在指定字符集中的字符,其函数原型如下:charstrpbrkchars1,charset;其中,s1为目标字符串,set为字符集;该函数的功能是搜索字符串s1中第一个包含在set串中的字符,返回值指向搜索到的字符的指针,如果未找到,则返回NULL;2.22查找最后一个包含字符函数查找最后一个包含字符函数用于查找最后一个包含在指定字符集中的字符,其函charstrrpbrkchars1,charset;其中,s1为目标字符串,set为字符集;该函数的功能是搜索字符串s1中最后一个包含在set串中的字符,返回值指向搜索到的字符的指针,如果未找到,则返回NULL; 3I/O函数I/O函数主要用于数据的输入输出等操作,C51的I/O库函数的原型声明包含在头文件STDIO.H中;这些I/O函数使用8051单片机的串行接口进行通信,因此,在使用之前需要先进行串口的初始化;例如:SCON=0x50; //串口模式1,允许接收TMOD|=0x20; //初始化T1为定时功能,模式2PCON|=0x80; //设置SMOD=1TL1=0xF4; //波特率4800bit/s,初值TH1=0xF4;IE|=0x90; //中断TR1=1; //启动定时器3.1字符读入函数字符读入函数用于从串口读入一个字符,其函数原型如下:char_getkeyvoid;该函数执行的操作是等待从8051的串口读入一个字符,并返回读入的原字符;程序示例如下:3.2字符读入输出函数字符读入输出函数用于从串口读入一个字符并输出该字符,其函数原型如下:chargetcharvoid;该函数与_getkey函数有细微的不同,其执行的操作是使用_getkey从串口读入的一个字符,然后使用putchar函数将读入的字符输出;3.3字符串读入函数字符串读入函数用于从串口读入一个字符串,其函数原型如下:chargetschars,intn;其中,s保存读入的字符串,n为字符串的长度;该函数执行的操作是使用getchar 函数从串口读入一个长度为n的字符串,并存入字符数组s中;如果遇到换行符,则结束字符的输入;输入成功时将返回传入的参数指针,失败时返回空指针NULL;3.4字符回送函数字符回送函数用于将输入的字符回送到输入缓冲区,其函数原型如下:charungetcharcharc;其中,c为输入字符;该函数执行的操作是将输入的字符回送到输入缓冲区,如果函数调用成功则返回char型值c,失败时则返回EOF;3.5字符输出函数字符输出函数用于通过8051串行口输出字符,其函数原型如下:charputcharcharc;其中,c为通过8051串行口输出的字符;3.6格式化输出函数格式化输出函数用于按照一定的格式输出数据或字符串,其函数原型如下:intprintfconstcharfmstr,argument…;该函数的功能是以一定的格式通过8051单片机的串行口输出数值和字符串;其中第一个参数fmstr是格式控制字符串,参数argument可以是字符串指针、字符或数值,该函数的返回值为实际输出的字符个数;3.7格式化内存缓冲区输出函数格式化内存缓冲区输出函数用于按照一定的格式将数据或字符串输出到内存缓冲区中,其函数原型如下:intsprintfchars,constcharfmstr,argument…;该函数执行的操作是通过指针s,将字符串送入内存数据缓冲区,并以ASCII码的形式储存;3.8字符串输出函数字符串输出函数用于将字符串和换行符写入串行口,其函数原型如下:intputsconstchars;其中,s为输出的字符串或换行符;如果执行成功则返回0,错误时返回EOF;程序示例如下:3.9格式化输入函数格式化输入函数用于将字符串和数据按照一定的格式从串口读入,其函数原型如下:intscanfconstcharfmstr,argument…;该函数的功能是在格式字符的控制下从串行口读入数据;其中每个参数都必须是指针;scanf返回值是所发现并转换的输入项数,如遇到错误则返回EOF;该函数的格式控制字符串形式如下,方括号内是可选项;%width{Bhl}type3.10格式化内存缓冲区输入函数格式化内存缓冲区输入函数用于将格式化的字符串和数据送入数据缓冲区,其函数原型如下:intsscanfchars,constcharfmstr,argument…;该函数的功能是将输入的字符串通过指针s指向的数据缓冲区;输入数据根据格式控制字符串fmstr被存放到由argument指定的地址;其它方面,sscanf函数与scanf函数类似;3.11字符串内存输出函数字符串内存输出函数用于将格式化字符串输出到内存数据缓冲区,其函数原型如下:intvprintfconstcharfmstr,charargptr;其中,fmstr为格式化字符串,argptr指向变量表的指针而不是变量表,函数返回值为实际写入到输出字符串中的字符数;其它方面,vprintf函数与printf函数类似;3.12指向缓冲区的输出函数指向缓冲区的输出函数用于将格式化字符串和数字输出到由指针所指向的内存数据缓冲区,其函数原型如下:intvsprintfchars,constcharfmstr,charargptr;该函数执行的操作是将格式化字符串和数字输出到由指针所指向的内存数据缓冲区;其中,该函数接受的是一个指向变量表的指针而不是变量表,其返回值为实际写入到输出字符串中的字符数;其他方面vsprintf函数与sprintf函数类似;4数学函数数学函数主要用于进行数学运算,其原型声明包含在头文件MATH.H中;下面介绍一些常用的数学函数;4.1绝对值函数绝对值函数用于计算并返回输出数据的绝对值;按照其操作数的数据类型的不同,有如下几种形式:intabsintval;charcabscharval;floatfabsfloatval;longlabslongval这些函数分别用于计算整型、字符型、浮点型以及长整型数据的绝对值;4.2指数以及对数函数指数函数用于计算并返回输出数据的指数;对数函数用于计算并返回输出数据的对数;其函数原型示例如下:floatexpfloatx;floatlogfloatx;floatlog10floatx;floatsqrtfloatx;其中exp函数用于计算并返回浮点数x的指数,log函数用于计算并返回浮点数x 的自然对数自然对数以e为底,e=2.718282,log10函数用于计算并返回浮点数x的以10为底的对数值,sqrt函数用于计算并返回浮点数x的平方根;4.3三角函数三角函数用于计算数学中三角函数的值;在C51语言中包含如下几种三角函数:floatcosfloatx;floatsinfloatx;floattanfloatx;floatacosfloatx;floatasinfloatx;floatatanfloatx;floatatan2floaty,floatx;floatcoshfloatx;floatsinhfloatx;floattanhfloatx;4.4取整函数取整函数用于取输入数据的整数;在C51语言中,包含两类取整函数,示例如下:floatceilfloatx;floatfloorfloatx;其中ceil函数用于计算并返回一个不小于x的最小正整数作为浮点数,floor函数用于计算并返回一个不大于x的最小正整数作为浮点数;4.5浮点型分离函数浮点型分离函数用于将浮点型数据的整数和小数部分分开,其函数原型如下:floatmodffloatx,floatip;函数modf将浮点数x分成整数和小数两部分,整数部分放入ip,返回值为小数部分;两者都含有与x相同的符号;4.6幂函数幂函数用于进行幂指数运算;其函数原型如下:floatpowfloatx,floaty;该函数用于计算并返回xy的值;如果x不等于0而y=0,则返回1;当x=0且y<=0或x<0且y不是整数时,返回NaN;5标准函数标准函数主要用于完成数据类型转换以及存储器分配等操作;标准函数的原型声明包含在头文件STDLIB.H中;下面介绍常用的一些函数;5.1字符串转换函数字符串转换函数用于将字符串转换成数值类型并输出;根据输出数值类型的不同,可以有如下几种形式:floatatoicharsl;floatatolcharsl;floatatofcharsl;其中,atoi函数用于将字符串sl转换成整型数值并返回该值;输入字符串的格式为:whitespace{+/-}数字;其中,whitespace可由空格、/、制表符组成;这里的数字可以是一个或多个十进制数;5.2带返回指针的字符串转换函带返回指针的字符串转换函数将字符串转换成数值类型并输出,同时返回未转换部分的指针;根据输出数值类型的不同,可以有如下几种形式:floatstrtodconstchars,charptr;longstrtolconstchars,charptr,unsignedcharbase;unsignerlongstrtoulconstchars,charptr,unsignedcharbase;5.3随机函数随机函数用于产生伪随机数;在C51语言中,包含两种随机函数,其函数声明如下:intrand;voidsrandintn;其中,函数rand用于返回一个0到32767之间的伪随机数,而函数srand用来初始化随机数发生器的随机种子;如果不使用srand函数,则对rand函数的相继调用将产生相同的随机序列;5.4数组内存分配函数数组内存分配函数用于为n个元素的数组分配内存空间,其函数原型如下:voidcallocunsighedintn,unsighedintsize;其中n数组元素的个数,size为数组中每个元素的大小;该函数所分配的内存区域用0进行初始化;返回值为已分配的内存单元起始地址,如果不成功则返回0; 5.5释放内存函数释放内存函数用于释放前面已分配的内存空间,其函数原型如下:voidfreevoidxdatap;其中,指针p指向待释放的存储区域;p必须是以前用calloc、malloc或realloc 函数分配的存储区域,如果p为NULL,则该函数无效;经free函数所被释放的存储区域可以参与以后的分配;5.6初始化内存函数初始化内存函数用于对前面申请的内存进行初始化,其函数原型如下:voidinit_mempoolvoidxdatap,unsighedintsize;其中,指针p表示存储区首地址,size表示存储区大小;该函数可对被函数calloc、malloc、free或realloc管理的存储区域进行初始化;5.7内存分配函数内存分配函数用于在内存中分配指定大小的存储空间,其函数原型如下:voidmallocunsighedintsize;其中,size为分配的空间大小,返回值为指向所分配内存的指针;如果返回NULL,则表示没有足够的内存空间可用;5.8调整内存大小函数调整内存大小函数用于调整先前分配的存储器区域大小,其函数原型如下:voidreallocvoidxdatap,unsighedintsize;其中,参数p表示该存储区域的起始地址,参数size表示新分配的存储区域大小;该函数的返回值为新区域所指向的指针;如果返回NULL,则表示没有足够的内存空间可用;原存储器区域的内容被复制到新存储器区域中,如果新存储器区域较大,多出的区域不作初始化;6内部函数内部函数的原型声明包含在头文件INTRINS.H中;下面介绍常用的一些函数; 6.1循环左移函数循环左移函数主要用于将数据按照二进制循环左移n位;按照操作数据类型的不同,其函数原型如下几种形式:unsighedchar _crol_unsighedcharval,unsighedcharn;unsighedint _irol_unsighedintval,unsighedcharn;unsighedlong _lrol_unsighedlongval,unsighedcharn;其中,val为待移位的变量,n为循环移位的次数;函数_crol_、_irol_和_lrol_分别用于字符型、整型和长整形变量的循环左移,其返回值分别为移位后的字符型、整型和长整形;该函数与8051单片机的RLA指令相关;6.2循环右移函数循环右移函数主要用于将数据按照二进制循环右移n位;按照操作数据类型的不同,其函数原型如下几种形式:unsighedchar _cror_unsighedcharval,unsighedcharn;unsighedint _iror_unsighedintval,unsighedcharn;unsighedlong _lror_unsighedlongval,unsighedcharn;其中,val为待移位的变量,n为循环移位的次数;函数_cror_、_iror_和_lror_分别用于字符型、整型和长整形变量的循环右移,其返回值分别为移位后的字符型、整型和长整形;该函数与8051单片机的RRA指令相关;6.3延时函数延时函数用于使单片机程序产生延时,其函数原型如下:void_nop_void;该函数类似于8051单片机的NOP指令;程序示例如下:include<intrins.h> //头文件include<reg51.h>void mainvoid //主函数。
lpc17库函数
LPC17库函数是指用于LPC17系列微控制器的软件库函数。
LPC17系列微控制器是由恩智浦(NXP)公司推出的一系列
32位ARM Cortex-M3内核的低功耗微控制器。
LPC17库函数是为了方便用户使用LPC17微控制器而提供的
一组封装好的函数。
这些函数封装了底层的硬件接口和操作,用户只需调用库函数即可完成相应功能的操作,无需了解底层细节。
LPC17库函数包括了各种常用功能的函数,如GPIO控制、中
断处理、定时器、串口通信、ADC/DAC转换、PWM输出等。
通过调用这些库函数,用户可以快速实现各种功能的开发,节省了开发时间和复杂度。
用户可以在LPC17系列微控制器的开发环境中链接LPC17库
函数,并参考相应的库函数文档来使用函数。
在使用库函数之前,用户需要先初始化相关的外设和引脚,并设置相应的参数,然后就可以调用库函数来进行相应的操作。
LPC17库函数的使用可以简化LPC17系列微控制器的开发过程,提高开发效率。
同时,库函数的封装也保证了代码的可重用性和可移植性,方便在不同的项目中复用。
LPC1768之GPIO输入和输出配置基础例程**************************************** Copyright (c) CaKen************************************************************************************* *******************************************文件名 : main.c**作者 : CaKen**版本号 : V1.0**时间 : 2014.08.13**功能描述 : GPIO实验测试************************************************* ****************************************************************************************** *****************************************#include "LPC17xx.h" * LPC17xx外设寄存器*/************************************************* *****************************************变量与宏定义************************************************* *****************************************#define BEEP (1 ;FIOPIN & (1 ;FIOPIN & (1 ;FIOPIN & (1 ;FIOPIN & (1 ;FIODIR |= BEEP;LPC_GPIO0->;FIOSET |= BEEP * 蜂鸣器关 */#define BEEPON() LPC_GPIO0->;FIODIR |=BEEP;LPC_GPIO0->;FIOCLR |= BEEP * 蜂鸣器开 */ #define LED1 (1 ;FIODIR |=LED1;LPC_GPIO2->;FIOSET |= LED1 * LED1关 */ #define LED1ON() LPC_GPIO2->;FIODIR |=LED1;LPC_GPIO2->;FIOCLR |= LED1 * LED1开 */ #define LED2OFF() LPC_GPIO2->;FIODIR |=LED2;LPC_GPIO2->;FIOSET |= LED2 * LED2关 */ #define LED2ON() LPC_GPIO2->;FIODIR |=LED2;LPC_GPIO2->;FIOCLR |= LED2 * LED2开 */ #define LED3OFF() LPC_GPIO2->;FIODIR |=LED3;LPC_GPIO2->;FIOSET |= LED3 * LED1关 */ #define LED3ON() LPC_GPIO2->;FIODIR |=LED3;LPC_GPIO2->;FIOCLR |= LED3 * LED1开 */#define LED4OFF() LPC_GPIO2->;FIODIR |=LED4;LPC_GPIO2->;FIOSET |= LED4 * LED2关 */#define LED4ON() LPC_GPIO2->;FIODIR |=LED4;LPC_GPIO2->;FIOCLR |= LED4 * LED2开 */ ************************************************* ******************************************* Function name: GPIO_Init** Descriptions: GPIO初始化** input parameters: 无** output parameters: 无** Returned value: 无************************************************* *****************************************void GPIO_Init (void){LPC_PINCON->;PINSEL0 &= ~(0x03 ;PINSEL4 &=0XF00FFF00; * 配置P2.0~P2.3和P2.10~P2.13为GPIO */LPC_GPIO0->;FIODIR |= BEEP; * 配置P0.11即BEEP为输出 1 */LPC_GPIO2->;FIODIR |= 0X000000FF; * 配置P2.0~P2.3为输出 1 */LPC_GPIO2->;FIODIR &= 0XFFC3FFFF; * 配置P2.10~P2.13为输入 0 */}************************************************* ******************************************** Function name: main** Descriptions: 用户程序入口函数,P0.26脚控制蜂鸣器,** 每按下KEY1,蜂鸣器响一声** input parameters: 无** output parameters: 无** Returned value: 无************************************************* *******************************************int main (void){SystemInit(); * 系统初始化 */GPIO_Init(); * GPIO始化 */while (1) {if (KEY1 == 0) { * 如果KEY1按下,蜂鸣器鸣叫 */BEEPON();LED1ON();} else { * 松开则停止蜂鸣 */BEEPOFF();LED1OFF();}if (KEY2 == 0) {LED2ON();} else { /松开则LED2灭 */ LED2OFF();}if (KEY3 == 0) {LED3ON();} else {LED3OFF();}if (KEY4 == 0) {LED4ON();} else {LED4OFF();} } }。
c 标准库函数手册C 标准库函数手册。
C 标准库函数是 C 语言提供的一组函数库,它包含了一系列常用的函数,可以帮助程序员更高效地完成各种任务。
本手册将介绍 C 标准库函数的常用函数及其用法,帮助读者更加深入地理解和运用这些函数。
一、stdio.h。
stdio.h 是 C 语言中用来进行输入输出操作的头文件,它包含了一系列与标准输入输出相关的函数。
其中,最常用的函数包括 printf、scanf、fopen、fclose 等。
这些函数可以帮助程序员进行屏幕输出、键盘输入、文件读写等操作。
例如,printf 函数可以用来向屏幕输出格式化的字符串,而 scanf 函数则可以用来从键盘接收输入并存储到变量中。
二、stdlib.h。
stdlib.h 是 C 语言中的标准库头文件之一,它包含了一系列与内存分配、随机数生成、字符串转换等功能相关的函数。
其中,最常用的函数包括 malloc、free、rand、atoi 等。
这些函数可以帮助程序员进行动态内存分配、随机数生成、字符串转换等操作。
例如,malloc 函数可以用来动态分配指定大小的内存空间,而 rand 函数则可以用来生成一个指定范围内的随机数。
三、math.h。
math.h 是 C 语言中的标准数学库头文件,它包含了一系列与数学运算相关的函数。
其中,最常用的函数包括 sin、cos、sqrt、pow 等。
这些函数可以帮助程序员进行各种数学运算,如三角函数计算、平方根计算、幂运算等。
例如,sin 函数可以用来计算给定角度的正弦值,而 sqrt 函数则可以用来计算一个数的平方根。
四、string.h。
string.h 是 C 语言中的标准字符串库头文件,它包含了一系列与字符串操作相关的函数。
其中,最常用的函数包括 strlen、strcpy、strcat、strcmp 等。
这些函数可以帮助程序员进行字符串的长度计算、复制、连接、比较等操作。
例如,strlen 函数可以用来计算一个字符串的长度,而 strcpy 函数则可以用来将一个字符串复制到另一个字符串中。
一、创建工作项目第一步,建立工作目录:这一步完全按照个人的使用习惯,比如我会在文件夹中建立五个子目录,分别是usr ,用来放置上层的程序文件;cm3,用来存放内核与底层设备文件;driver ,用来放置模块驱动文件;obj ,用来放置编译的中间文件和生成的二进制文件,如*.axf 文件;lst ,用来放置编译的列表文件。
cm3中的文件有:core_cm3.c, core_cm3.h, LPC17xx.h, system_LPC17xx.c, system_LPC17xx.h, type.h 和startup_LPC17xx.s 。
其中startup_LPC17xx.s 可由keil 自动生成,其它的文件可从NXP 的官方网站中下载。
lst 和obj 的文件夹中的文件由keil 自动生成。
第二步,建立项目:将项目文件放到项目文件夹中就可以了,接着会让你选择CPU的型号:接下来会出现是否生成启动文件,选是,会生成startup_LPC17xx.s,我将其放入了cm3文件夹中。
接下来就是建立项目虚拟文件夹,并将内核文件等已有的文件加入项目中最后我们的目录是:然后我们建立主函数入口程序:建立一个最简单的主函数,然后另存到真实目录usr中,然后加载到虚拟目录usr中完成后为:第三步,设定各项参数:其中在Output和Listing中,分别把目录设为Obj和lst,具体可见教程中,我们主要说C/C++、Debug和Utilities的选项。
其中,Define中可以填写需要预定义的宏,Optimization中的Level 0(-O0)表示优化参数,Level后面的数字越大,表示优化程度越高,但是优化程度的提高可能导致Debug的失败,因此我们一般选择0,等到程序全部测试成功后再用高优化参数进行编译。
Simulator表示使用虚拟仿真技术,也就是Keil自带的ARM虚拟机来进行仿真,一般我们使用时会选中下面的Limit Speed to Real-Time,使虚拟机的时钟和实际的时间保持一致。
常用C语言标准库函数C语言编译系统提供了众多的预定义库函数和宏。
用户在编写程序时,可以直接调用这些库函数和宏。
这里选择了初学者常用的一些库函数,简单介绍了各函数的用法和所在的头文件。
1.测试函数Isalnum原型:int isalnum(int c)功能:测试参数c是否为字母或数字:是则返回非零;否则返回零头文件:ctype.hIsapha原型:int isapha(int c)功能:测试参数c是否为字母:是则返回非零;否则返回零头文件:ctype.hIsascii原型:int isascii(int c)功能:测试参数c是否为ASCII码(0x00~0x7F):是则返回非零;否则返回零头文件:ctype.hIscntrl原型:int iscntrl(int c)功能:测试参数c是否为控制字符(0x00~0x1F、0x7F):是则返回非零;否则返回零头文件:ctype.hIsdigit原型:int isdigit(int c)功能:测试参数c是否为数字:是则返回非零;否则返回零。
头文件:ctype.hIsgraph原型:int isgraph(int c)功能:测试参数c是否为可打印字符(0x21~0x7E):是则返回非零;否则返回零头文件:ctype.hIslower原型:int islower(int c)功能:测试参数c是否为小写字母:是则返回非零;否则返回零头文件:ctype.hIsprint原型:int isprint(int c)功能:测试参数c是否为可打印字符(含空格符0x20~0x7E):是则返回非零;否则返回零头文件:ctype.hIspunct原型:int ispunct(int c)功能:测试参数c是否为标点符号:是则返回非零;否则返回零头文件:ctype.hIsupper原型:int isupper(inr c)功能:测试参数c是否为大写字母:是则返回非零;否则返回零Isxdigit原型:int isxdigit(int c)功能:测试参数c是否为十六进制数:是则返回非零;否则返回零2.数学函数abs原型:int abs(int i)功能:返回整数型参数i的绝对值头文件:stdlib.h,math.hacos原型:double acos(double x)功能:返回双精度参数x的反余弦三角函数值头文件:math.hasin原型:double asin(double x)功能:返回双精度参数x的反正弦三角函数值头文件:math.hatan原型:double atan(double x)功能:返回双精度参数的反正切三角函数值头文件:math.hatan2原型:double atan2(double y,double x)功能:返回双精度参数y和x由式y/x所计算的反正切三角函数值头文件:math.hcabs原型:double cabs(struct complex znum)功能:返回一个双精度数,为计算出复数znum的绝对值。
C语言库函数手册转载说明:可能有些函数已经过时,但从学习的角度来看,还是有一定的参考价值。
分类函数,所在函数库为ctype.hint isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否则返回0int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或数字('0'-'9')返回非0值,否则返回0int isascii(int ch) 若ch是字符(ASCII码中的0-127)返回非0值,否则返回0int iscntrl(int ch) 若ch是作废字符(0x7F)或普通控制字符(0x00-0x1F)返回非0值,否则返回0int isdigit(int ch) 若ch是数字('0'-'9')返回非0值,否则返回0int isgraph(int ch) 若ch是可打印字符(不含空格)(0x21-0x7E)返回非0值,否则返回0 int islower(int ch) 若ch是小写字母('a'-'z')返回非0值,否则返回0int isprint(int ch) 若ch是可打印字符(含空格)(0x20-0x7E)返回非0值,否则返回0 int ispunct(int ch) 若ch是标点字符(0x00-0x1F)返回非0值,否则返回0int isspace(int ch) 若ch是空格(' '),水平制表符('\t'),回车符('\r'),走纸换行('\f'),垂直制表符('\v'),换行符('\n')返回非0值,否则返回0int isupper(int ch) 若ch是大写字母('A'-'Z')返回非0值,否则返回0int isxdigit(int ch) 若ch是16进制数('0'-'9','A'-'F','a'-'f')返回非0值,否则返回0int tolower(int ch) 若ch是大写字母('A'-'Z')返回相应的小写字母('a'-'z')int toupper(int ch) 若ch是小写字母('a'-'z')返回相应的大写字母('A'-'Z')数学函数,所在函数库为math.h、stdlib.h、string.h、float.hint abs(int i) 返回整型参数i的绝对值double cabs(struct complex znum) 返回复数znum的绝对值double fabs(double x) 返回双精度参数x的绝对值long labs(long n) 返回长整型参数n的绝对值double exp(double x) 返回指数函数ex的值double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存贮在eptr中double ldexp(double value,int exp); 返回value*2exp的值double log(double x) 返回logex的值double log10(double x) 返回log10x的值double pow(double x,double y) 返回xy的值double pow10(int p) 返回10p的值double sqrt(double x) 返回+√x的值double acos(double x) 返回x的反余弦cos-1(x)值,x为弧度double asin(double x) 返回x的反正弦sin-1(x)值,x为弧度double atan(double x) 返回x的反正切tan-1(x)值,x为弧度double atan2(double y,double x) 返回y/x的反正切tan-1(x)值,y的x为弧度double cos(double x) 返回x的余弦cos(x)值,x为弧度double sin(double x) 返回x的正弦sin(x)值,x为弧度double tan(double x) 返回x的正切tan(x)值,x为弧度double cosh(double x) 返回x的双曲余弦cosh(x)值,x为弧度double sinh(double x) 返回x的双曲正弦sinh(x)值,x为弧度double tanh(double x) 返回x的双曲正切tanh(x)值,x为弧度double hypot(double x,double y) 返回直角三角形斜边的长度(z),x和y为直角边的长度,z2=x2+y2double ceil(double x) 返回不小于x的最小整数double floor(double x) 返回不大于x的最大整数void srand(unsigned seed) 初始化随机数发生器int rand() 产生一个随机数并返回这个数double poly(double x,int n,double c[])从参数产生一个多项式double modf(double value,double *iptr)将双精度数value分解成尾数和阶double fmod(double x,double y) 返回x/y的余数double frexp(double value,int *eptr) 将双精度数value分成尾数和阶double atof(char *nptr) 将字符串nptr转换成浮点数并返回这个浮点数double atoi(char *nptr) 将字符串nptr转换成整数并返回这个整数double atol(char *nptr) 将字符串nptr转换成长整数并返回这个整数char *ecvt(double value,int ndigit,int *decpt,int *sign)将浮点数value转换成字符串并返回该字符串char *fcvt(double value,int ndigit,int *decpt,int *sign)将浮点数value转换成字符串并返回该字符串char *gcvt(double value,int ndigit,char *buf)将数value转换成字符串并存于buf中,并返回buf的指针char *ultoa(unsigned long value,char *string,int radix)将无符号整型数value转换成字符串并返回该字符串,radix为转换时所用基数char *ltoa(long value,char *string,int radix)将长整型数value转换成字符串并返回该字符串,radix为转换时所用基数char *itoa(int value,char *string,int radix)将整数value转换成字符串存入string,radix为转换时所用基数double atof(char *nptr) 将字符串nptr转换成双精度数,并返回这个数,错误返回0int atoi(char *nptr) 将字符串nptr转换成整型数, 并返回这个数,错误返回0long atol(char *nptr) 将字符串nptr转换成长整型数,并返回这个数,错误返回0 double strtod(char *str,char **endptr)将字符串str转换成双精度数,并返回这个数, long strtol(char *str,char **endptr,int base)将字符串str转换成长整型数,并返回这个数,int matherr(struct exception *e)用户修改数学错误返回信息函数(没有必要使用)double _matherr(_mexcep why,char *fun,double *arg1p,double *arg2p,double retval)用户修改数学错误返回信息函数(没有必要使用)unsigned int _clear87() 清除浮点状态字并返回原来的浮点状态void _fpreset() 重新初使化浮点数学程序包unsigned int _status87() 返回浮点状态字目录函数,所在函数库为dir.h、dos.hint chdir(char *path) 使指定的目录path(如:"C:\\WPS")变成当前的工作目录,成功返回0int findfirst(char *pathname,struct ffblk *ffblk,int attrib)查找指定的文件,成功返回0pathname为指定的目录名和文件名,如"C:\\WPS\\TXT"ffblk为指定的保存文件信息的一个结构,定义如下:┏━━━━━━━━━━━━━━━━━━┓┃struct ffblk ┃┃{ ┃┃ char ff_reserved[21]; /*DOS保留字*/┃┃ char ff_attrib; /*文件属性*/ ┃┃ int ff_ftime; /*文件时间*/ ┃┃ int ff_fdate; /*文件日期*/ ┃┃ long ff_fsize; /*文件长度*/ ┃┃ char ff_name[13]; /*文件名*/ ┃┃} ┃┗━━━━━━━━━━━━━━━━━━┛attrib为文件属性,由以下字符代表┏━━━━━━━━━┳━━━━━━━━┓┃FA_RDONLY 只读文件┃FA_LABEL 卷标号┃┃FA_HIDDEN 隐藏文件┃FA_DIREC 目录┃┃FA_SYSTEM 系统文件┃FA_ARCH 档案┃┗━━━━━━━━━┻━━━━━━━━┛例:struct ffblk ff;findfirst("*.wps",&ff,FA_RDONLY);int findnext(struct ffblk *ffblk) 取匹配finddirst的文件,成功返回0void fumerge(char *path,char *drive,char *dir,char *name,char *ext) 此函数通过盘符drive(C:、A:等),路径dir(\TC、\BC\LIB等),文件名name(TC、WPS等),扩展名ext(.EXE、.COM等)组成一个文件名存与path中.int fnsplit(char *path,char *drive,char *dir,char *name,char *ext) 此函数将文件名path分解成盘符drive(C:、A:等),路径dir(\TC、\BC\LIB等),文件名name(TC、WPS等),扩展名ext(.EXE、.COM等),并分别存入相应的变量中.int getcurdir(int drive,char *direc) 此函数返回指定驱动器的当前工作目录名称drive 指定的驱动器(0=当前,1=A,2=B,3=C等)direc 保存指定驱动器当前工作路径的变量成功返回0char *getcwd(char *buf,iint n) 此函数取当前工作目录并存入buf中,直到n个字节长为为止.错误返回NULLint getdisk() 取当前正在使用的驱动器,返回一个整数(0=A,1=B,2=C等)int setdisk(int drive) 设置要使用的驱动器drive(0=A,1=B,2=C等), 返回可使用驱动器总数int mkdir(char *pathname) 建立一个新的目录pathname,成功返回0int rmdir(char *pathname) 删除一个目录pathname,成功返回0char *mktemp(char *template) 构造一个当前目录上没有的文件名并存于template中char *searchpath(char *pathname) 利用MSDOS找出文件filename所在路径,,此函数使用DOS的PATH变量,未找到文件返回NULL进程函数,所在函数库为stdlib.h、process.hvoid abort() 此函数通过调用具有出口代码3的_exit写一个终止信息于stderr,并异常终止程序。
实验3、定时器实验【实验目的】1.掌握LPC1768函数库的使用;2.掌握LPC1768定时器的编程;3.掌握LPC1768脉宽调制的编程;4.了解中断服务函数的编写方法。
【实验步骤】1.用定时器中断的实现1Hz的方波,在P2.0上的LED进行显示。
2.用定时器的匹配功能实现1路1Hz的PWM,在P2.0上的LED进行显示。
3.用硬件PWM实现6路1Hz的PWM,在P2.0--P2.6上的LED进行显示。
4.用定时器中断实现时分秒时钟,在LCD进行显示,并用按键对小时和分钟进行修改。
【实验程序】1、定时器中断程序******************************************************************************/ #include "LPC17xx.h"#include "lpc17xx_clkpwr.h"#include "lpc17xx_timer.h"#include "lpc17xx_nvic.h"#include "lpc17xx_gpio.h"void Timer_init(){TIM_TIMERCFG_Type TMR_Cfg;TIM_MATCHCFG_Type TMR_Match;/* definition for led *//* On reset, Timer0/1 are enabled (PCTIM0/1 = 1), and Timer2/3 are disabled (PCTIM2/3 = 0).*//* Initialize timer 0, prescale count time of 1000uS */TMR_Cfg.PrescaleOption = TIM_PRESCALE_USV AL;TMR_Cfg.PrescaleValue = 1000;TIM_Init(LPC_TIM0, TIM_TIMER_MODE, &TMR_Cfg);/* Use channel 0, MR0 */TMR_Match.MatchChannel = 0;/* Enable interrupt when MR0 matches the value in TC register */TMR_Match.IntOnMatch = ENABLE;/* Enable reset on MR0: TIMER will reset if MR0 matches it */TMR_Match.ResetOnMatch = TRUE;/* Don't stop on MR0 if MR0 matches it*/TMR_Match.StopOnMatch = FALSE;/* Do nothing for external output pin if match (see cmsis help, there are another options) */TMR_Match.ExtMatchOutputType = TIM_EXTMATCH_NOTHING;/* Set Match value, count value of 200 (200 * 1000uS = 200000us = 0.2s --> 5 Hz) */TMR_Match.MatchValue = 499;/* Set configuration for Tim_config and Tim_MatchConfig */TIM_ConfigMatch(LPC_TIM0, &TMR_Match);/* Preemption = 1, sub-priority = 1 */NVIC_SetPriority(TIMER0_IRQn, ((0x01<<3)|0x01));/* Enable interrupt for timer 0 */NVIC_EnableIRQ(TIMER0_IRQn);/* Start timer 0 */TIM_Cmd(LPC_TIM0, ENABLE);}void TIMER0_IRQHandler (void){static uint8_t m=0;if(TIM_GetIntStatus(LPC_TIM0,TIM_MR0_INT)==SET){if(m==0){GPIO_SetValue(2,1); m=1;}else{GPIO_ClearValue(2,1); m=0;}TIM_ClearIntPending(LPC_TIM0,TIM_MR0_INT);}return;}int main (void){SystemInit();Timer_init();GPIO_SetDir(0,1<<21,1);GPIO_SetValue(0,1<<21);GPIO_SetDir(2,0xff,1);GPIO_ClearValue(2,0xff);while(1);}2、软件PWM程序#include "LPC17xx.h"#include "lpc17xx_clkpwr.h"#include "lpc17xx_timer.h"#include "lpc17xx_nvic.h"#include "lpc17xx_gpio.h"void Timer_init(){TIM_TIMERCFG_Type TMR_Cfg;TIM_MATCHCFG_Type TMR_Match;/* definition for led *//* On reset, Timer0/1 are enabled (PCTIM0/1 = 1), and Timer2/3 are disabled (PCTIM2/3 = 0).*//* Initialize timer 0, prescale count time of 1000uS */TMR_Cfg.PrescaleOption = TIM_PRESCALE_USV AL;TMR_Cfg.PrescaleValue = 1000;TIM_Init(LPC_TIM0, TIM_TIMER_MODE, &TMR_Cfg);/* Use channel 0, MR0 */TMR_Match.MatchChannel = 0;/* Enable interrupt when MR0 matches the value in TC register */TMR_Match.IntOnMatch = ENABLE;/* Enable reset on MR0: TIMER will reset if MR0 matches it */TMR_Match.ResetOnMatch = TRUE;/* Don't stop on MR0 if MR0 matches it*/TMR_Match.StopOnMatch = FALSE;/* Do nothing for external output pin if match (see cmsis help, there are another options) */TMR_Match.ExtMatchOutputType = TIM_EXTMATCH_NOTHING;/* Set Match value, count value of 200 (200 * 1000uS = 200000us = 0.2s --> 5 Hz) */TMR_Match.MatchValue = 99;/* Set configuration for Tim_config and Tim_MatchConfig */TIM_ConfigMatch(LPC_TIM0, &TMR_Match);TMR_Match.MatchChannel = 1;TMR_Match.ResetOnMatch = FALSE;TMR_Match.IntOnMatch = ENABLE;TMR_Match.MatchValue = 10;TIM_ConfigMatch(LPC_TIM0, &TMR_Match);/* Preemption = 1, sub-priority = 1 */NVIC_SetPriority(TIMER0_IRQn, ((0x01<<3)|0x01));/* Enable interrupt for timer 0 */NVIC_EnableIRQ(TIMER0_IRQn);/* Start timer 0 */TIM_Cmd(LPC_TIM0, ENABLE);}void TIMER0_IRQHandler (void){if(TIM_GetIntStatus(LPC_TIM0,TIM_MR0_INT)==SET){GPIO_SetValue(2,1);TIM_ClearIntPending(LPC_TIM0,TIM_MR0_INT);}if(TIM_GetIntStatus(LPC_TIM0,TIM_MR1_INT)==SET) {GPIO_ClearValue(2,1);TIM_ClearIntPending(LPC_TIM0,TIM_MR1_INT);}return;}int main (void){SystemInit();Timer_init();GPIO_SetDir(0,1<<21,1);GPIO_SetValue(0,1<<21);GPIO_SetDir(2,0xff,1);GPIO_SetValue(2,1);while(1);}3、硬件PWM#include "lpc17xx_pwm.h"#include "lpc17xx_pinsel.h"#include "lpc_types.h"void PWM_Dual(void){uint8_t temp;PWM_TIMERCFG_Type PWMCfgDat;PWM_MATCHCFG_Type PWMMatchCfgDat;PINSEL_CFG_Type PinCfg;/* PWM block section -------------------------------------------- */ /* Initialize PWM peripheral, timer mode* PWM prescale value = 1 (absolute value - tick value)*/PWMCfgDat.PrescaleOption = PWM_TIMER_PRESCALE_TICKV AL; PWMCfgDat.PrescaleValue = 300000;PWM_Init(LPC_PWM1, PWM_MODE_TIMER, (void *) &PWMCfgDat);/** Initialize PWM pin connect*/PinCfg.Portnum = 2;PinCfg.Funcnum = 1;PinCfg.OpenDrain=0;PinCfg.Pinmode = 0;for (temp=0; temp<6; temp++){PinCfg.Pinnum=temp;PINSEL_ConfigPin(&PinCfg);}/* Set match value for PWM match channel 0 = 100, update immediately */ PWM_MatchUpdate(LPC_PWM1, 0, 100, PWM_MATCH_UPDATE_NOW); /* PWM Timer/Counter will be reset when channel 0 matching* no interrupt when match* no stop when match*/PWMMatchCfgDat.IntOnMatch = DISABLE;PWMMatchCfgDat.MatchChannel = 0;PWMMatchCfgDat.ResetOnMatch = ENABLE;PWMMatchCfgDat.StopOnMatch = DISABLE;PWM_ConfigMatch(LPC_PWM1, &PWMMatchCfgDat);/* Match value setting ------------------------------------ */PWM_MatchUpdate(LPC_PWM1, 1, 10, PWM_MATCH_UPDATE_NOW); PWM_MatchUpdate(LPC_PWM1, 2, 20, PWM_MATCH_UPDATE_NOW); PWM_MatchUpdate(LPC_PWM1, 3, 30, PWM_MATCH_UPDATE_NOW); PWM_MatchUpdate(LPC_PWM1, 4, 40, PWM_MATCH_UPDATE_NOW); PWM_MatchUpdate(LPC_PWM1, 5, 50, PWM_MATCH_UPDATE_NOW); PWM_MatchUpdate(LPC_PWM1, 6, 60, PWM_MATCH_UPDATE_NOW);/* Match option setting ------------------------------------ */PWMMatchCfgDat.IntOnMatch = DISABLE;PWMMatchCfgDat.ResetOnMatch = DISABLE;PWMMatchCfgDat.StopOnMatch = DISABLE;for(temp = 0; temp < 6; temp++){PWMMatchCfgDat.MatchChannel = temp+1;PWM_ConfigMatch(LPC_PWM1, &PWMMatchCfgDat);}/* Enable PWM Channel Output ------------------------------------ */ PWM_ChannelCmd(LPC_PWM1, 1, ENABLE);PWM_ChannelCmd(LPC_PWM1, 2, ENABLE);PWM_ChannelCmd(LPC_PWM1, 3, ENABLE);PWM_ChannelCmd(LPC_PWM1, 4, ENABLE);PWM_ChannelCmd(LPC_PWM1, 5, ENABLE);PWM_ChannelCmd(LPC_PWM1, 6, ENABLE);/* Reset and Start counter */PWM_ResetCounter(LPC_PWM1);PWM_CounterCmd(LPC_PWM1, ENABLE);/* Start PWM now */PWM_Cmd(LPC_PWM1, ENABLE);}int main (void){int mm,ts;GPIO_SetDir(0,1<<21,1);GPIO_SetValue(0,1<<21);GPIO_SetDir(2,3<<6,1);GPIO_ClearValue(2,3<<6);SystemInit();PWM_Dual();while(1);}4、时钟LCD#include "LPC17xx.h"#include "lpc17xx_clkpwr.h"#include "lpc17xx_timer.h"#include "lpc17xx_nvic.h"#include "lpc17xx_gpio.h"#include "string.h"#include "GLCD.h"#define SELECT (1<<25)#define DOWN (1<<26)#define LEFT (1<<27)#define RIGHT (1<<28)#define UP (1<<29)char shi=23,fen=59,miao=0,ds=0;int ss=0,ms=0;void TIMER0_IRQHandler (void);void TIMER1_IRQHandler (void);void Timer_init(){TIM_TIMERCFG_Type TMR_Cfg;TIM_MATCHCFG_Type TMR_Match;/* definition for led *//* On reset, Timer0/1 are enabled (PCTIM0/1 = 1), and Timer2/3 are disabled (PCTIM2/3 = 0).*//* Initialize timer 0, prescale count time of 1000uS */TMR_Cfg.PrescaleOption = TIM_PRESCALE_USV AL;TMR_Cfg.PrescaleValue = 1000;TIM_Init(LPC_TIM0, TIM_TIMER_MODE, &TMR_Cfg);/* Use channel 0, MR0 */TMR_Match.MatchChannel = 0;/* Enable interrupt when MR0 matches the value in TC register */TMR_Match.IntOnMatch = ENABLE;/* Enable reset on MR0: TIMER will reset if MR0 matches it */TMR_Match.ResetOnMatch = TRUE;/* Don't stop on MR0 if MR0 matches it*/TMR_Match.StopOnMatch = FALSE;/* Do nothing for external output pin if match (see cmsis help, there are another options) */TMR_Match.ExtMatchOutputType = TIM_EXTMATCH_NOTHING;/* Set Match value, count value of 200 (200 * 1000uS = 200000us = 0.2s --> 5 Hz) */TMR_Match.MatchValue = 199;/* Set configuration for Tim_config and Tim_MatchConfig */TIM_ConfigMatch(LPC_TIM0, &TMR_Match);/* Preemption = 1, sub-priority = 1 */NVIC_SetPriority(TIMER0_IRQn, ((0x01<<3)|0x01));/* Enable interrupt for timer 0 */NVIC_EnableIRQ(TIMER0_IRQn);/* Start timer 0 */TIM_Cmd(LPC_TIM0, ENABLE);TIM_Cmd(LPC_TIM1, ENABLE);}void TIMER0_IRQHandler (void){/* Clear Interrupt */TIM_ClearIntPending(LPC_TIM0,TIM_MR0_INT);if(++ds>=5){ds=0;if(++miao>=60){miao=0;if(++fen>=60){fen=0;if(++shi>=24) shi=0;}}}return;}void GLCD_DispWord(int r,int l,int x,int m){int str[8],i;for(i=0;i<m;i++){str[i]=x%10+'0';x=x/10;}for(i=0;i<m;i++){GLCD_DisplayChar(r,l+i,str[m-1-i]);}}/*---------------------------------------------------------------------------- MAIN function*----------------------------------------------------------------------------*/ int main (void){int mm,ts;SystemInit();Timer_init();GPIO_SetDir(0,1<<21,1);GPIO_SetValue(0,1<<21);GLCD_Init();GLCD_Clear(Black);GLCD_SetBackColor(Black);GLCD_SetTextColor(Y ellow);GLCD_DisplayString(0,0,"LPC1768 TEST...");GLCD_DisplayString(1,0,"TIME0........");GLCD_DisplayString(2,0,"Time= : : ");GPIO_SetDir(1,SELECT|RIGHT|LEFT|UP|DOWN,0); while(1){if(mm!=ds){if((GPIO_ReadValue(1)&SELECT)==0) shi=10;if((GPIO_ReadValue(1)&DOWN)==0) if(fen>0) fen--;if((GPIO_ReadValue(1)&UP)==0) if(fen<59) fen++;if((GPIO_ReadValue(1)&RIGHT)==0) if(shi>0) shi--;if((GPIO_ReadValue(1)&LEFT)==0) if(shi<23) shi++;GLCD_DispWord(2,5,shi,2);GLCD_DispWord(2,8,fen,2);GLCD_DispWord(2,11,miao,2);mm=ds;}}}。
Chapter1:LPC17xx Introductory information 第一章:lpc17xx入门资料文档信息信息内容关键词lpc1769,lpc1768,lpc1767,lpc1766,lpc1765,lpc1764,lpc1759,lpc1758,lpc1756,lpc1754,lpc1752,lpc1751,手臂,微,32位,通用串行总线,以太网接口,微控制器,可以,摘要lpc17xx用户手册译结果(英> 中)复制结果双语对照查看恩智浦半导体um10360lpc17xx用户手册修订历史修订日期的描述120100104lpc17xx用户手动修改。
修改:•“草案”状态删除。
•编辑更新和印刷更正各地用户手册。
•lpc1758,lpc1767,和lpc1768已被添加到列表的前盖,订货信息,在1节和4节–,部分的识别号码表32部分–7.11。
•操作的注意在睡眠模式被删除从第4–8.1。
•表8–81,clkout的功能是从描述p1.25。
在部分•以太网章,10节和10节的–16.1–17.2,有人指出在外部物理层必须初始化和物理时钟收到的以太网块前进一步的以太网初始化块。
此外,在10节–17.1,标题下“所有的描述”的句子,-仲裁被删除。
一般的更正确的讨论的主题中添加了2节–5。
•收发器分数波特率发生器是残疾人在波特率的自动模式(参见14节和15节的–14.4.10.1–4.14)。
在第14节•–4.12节和15–4.16,说明价值的动态链接库已登记的更正阅读”价值的动态链接库登记必须大于2”。
•* * * * * * ** * * * * * *运动控制•描述计算的qei章(见26节–4.3),定义为公式的值相加,并说明改进。
描述的位置和指数比较寄存器错误表明,小于,等于,大于比较可以选择。
它变为只显示“等于”。
•说明闪光签名生成已被添加在32节–10。
联系信息更多信息,请访问:销售办公地址,请发送电子邮件到:salesaddresses@ 1。
keil 多target 条件编译1.如果定义了宏MY_LED,并且值为1,则编译这段代码。
(If macro MY_LED is defined and its value is 1, compile this code.)2.如果TARGET是MCU1,则编译这段代码。
(If TARGET is MCU1, compile this code.)3.如果目标芯片为STM32F4,则执行该分支。
(If the target chip is STM32F4, execute this branch.)4.当TARGET等于ARM7时,编译这个函数。
(Compile this function when TARGET equals ARM7.)5.如果需要编译ARM指令,定义宏ARM_INSTRUCTION。
(Define macro ARM_INSTRUCTION if ARM instruction compilation is needed.)6.如果选择的目标系统为LPC1768,则打开LPC1768宏。
(If the selected target system is LPC1768, open the LPC1768 macro.)7.当前处理器为Cortex-M3时,编译该段代码。
(Compile this code when the current processor is Cortex-M3.)8.如果目标芯片为STM32F103RB,则执行代码块。
(Execute this code block if the target chip isSTM32F103RB.)9.如果选择的目标为PIC18F4520,则进行编译。
(Compile if the selected target is PIC18F4520.)10.在ARMCortexM系列中,定义ARMCortexM宏以进行编译。
一.概述1
二.存储器映射8
三.系统控制11
四.计时和功率控制18
五.存储器加速模块45
六.嵌套向量中断控制器(NVIC)49
七.引脚配置52
八.引脚连接模块60
九.通用输入输出(GPIO)73
十.以太网86
十一.USB设备连接器(从机)144
十二.USB设备控制器(主机)193
十三.USB OTG控制器197
十四.通用异步收发器UART1 218
十五.通用异步收发器UART0/2/3 241
十六.CAN1/2 259
十七.SPI控制器308
十八.SSP0/1接口316
十九.I2C0/1/2接口328
二十.I2S接口362
二十一.定时器0/1/2/3 375
二十二.重复中断定时器RIT 383
二十三.系统节拍定时器388
二十四.脉宽调制器(PWM)391(原有资料该章被误标为25章)二十五.电机控制PWM 402
二十六.正交编码器接口(QEI)420
二十七.实时时钟(RTC)和备份寄存器432
二十八.看门狗定时器441
二十九.模数转换器(ADC)445
三十.数模转换器(DAC) 452
三十一.通用DMA(GPDMA) 455
三十二.Flash存储器接口与编程477
三十三.JTAG、串口调试及跟踪(SWD)496
三十四.首字母缩写词498。
lpc17库函数LPC17库函数是一组用于LPC17xx系列单片机的开发库函数,它们由NXP公司提供。
LPC17库函数提供了许多方便的函数和API,使开发者能够快速轻松地完成各种任务。
本文将介绍一些常用的LPC17库函数,并针对每个函数进行详细说明。
1.GPIO库函数:- GPIO_SetDir: 设置GPIO口的方向,可设置为输入或输出。
- GPIO_Write: 写入GPIO口的输出状态,可以设置为高电平或低电平。
- GPIO_Read: 读取GPIO口的输入状态,返回当前GPIO口的状态值。
2.中断库函数:- NVIC_EnableIRQ: 使能中断向量,允许指定的中断源触发中断。
- NVIC_DisableIRQ: 禁用中断向量,阻止指定的中断源触发中断。
- NVIC_SetPriority: 设置中断优先级,可根据需求调整不同中断的优先级。
3.时钟库函数:-LPC_SC->PLL0CON:PLL0控制寄存器,用于设置和控制PLL0的工作模式。
-LPC_SC->CCLKCFG:设置CCLK(CPU时钟)的分频系数。
-LPC_SC->PCLKSEL0:设置各外设的PCLK(外设时钟)分频系数。
4.UART库函数:- UART_Init: 初始化UART串口,设置波特率、数据位数、停止位、奇偶校验等参数。
- UART_SendByte: 发送一个字节的数据到UART串口。
- UART_ReceiveByte: 从UART串口接收一个字节的数据。
5.定时器库函数:- TIMER_Init: 初始化定时器,设置定时器的工作模式、计数器的预分频系数和计数器的值。
- TIMER_Start: 启动定时器,开始计时。
- TIMER_Stop: 停止定时器,停止计时。
- TIMER_Reset: 复位定时器,将计数器值重置为初始值。
6.ADC库函数:- ADC_Init: 初始化ADC模块,设置ADC的工作模式、分辨率和采样通道。
lpc17库函数
LPC17库函数,全称为LPC17xx标准外设库函数,是指适用于NXP 公司LPC17系列微控制器的标准外设库函数。
LPC17系列是嵌入式系统中广泛使用的32位ARM Cortex-M3内核微控制器,具有丰富的外设资源和强大的性能。
LPC17库函数提供了一系列函数和接口,以简化开发人员对LPC17系列微控制器的外设控制和应用开发。
LPC17库函数包含了多个模块,例如GPIO模块、UART模块、PWM 模块、ADC模块等。
每个模块都提供了一系列可以直接调用的函数,用于对相应外设进行初始化、配置和控制。
这些库函数通过直观、简单的接口,帮助开发人员轻松地实现对LPC17系列外设的控制。
以GPIO模块为例,LPC17库函数提供了一些常用的函数,如GPIO_SetDir()用于配置GPIO引脚的输入输出方向,GPIO_SetValue()用于设置GPIO引脚输出电平,GPIO_GetValue()用于读取GPIO引脚的电平状态等。
开发人员只需调用相应的函数,即可完成GPIO外设的初始化和控制。
另外,LPC17库函数还支持中断和DMA功能。
中断是用于处理外设事件的重要机制,可以有效地提高系统的实时性。
LPC17库函数提供了用于中断控制的函数,如NVIC_EnableIRQ()用于使能中断,
NVIC_SetPriority()用于设置中断优先级等。
开发人员可以根据需要,利用这些函数实现中断的配置和控制。
DMA是直接存储器访问技术,用于实现高速数据传输。
LPC17库函
数提供了DMA控制函数,如GPDMA_Init()用于初始化DMA控制器,GPDMA_Setup()用于配置DMA通道,GPDMA_ChannelCmd()用于使能DMA
通道等。
通过使用这些函数,开发人员可以轻松地实现高速数据传输,并减轻CPU的负担。
除了以上提到的GPIO模块、UART模块、PWM模块和ADC模块,
LPC17库函数还支持许多其他外设模块,如I2C模块、SPI模块、CAN
模块、Ethernet模块等。
每个模块都有对应的库函数,帮助开发人员
快速实现功能。
总结起来,LPC17库函数是一套为LPC17系列微控制器提供的标准外设库函数,用于简化开发人员对LPC17外设的控制和应用开发。
通
过直观、简单的接口,开发人员可以轻松地实现外设的初始化、配置
和控制,并且支持中断和DMA功能,提高系统的实时性和数据传输速度。
LPC17库函数的存在,大大缩短了开发周期,促进了嵌入式系统的开发和应用。