单片机c51编程.ppt_第1页
单片机c51编程.ppt_第2页
单片机c51编程.ppt_第3页
单片机c51编程.ppt_第4页
单片机c51编程.ppt_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

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

文档简介

1、第九章 单片机的C51编程,第一节 概述 第二节 程序的格式 第三节 数据类型和存储类型 第四节 运算符和表达式 第五节 指针与函数 第六节 片内硬件资源的定义 第七节 程序的基本结构 第八节 C51程序举例 第九节 Windows环境下C51编译器的操作,本章要点,介绍C语言的基础知识。 掌握C语言程序的基本结构,学会编制一些简单的单片机应用程序,并能在Windows环境下使用C51编译器进行编译操作。 由于8051单片机的应用程序用的是C51编译器,了解应注意在存储类型、对片内硬件资源的定义等方面与标准C语言的区别。,第一节 概述,随着开发工具及集成电路技术的发展,单片机开始使用高级语言。

2、 专门针对8051系列单片机开发出来的C51编译器(简称C51) 可编译生成能够在 8051系列单片机上运行的目标程序。 目前针对8051系列单片机开发出来的编译器有多种,包括Franklin C51、Keil C51 for windows等。,返回本章首页,第二节 程序的格式,先从几个实例,了解C语言的程序格式。例9-1 #include“stdioh” main() printf(“Welcome to using C51 n”); ,执行结果在屏幕上输出以下一行信息: Welcome to using C51,其中main( )为函数,printf为函数,stdio.h为文件,例9-2

3、 #include“stdioh” main() *主函数* int a,b,c,sum;*定义变量* a=12;b=34;c=56;*给变量赋值* sum=a十b十c;*求和* printf(“sum is dn”,sum);*显示结果* ,执行结果在屏幕上输出: sum is 102,例9-3 #include“stdioh” int max(int x,int y)*定义max函数,函数返回值为整型;x,y为形式参数,整型* int z; if(xy)z=x; else z=y; return(z); *将z的值返回到调用处* main() *主函数* inta,b,m; *定义三个整型

