05单片机C语言机械改_第1页
05单片机C语言机械改_第2页
05单片机C语言机械改_第3页
05单片机C语言机械改_第4页
05单片机C语言机械改_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五章 单片机C语言重点讲重点讲C C语言在单片机中的应用语言在单片机中的应用【学习意图】【学习意图】&把握C语言的根基信息类型和信息类型修饰符;&把握C语言的运算符,特不是位运算符和逻辑运算符 &把握C语言的重要操纵语句,包罗if,while和for;&把握C语言操纵语句的操纵范畴;&谙练把握一维数组的用法;&领会二维数组的用法;&谙练把握函数的用法;&谙练把握HT-PIC常用库函数;&谙练把握基于多个文件的模块化程序设计方式;第5章 单片机C语言C C语言的复习语言的复习1数组在单片机中的使用数组在单片机中的使用2HT

2、-PICHT-PIC常用库函数常用库函数4宏定义在单片机中的使用宏定义在单片机中的使用3多文件项目经管多文件项目经管5第5章 单片机C语言C C语言的复习语言的复习1数组在单片机中的使用数组在单片机中的使用2HT-PICHT-PIC常用库函数常用库函数4宏定义在单片机中的使用宏定义在单片机中的使用3多文件项目经管多文件项目经管51 C语言的复习&根基信息类型根基信息类型&运算符运算符&操纵语句操纵语句&数组数组&函数函数根基信息类型C C语言提供了以下部分信息类型语言提供了以下部分信息类型. . 三种常用信息类型的长度类型名关键字长度示意个数字符型cha

3、r1字节28整型int2字节216浮点型float4字节232单片机中变量的定义和使用例子&似何操纵似何操纵LEDLED亮亮操纵LED亮的程序#include “pic.h” main() char var=1; TRISB=0 x00; PORTB=var; while(1) 必须加的头文件 主函数定义 寄存器标题便是变量 初始化端口方向 定义变量保留信息1位型信息:PICC对位的会见优化#include “pic.h” void main(void) TRISB0=0; while(1) RB0=1; 设置TRISB的第0位为0 RB0特指PORTB的第0位 把PORTB的第0位置

4、1, 其它位不变运算符!算术运算符 (+ - * %)!关系运算符 ( !)!逻辑运算符 (! |)!位运算符 ( | )!赋值运算符 (及其扩展赋值运算符)!前提运算符 (?:)!指针运算符 (*和)!求字节数运算符()!强制类型变形运算符( (类型) )!重量运算符(-)!下标运算符()!其他 (似函数调用运算符()运算符使用举例&=?&3&5的值得?&char a=3,b=5;a|b=?&char b=5;b=?&0 x390 x2A=? &char a=0 x81; a=a2; a=?操纵语句if&ifif语句功能语句功能

5、: :通过给定前提的真假来决意通过给定前提的真假来决意 下一步履行哪条语句下一步履行哪条语句. .表达式语句真(非0)假(0)其它语句表达式表达式 语句语句1 语句语句2YN操纵语句while&while语句:它用来实现“当型”循环结构. & while语句的履行环节: &推断表达式为真(非0)时履行循环体;&重复环节,直到表达式为假(0)时结束.操纵语句:for(i=0;iy?x:y;z=xy?x:y;return(z);return(z); 类型函数标题x,y为形式指标内部变量表明语句部分,应该用到形参return 后的量为函数返回值第5章 单片机C语言C

6、C语言的复习语言的复习1数组在单片机中的使用数组在单片机中的使用2HT-PICHT-PIC常用库函数常用库函数4宏定义在单片机中的使用宏定义在单片机中的使用3多文件项目经管多文件项目经管5数组用来为多个信息无序信息创站联系似何操纵数码管表现数字1#include “pic.h” void main(void) TRISB=0; TRISD=0; RB1=0; 使三极管导通使三极管导通 while(1) PORTD=0b11111001; 共阳极管共阳极管 似何操纵数码管循环表现数字0,1#include “pic.h” void main(void) TRISB=0; TRISD=0; RB1

7、=0; while(1) PORTD=0b10000000; for(i=0;i10000;i+) PORTD=0b11111001; for(i=0;i10000;i+) 编程实现由编程实现由0到到9循环表现;循环表现;似何操纵数码管依次表现数字0,1,2,3,4,5,6,7,8,9#include “pic.h” void main(void) TRISB=0; TRISD=0; RB1=0; while(1) PORTD=0b10000000; for(i=0;i10000;i+) PORTD=0b11111001; for(i=0;i10000;i+) 这么写有啥咨询题呢?这么写有啥咨

8、询题呢?仿佛有点重复吧!仿佛有点重复吧!似何解决呢?似何解决呢?特点:每两行的差不仅在于PORTD送的值差别,其它的根基上重复的.想到用数组.似何表现0到9,数组的用法&我们把我们把0 0到到9 9的字形码按次序保留在数组中的字形码按次序保留在数组中, ,通过改通过改变数组下标来实现对差别数字取相应的字形码变数组下标来实现对差别数字取相应的字形码. .&char NumFont=0b11000000,0b11111001,char NumFont=0b11000000,0b11111001,;&PORTD= NumFont0;PORTD= NumFont0;&P

9、ORTD= NumFont1;PORTD= NumFont1;&PORTD= NumFont2;PORTD= NumFont2;&PORTD= NumFont3;PORTD= NumFont3;&似何用循环实现?似何用循环实现?规律表现了:每次表现下标加一;用数组循环实现0到9表现#include “pic.h” char NumFont=0b11000000,0b11111001,;void main(void) char i=0; TRISB=0; TRISD=0; RB1=0; while(1) for(i=0;i10;i+) PORTD=NumFont i ;

10、for(i=0;i10000;i+) 运行结果第5章 单片机C语言C C语言的复习语言的复习1数组在单片机中的使用数组在单片机中的使用2HT-PICHT-PIC常用库函数常用库函数4宏定义在单片机中的使用宏定义在单片机中的使用3多文件项目经管多文件项目经管5不带指标的宏定义 &#define OUT_DATA 0 x0F#define OUT_DATA 0 x0F&#define PI 3.1415926 #define PI 3.1415926 &定义一年有几秒定义一年有几秒&#define SECONDS_PER_YEAR (60#define SECOND

11、S_PER_YEAR (60* *6060* *2424* *365)UL 365)UL &宏的使用宏的使用&PORTD=OUT_DATAPORTD=OUT_DATA;带指标的宏定义&#define ROUND_AREA(r) (PI#define ROUND_AREA(r) (PI* *r r* *r) r) &宏的使用宏的使用: :&k= ROUND_AREA (Data);k= ROUND_AREA (Data);宏使用的注重事项&千万不要把宏名放在赋值号左侧千万不要把宏名放在赋值号左侧. .&不要写复杂的宏不要写复杂的宏. .&a

12、mp;带指标的宏定义中把每个指标括起来带指标的宏定义中把每个指标括起来. .第5章 单片机C语言C C语言的复习语言的复习1数组在单片机中的使用数组在单片机中的使用2HT-PICHT-PIC常用库函数常用库函数4宏定义在单片机中的使用宏定义在单片机中的使用3多文件项目经管多文件项目经管5数学函数&使用数学函数时使用数学函数时, ,应见谅应见谅math.h,math.h,例似例似: :&#include #include &在数学函数库中见谅常用的求绝对值函数、三角函数等在数学函数库中见谅常用的求绝对值函数、三角函数等, ,例例似似: :&double pow (

13、double f, double p)double pow (double f, double p)&求求f f的的p p次幂次幂&double sin (double f)double sin (double f)&那个函数返回指标的正弦值那个函数返回指标的正弦值. .&double sqrt (double f)double sqrt (double f)&sqrt()sqrt()函数操纵牛顿法猎取指标的近似平方根函数操纵牛顿法猎取指标的近似平方根. .&double tan (double f)double tan (double f)&a

14、mp;tan()tan()函数用来统计指标函数用来统计指标f f的正切值的正切值. .时候函数(略) &使用时候函数时使用时候函数时, ,应见谅应见谅time.h,time.h,例似例似: :&#include #include &在时候函数库中见谅常用的把时候变形成字符串在时候函数库中见谅常用的把时候变形成字符串示意、时候分化存储等示意、时候分化存储等, , 但在单片机中用处不大但在单片机中用处不大. .信息变形函数&使用信息变形函数时使用信息变形函数时, ,应见谅应见谅stdlib.h,stdlib.h,例似例似: :&#include #inclu

15、de &在信息变形函数中见谅常用的把将在信息变形函数中见谅常用的把将ASCIIASCII表达式变表达式变形成双精度数、将形成双精度数、将ASCIIASCII表达式变形成长整型等表达式变形成长整型等, , 例似例似: :&int atoi (const char int atoi (const char * * s) s)扫描传递过来的字符扫描传递过来的字符串串, ,跃过开头的空格同时读取其符号跃过开头的空格同时读取其符号; ;接着将一个接着将一个十进制数的十进制数的ASCIIASCII表达式变形成整数表达式变形成整数. .&char char * *itoa(char

16、itoa(char * *buf,int val,int base)buf,int val,int base)把把valval以以basebase指定的进制数变形为字符串保留在指定的进制数变形为字符串保留在bufbuf中中. .字符串操作函数 &使用字符串操作函数时使用字符串操作函数时, ,应见谅应见谅string.h,string.h,例似例似: :&#include #include &在字符串操作函数中见谅毗邻字符串、拷贝字符在字符串操作函数中见谅毗邻字符串、拷贝字符串等串等, , 例似例似: :&char char * * strcat (char st