4、变量* scanf(“d,d,” *输出m的值* ,从三个例子可看出C语言或C51源程序的基本格式: 1.书写格式自由,一行可以写若干条语句,一个语句也可以写成几行,每个语句须以“;”结尾。 2.程序由一个主函数和若干个其他函数组成,主函数的名字必须为main。程序的执行总是从main函数开始的,其位置无特殊规定。 3.C语言程序通过函数调用去执行指定的工作。源程序文件需要包含其他源程序文件的内容时,则要在本程序文件头部用包含命令#include进行“文件包含”处理。,返回本章首页,第三节 数据类型和存储类型,一、数据类型 不同类型的数据占用的存储长度不同 数据分为常量和变量 1.常量和符号常

5、量 常量指程序运行时其值不能被改变的量 符号常量是代表一个常量的标识符 常量类型:,整型、实型、字符、字符串,2.变量类型,表 C51变量类型,二、存储类型,表 C51存储类型,表 C51存储类型及其大小,C51中定义变量除了定义数据类型外,还应定义存储类型 例:int data x , y ; 表示x , y 为16位整数并指定放在片内数据存储区 1.若未定义存储类型,则C51编译器自动选择默认存储类型,2.选择变量类型时应尽量选用无符号型,可以减少测试符号的额外操作,可以提高代码效率。 3.为使编程时书写简化,数据类型允许用缩写,例:#define uchar unsigned char

6、#define ulong unsigned long,返回本章首页,第四节 运算符和表达式,一、算术运算符及其表达式 1.C语言的基本算术运算符 算术运算符有+、-、*、/、%(%为模运算符,或称求余运算符) 用算术运算符和圆括号将运算对象包括常量、变量、函数、数组等连接起来,形成符合C 语法规则的式子称为算术表达式。 如:a*(b-c)+2.3+a,2.算术运算符的优先级 先乘除模,后加减,括号最优先。 3.算术运算符的结合性 “自左至右”,即运算对象两侧的算术运算符优先级相同时,先与左边运算符结合。 4.数据类型不同时的转换 如果运算符两侧的数据类型不同,则必须转换成同一类型,再进行运算

7、。转换方式有自动转换(默认)和强制转换。强制转换的形式为 (类型名) (表达式); 例:(double) x;(将x强制转换成double型) 注:只转换表达式的值,变量类型不变。,二、关系运算符及其表达式 1.六种关系运算符 (大于) = (大于或等于) 、=、=优先级相同,!=与=相同,前四种高于后两种。 2.关系运算符的优先级低于算术运算符。 3.关系运算符的优先级高于赋值(=)运算符。,3.关系表达式 用关系运算符将两个表达式(算术表达式、关系表达式、逻辑表达式等)连接起来的式子称为关系表达式,其结果是逻辑值,即“真”或“假”。C语言没有逻辑型数据,以1代表真,以0代表假。 例如a=1

8、,b=2,c=3,则,x=ab,因ab的值为“假”,所以x的值为0,b =(a+c)的值为“假”,表达式的值为0;,cb的值为“真”,表达式的值为1;,三、逻辑运算符及其表达式 1.三种逻辑运算符 scanf(“f,f”, ,2. 双分支 双分支语句的形式 if(表达式) 语句1; else 语句2; 例如:if(x=1) y=x+5; else y=x*5;,分支语句嵌套 分支语句可以嵌套使用,双分支语句嵌套后可实现多路分支,其语句形式为 if(表达式1) 语句1; else if(表达式2) 语句2; elseif(表达式n1) 语句n-1; else 语句n;,3. 多分支 C语言提供一

9、种专门用于多分支的开关语句,流程图如图所示。,多分支的语句形式 switch (表达式) case常量表达式l:语句1;break; case常量表达式2:语句2;break; case 常量表达式n:语句n;break; default: 语句n+1;break; 多分支的语句实例 例:给定一个百分制成绩,要求转换为五级记分制,规定90分以上为A,8089分为B,7079分为C,6069分为D 60分以下为E。,多分支的语句实例 ( 续1 ) #include“stdio.h” main() intscore,c; charg; printf(“请输入学生成绩:”); scanf(“d”,

10、执行步骤是:先判断(表达式)是否成立。若成立(其值为非0)则执行循环体,否则退出循环去执行while语句的下一条语句。,while语句实例 求1十2十3十100的和。 #include“stdio.h” main() inti ,sum=0; i=1; while(i=100) sum=sum + i; i+; printf(“%d”,sum); ,2.do.while语句 语句形式: do 循环体 while(表达式); 先执行循环体,后判 断表达式是否成立,当 表达式的值为非零时, 返回重新执行循环体, 直至表达式值为零,则 停止循环。,Do.while语句实例 用do.while语句求1

11、十2十3十100的和 #include“stdio. h” main() inti ,sum=0; i=1; do sum=sum+i; i+; while(i=100); printf(“d”,sum); ,3.for语句 语句形式: for(exp1;exp2;exp3) 循环体; 例:用for语句改写1十2十3十100的和 #include”stdio.h” main() int t, sum=O; for(i=1; i100; i+) sum=sum+i; printf(“d”,sum); ,返回本章首页,第八节 C51程序举例,一、“走马灯”电路 设计一个实验电 路,在AT89C51

12、并行 接口P1连接8个LED, 要求这8个LED能循 环点亮。电路如图。,“走马灯”电路程序清单,#includereg51.h” delay(int t) /*延时函数*/ int i,j; /*采用默认的存储类型*/ /*用双重空循环延时*/ for(i=0; it; i+) for(j=0; j10; j+); main()/*主函数*/ char data i,s;,“走马灯”电路程序清单(续) while(1) /*无穷循环*/ s=0 xfe; /*设置初值,最低一位为0 */ P1=s; /*P1送据,令接P1.0的LED亮*/ delay(500); for(i=0; i8;

13、i+) s =s1; /*s值左移一位,最低位补0 */ s=s0 x01; /*将最低位置1 */ P1=s;/*由P1送出数据,令对应的LED亮*/ delay(500); ,二、数码管动态显示 设计一个电路,利用外接可编程并行接口8255,驱动数码管显示字符,电路如图所示。,数码管动态显示程序 #include”stdio.h” #include”reg5l.h”/*载入C51头文件*/ #includeabsacc.h” #definecrXBYTE0 x8003 #definepbXBYTE0 x8001 #definepcXBYTEOX8002 #define CW0 x88 ch

14、ar d_74=0 x3f,0 x06,0 x5b,0 x4f/*0-3的字型段码数据*/ char con4=0 xfe,0 xfd,0 xfb,Oxf7/*扫描控制信号*/,数码管动态显示程序(续1) delay(int t) /*延时函数*/ inti,j; for(i=0; it; i+) for(j=0; j10; j+); scan() /*扫描显示函数*/ char i; for(i=0; i4; i+) pb=d_7i; /*B口送出段码*/ pc=coni; /*C口送位码*/ delay(3); ,数码管动态显示程序(续2) main() cr=CW; *定8255工作模式

15、* while(1) scan(); *无穷循环 由于扫描速度很快,好像四个数码管同时发亮,即显示出“0123” 。,三、救护车警声程序 本程序利用可编程发声器件(PSG)芯片AY-3-8970产生救护车的警报声,电路如图.AY-3-8970内部寄存器所载入的数据与所实现的功能参看表9-6。,救护车警报声程序 #include ”reg5l.h” /*载入C51头文件*/ #include absacc.h” #include ”stdlib.h” #define psg_regXBYTE0 x9000 #define psg_data XBYTEOX9001 delay(int t) /*延

16、时函数*/ inti,j; for(i=0; it; i+) for(j=0; j5; j+); flash() /*工作灯闪烁函数*/ char i; for(i=0; i3; i+) P1=0 x80;delay(40); P1=0;delay(40); ,救护车警报声程序(续1) setpeg(int r, int d) /*向PSG送数函数*/ psg_reg=r; /*选择寄存器*/ psg_data=d; /*d写入指定存储器*/ alarm() /*发警报声函数*/ setpsg(0,5); setpsg(1,1); /*产生440Hz的声音*/ setpsg(7,62);/*R

17、7=62启用音调发声器*/ setpsg(8,15);/*R6=15声道的振幅最大*/ delay(300); setpsg(0,104); /*R0=104*/ setpsg(1,2); *产生180Hz声音*/,救护车警报声程序(续2) delay(300); setpsg(8,0); /*音量设为0* main() setpsg(7,63); /* 关闭音调发声器*/ flash(); /*调用LED闪烁函数*/ delay(800); while(1) /*无穷循环*/ alarm(); /*调用警报声函数*/ ,四、C51中断程序举例 在C51中,中断服务程序定义为函数,并规定用下列

18、形式表示 函数名 interrupt n using m,将上述 “走马灯” 电路改用开关控制,并采用中断方式如图所示,要求开关每拨动一次,点亮 的LED向前移动一个位置.,“走马灯” 电路中断方式程序 #includereg51.h” char i; char s=0 xfe; led1()interrupt 2 if(i8)s=s1;s=s0 x01;P1=s;i+; else i=0 ;s=0 xfe; ,“走马灯” 电路中断方式程序(续) main() /*主函数*/ EA=1; /*开中断*/ EX1=1; /*允许外部中断1中断*/ IT1=1; /*下降沿触发方式*/ P1=0

19、xfe; /*点亮第一个LED*/ while(1); /*无穷循环等待中断*/ main()的任务是开中断,通过中断函数将1左移,并在左移8次后,回到原始状态。,返回本章首页,第九节 Windows环境下C51编译器的操作,C51语言的程序设计之后,需要经过编译、优化、链接等过程,转换成在单片机上能运行的HEX文件,才能固化到程序存储器。 Keil公司的C51编译器是基于Windows环境下的产品,包括汇编器A51、编译器C51、连接器BL51和文件转换器OH51等工具,还有集成编译环境Vision2。用户在此环境下可以完成源程序的编写、编译、连接、仿真调试及项目管理等操作。,一、Keil

20、C51的安装 安装步骤,执行 SETUP,插入Keil C51 安装盘,指定的安 装目录,安装,安装完成后此目录下有两个子目录 UV2 在UV2子目录中,有Vision2主执行文件UV2.EXE。 C51 在C51BIN子目录中有汇编器A51、编译器C51、连接器BL51和文件转换器OH51等执行文件以及一些存放芯片驱动程序的动态链接库(.DLL); 在C51INC子目录中,装有编译需要的头文件(.H); 在LIB子目录中,装有C51的标准函数库.LIB)。,二、C51程序的编写和调试 执行V2子目录中的UV2.EXE,启动Vision2,进入主窗口,用窗口中的文件编辑器编写C51程序,格式遵循C语言语法规则。 编写完C51程序,在Vision51环境下就可以进行编译、连接,如果编译连接成功,还可以调用软件仿真器进行调试。,Vision2主窗口,1. 编辑源文件 【File】-【New】,弹出编辑窗口,如图,2.建立工程文件 编写好程序,执行 【Project】-【New Project】 选项,在弹出的窗口中写入工程文件的名称,并加上后綴uv2,如ex1.uv2。 3. 选择目标器件 在Project窗口中的Target1项目上右击,选择【Select Device for Target Targ

温馨提示

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

最新文档

评论

0/150

提交评论