17、rcat (char * * s1, const char s1, const char * * s2) s2)那个函数将字符串那个函数将字符串s2s2毗邻到字符串毗邻到字符串s1s1的背面的背面. .新的新的字符串以字符串以NULLNULL做为结束符做为结束符. .指针型指标指针型指标s1s1指向的字指向的字符数组必须保证大于结论字符串符数组必须保证大于结论字符串. .否那么会意外修否那么会意外修改其它变量的值改其它变量的值. .规格输入输出函数 &使用规格输入输出函数时使用规格输入输出函数时, ,应见谅应见谅stdio.h,stdio.h,例似例似&#include #in

18、clude &因为在嵌入式系统中没有所谓规格的输入输出设备因为在嵌入式系统中没有所谓规格的输入输出设备(STDOUTSTDOUT与与STDINSTDIN), ,工程人员风俗把串口(工程人员风俗把串口(USARTUSART)做为规格的输入输出设备)做为规格的输入输出设备, ,但规格输入输出函数但规格输入输出函数的根本的根本: :字符输出函数字符输出函数putch()putch()与字符输入函数与字符输入函数getch()getch()需要用户自行实现需要用户自行实现. .在在HT-PICCHT-PICC的示例中给的示例中给出了出了USART.CUSART.C和和USART.HUSART.

19、H模块模块, ,其中的其中的putch()putch()与与getch()getch()函数可供读者参考函数可供读者参考. . &有了以上筹办后便能够使用有了以上筹办后便能够使用printfprintf函数了函数了. .字符检验函数 &使用字符检验函数时使用字符检验函数时, ,应见谅应见谅ctype.h,ctype.h,例似例似: :&#include #include &isalnum (c) cisalnum (c) c为数字或字母;为数字或字母;&isalpha (c) cisalpha (c) c为字母;为字母;&isascii (c)

20、isascii (c) c c为为7 7位位ASCIIASCII字符;字符;&iscntrl (c) iscntrl (c) c c为操纵字符;为操纵字符;&isdigit (c) isdigit (c) c c为十进制阿拉伯数字;为十进制阿拉伯数字;&islower (c) islower (c) c c在在a az z范畴内;范畴内;&isprint (c) isprint (c) c c为打印字符;为打印字符;&isgraph (c) isgraph (c) c c为非空格可打印字符;为非空格可打印字符;&ispunct (c) ispun

21、ct (c) c c不是字母数字混合的;不是字母数字混合的;&isspace (c) isspace (c) c c是空格键、是空格键、TABTAB键或换行符;键或换行符;&isupper (c) isupper (c) c c为大写字母;为大写字母;&isxdigit (c) isxdigit (c) c c为为1616进制数进制数. .PIC单片机硬件相关函数 &使用使用PICPIC单片机硬件相关函数时单片机硬件相关函数时, ,应见谅应见谅htc.h,htc.h,例例似似: :&#include #include &此函数库爱护此函数库爱护P

22、ICPIC单片机常用的硬件会见函数单片机常用的硬件会见函数, ,包包罗开关中断函数、罗开关中断函数、EEPROMEEPROM读写函数、延时函数等读写函数、延时函数等, ,其中某些是宏定义其中某些是宏定义, ,具体内容请参见表具体内容请参见表 5 5 9. 9. &void ei(void)void di(void)ei( )void ei(void)void di(void)ei( )和和di( )di( )宏分宏分不实现全局中断使能和中断屏蔽不实现全局中断使能和中断屏蔽. .它们将被扩展为它们将被扩展为一条内嵌的汇编指令一条内嵌的汇编指令, ,分不对中断使能位履行置位分不对中断使能位

23、履行置位和清零和清零. .PIC单片机硬件相关函数&_CONFIG()_CONFIG()此宏用来设置此宏用来设置1616位硬件配置字位硬件配置字. .具体指具体指标取值请见某款型号的头文件标取值请见某款型号的头文件, ,例似例似:pic168xa.h.:pic168xa.h.&_EEPROM_DATA(a,b,c,d,e,f,g,h)_EEPROM_DATA(a,b,c,d,e,f,g,h)用来定义在编用来定义在编程期间向程期间向EEPROMEEPROM写入的写入的8 8个字节信息个字节信息, ,再次调用那再次调用那么后移么后移8 8个地址后顺次写入下个地址后顺次写入下8 8个

24、字节个字节. .&unsigned char eeprom_read(unsigned char unsigned char eeprom_read(unsigned char addr)addr)在运行期间读取内置在运行期间读取内置EEPROMEEPROM地址地址addraddr处的一处的一个字节个字节. .第5章 单片机C语言C C语言的复习语言的复习1数组在单片机中的使用数组在单片机中的使用2HT-PICHT-PIC常用库函数常用库函数4宏定义在单片机中的使用宏定义在单片机中的使用3多文件项目经管多文件项目经管5多文件项目经管&源程序的编写往往是多个模块有机地组合在共同源

25、程序的编写往往是多个模块有机地组合在共同的的, ,为了提高源代码的可重用性为了提高源代码的可重用性, ,风俗上把一个大风俗上把一个大项目分成几个模块编写项目分成几个模块编写. .有些模块完成一个有些模块完成一个ICIC(集(集成电路)的驱动代码(驱动函数的定义)成电路)的驱动代码(驱动函数的定义), ,有些模有些模块文件完成项意图逻辑功能代码(似块文件完成项意图逻辑功能代码(似mainmain函数所函数所在的文件)在的文件). .每个模块一样由两部分构成每个模块一样由两部分构成: :头文件头文件(“.H”.H”文件)和源码文件(文件)和源码文件(“.C” .C” 文件)文件). .&下

26、面以延时函数的模块化编程为例讲解下面以延时函数的模块化编程为例讲解. .C语言从端口输入信息的方式&在在C C语言中语言中, ,当端口处于输入模式时当端口处于输入模式时, ,用赋值语句把端口赋值用赋值语句把端口赋值给一个变量给一个变量chTmp,chTmp,例似例似: :&char chTmp;char chTmp;&TRISB=0 xFF;TRISB=0 xFF;&chTmp=PORTB;chTmp=PORTB;&便实现了从端口便实现了从端口B B读取外部信息同时保留到读取外部信息同时保留到chTmpchTmp变量中变量中. .&也能够直截了当

27、用端口内容做推断也能够直截了当用端口内容做推断: :&if(RB7=1) if(RB7=1) 语句语句 &if(PORTB=0 xF0) if(PORTB=0 xF0) 语句语句 不介绍不介绍例题:电路似右图:每按一次K1,使PORTD+.演示编程环节.键盘抖动咨询题&依照履历抖动时候是依照履历抖动时候是20ms20ms左右左右&咨询题咨询题: :延时函数往常编写过了延时函数往常编写过了, ,似何能飞快的重似何能飞快的重复操纵呢?复操纵呢?&复习多文档项意图创站环节复习多文档项意图创站环节. .&创站一个创站一个mylib.h,mylib.h,写

28、入函数表明和常量定义写入函数表明和常量定义. .&创站一个创站一个mylib.c,mylib.c,写入函数定义写入函数定义. .&把两个文件参加到项目中把两个文件参加到项目中. .&在你要用到库函数的代码中见谅在你要用到库函数的代码中见谅mylib.h.mylib.h.排除抖动的方式:软件延时.1) 创站一个mylib.h&#define ZHUPIN 16#define ZHUPIN 16&void DelayMS(unsigned int iMS);void DelayMS(unsigned int iMS);2) 创站一个mylib.c#inclu

29、de “mylib.h”#include “mylib.h”void DelayMS(unsigned int iMS)void DelayMS(unsigned int iMS) int i=0,j=0;int i=0,j=0; for(i=0;iiMS;i+) for(i=0;iiMS;i+) for(j=0;j67 for(j=0;j67* *ZHUPIN;j+)ZHUPIN;j+) 3) 添加两个文件到项目中4) 在你要用到库函数的代码中见谅mylib.h#include pic.h#include pic.h#include mylib.h#include mylib.hmain()main() DelayMS(20); DelayMS(20); 上机习题:按键计数程序.PICC中内嵌汇编&1. 1. 使用使用asmasm关键字嵌入一条汇编指令关键字嵌入一条汇编指令. .&例似例似, ,使用内嵌汇编履行使用内嵌汇编履行PICPIC单片机的特别指令单片机的特别指令. . & asm(“CLRWDT”); asm(“CLRWDT”);& asm(“NOP”); asm(“NOP”);& asm(“SLEEP”); asm(“SLEEP”);&2. 2. 使用预操作号令使用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论