单片机的程序设计课件_第1页
单片机的程序设计课件_第2页
单片机的程序设计课件_第3页
单片机的程序设计课件_第4页
单片机的程序设计课件_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

项目2单片机的程序设计 2.1C语言的程序结构2.2C51的运算符及表达式

2.3C51的数据2.4C语言的函数2.5C语言的数组2.6程序设计实例项目2单片机的程序设计 2.1C语言的程单片机的开发实例——点亮一盏LED灯问题描述:通过C语言编程,实现单片机开发板上点亮一盏LED灯。实验所需软件:Keil、Progisp实验步骤:1、熟悉硬件电路2、掌握开发软件的使用方法3、编写程序代码并进行编译、运行拓展:1、同时点亮几盏LED灯2、设计流水灯单片机的开发实例——点亮一盏LED灯问题描述:通过C单片机的程序设计课件程序代码#include<reg51.h>main(){P1=0xF7;}程序代码#include<reg51.h>请用C语言编写程序计算234+78的和main(){inta,b,c;a=234;b=78;c=a+b;printf(“234+78=%d”,c);}请用C语言编写程序计算234+78的和main()1.C51语言C语言编译调试工具效率高,数据类型及运算符丰富,经过不断完善,能满足单片机的开发要求,形成了单片机C语言。把51单片机C语言称为C51语言。用C51编写单片机程序时,需要根据单片机存储结构及内部资源定义相应的数据类型和变量,而标准的C语言不需要考虑这些问题。另外,C51包含的数据类型、变量存储模式、输入输出处理、函数等方面与标准的C语言也有一定的区别。其他的语法规则、程序结构及程序设计方法则与标准的C语言相同。1.C51语言C语言编译调试工具C51语言的特点编程者不需要了解单片机的指令系统,仅要求对单片机的存储器结构有初步的了解,至于存储器的分配、寻址方式及数据类型等完全由编译器管理。程序有规范化的结构,可以分为不同的函数,这种方式可以使程序结构化,将可变的选择与特殊操作组合在一起,增强程序的可读性。编程和程序的调试时间显著缩短,从而提高了编程的效率,提供的库函数包含许多标准的子程序,具有较强的数据处理能力,可以将编好的程序很容易地移植到新程序。

C51作为一种非常方便的语言得到了广泛的支持,目前已经成为单片机开发的主要编程语言。C51语言的特点编程者不需要了解单2.简单的C51程序【例】如下图所示,在P1.0口上接有一个LED发光二极管,要求让发光二极管发光。2.简单的C51程序【例】如下图所示,在P1.0口上接有#include<reg51.h>sbitP1_0=P1^0;voidmain(){ P1_0=0;}程序如下:程序的开始是一个文件包含处理。这段程序中包含的是reg51.h文件,以.h为后缀的称为头文件,该头文件的作用是把特殊功能寄存器中的符号和地址对应起来,这里主要是应用到P1这个符号,如果没有包含reg51.h文件,C51编译器不知道P1具体指什么,在编译过程中就会发生错误。给P1.0取名为P1_0,是通过编译器中增加的关键字sbit来定义的程序最后是主函数,每一个C51程序有且只有一个主函数,函数后面使用一对大括号“{}”,在“{}”中书写具体内容。#include<reg51.h>程序如下:程序的开始是一(1)一个C51程序从main函数开始执行,不管main函数在什么位置。(2)C51中字母区分大小写,如定义是sbitP1_0,若后面写成p1_0,在编译时就会出现错误。(3)C51书写自由,一行可以写几个语句,一个语句也能写在几行上。(4)每个语句必须以分号结束。(5)C51中的注释可以采用两种符号。第一种是“/*…*/”符号,从“/*”开始直到“*/”为止,中间的内容都是注释。第二种是“//”引导的注释语句,这种注释只对本行有效。由此可见:(1)一个C51程序从main函数开始执行,不管main函2.1C语言的程序结构在结构上可以把C51程序分为3类,即顺序结构、选择结构和循环结构。2.1.1顺序结构顺序结构是一种最基本、最简单的编程结构,在这种结构下,程序按低地址向高地址顺序逐条执行指令代码,如右图所示。过程A过程B过程C2.1C语言的程序结构在结构上可请用C语言编写程序计算234+78的和main(){inta,b,c;a=234;b=78;c=a+b;printf(“234+78=%d”,c);}请用C语言编写程序计算234+78的和main()2.1.2选择结构1、if语句(1) if(表达式)语句如果表达式为“真”,则执行语句,否则执行if语句后面的语句,如:if(a<5)b=3;2.1.2选择结构1、if语句(1) if(表达式)(2) if(表达式)语句1 else语句2如果表达式为“真”,则执行语句1,否则执行语句2,如:if(a<5)b=3;elseb=-3;(2) if(表达式)例2.1单片机的P1.0接一小灯,P1.1接一开关,当开关闭合时,小灯亮;当开关断开时,小灯灭。请画出硬件电路图,并写出程序代码。#include<reg51.h>voidmain(){while(1){if(P1^1==0)P1^0=0;elseP1^0=1;}}例2.1单片机的P1.0接一小灯,P1.1接一开关,当开关(3) if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3

……

elseif(表达式m)语句melse语句m+1如:if(a>10)b=1;elseif(a>6)b=2;elseif(a>2)b=3;elseb=4;(3) if(表达式1)如:单片机的程序设计课件(4)if语句的嵌套if(表达式1)if(表达式2)语句1else语句2elseif(表达式3)语句3else语句4使用if嵌套语句特别要注意if和else配对,else总是和最近的if配对

(4)if语句的嵌套if(表达式1)使用if嵌套语句特别要2、switch语句

实际问题中,往往遇到以一个变量或表达式的值为判断条件,将此变量或表达式的值分成几段,每一段对应一种选择或操作,这种情况用if语句来嵌套非常麻烦,于是,C51提供了switch语句。switch语句的一般结构如下:switch(表达式){case常量表达式1:语句1,break;case常量表达式2:语句2,break;

case常量表达式n:语句n,break;default:语句n+1,break;}2、switch语句实际问题中,往往遇2.1.3循环结构构成循环结构的主要有while、do-while和for等语句。

1、while循环语句while语句的一般表达形式为:while(表达式){语句}当表达式的判断为“真”时,执行大括号内的语句,否则不执行。2.1.3循环结构构成循环结构的主要有while、do-w2、do-while循环语句do-while语句是先执行循环体,然后判断循环条件是否成立,其一般形式为:do{语句}while(表达式);

分析程序:P33例2.42、do-while循环语句do-while语句是3、for循环语句for语句的一般形式为:for(表达式1;表达式2;表达式3){语句}for循环语句的执行过程如下。(1) 先求解表达式1。(2) 求解表达式2,如果结果为“真”,即条件成立,则执行循环体语句;如果结果为“假”,转到第(5)步。(3) 求解表达式3。(4) 转回第(2)步。(5) 退出for循环语句,执行下面的语句。3、for循环语句for语句的一般形式为:for(表达式1

表达式3

表达式2

表达式1

循环体语句

表达式3表达式2真假表达式1循环体语句【例】流水灯的设计:在单片机的P1.0-P1.7上分别连接8个发光二极管,编程实现8个LED灯循环点亮。程序如下:#include<reg51.h>#defineucharunsignedcharvoiddelay() //延时子程序{ uchari,j; for(i=0;i<110;i++);for(j=0;j<200;j++)}voidmain(){ ucharx,y;while(1){y=0x01;for(x=0;x<8;x++){P1=~y;delay();y<<=1;}}}【例】流水灯的设计:在单片机的P1.0-P1.7上分别连接84、break语句和continue语句

在一个循环语句中,可以通过判断条件来退出循环,也可以通过break语句来强制退出循环。continue语句用于结束本次循环,即跳过循环体下面的语句,而直接进行下一次是否循环的判断。【例】单片机的P3.0接开关K1,P3.0接开关K2,要求按下K1后,则从D1开始依次点亮,至D8后停止并全部熄灭;待再次按下K1,重复上面过程;如果中间K2被按下,则灯立即全部熄灭,并返回初始状态。4、break语句和continue语句在一个循环#include"regx51.h"voidDelay(unsignedintdelaytime) //延时子程序{unsignedchari;for(;delaytime>0;delaytime--)for(i=0;i<=124;i++);}voidmain(){unsignedcharlight=0xfe;unsignedchari;while(1){if((P3_0)==0){ light=0xfe;P1=light; for(i=0;i<=7;i++) { Delay(1000); if((P3_1)==0) break; light<<=1; P1=light;}P1=0xff; }}}#include"regx51.h"voidmain(2.2C51的运算符及表达式C51的运算符主要有:算术运算符、关系运算符、逻辑运算符、位运算符、赋值及复合赋值运算符。2.2C51的运算符及表达式2.2.1.赋值运算符和赋值表达式(1)赋值运算符“=”优先级较底,右结合性。(2)赋值表达式一般形式:变量名=表达式

赋值的类型转换规则:在赋值运算中,当“=”两侧类型不一致时,系统自动将右边表达式的值转换成左侧变量的类型,再赋值给该变量。如:x=1+9;x=y=5;2.2.1.赋值运算符和赋值表达式

2.2.2算术运算符和算术表达式

(1)基本的算术运算符

+-*/%(模运算或取余运算符)注:1.都是双目运算符,即需要两个操作数2.对/,若两个整数相除,结果为整数(取整)3.对于%,要求%两侧的操作数均为整型数据,所得结果的符号与左侧操作数符号相同。

如:7/5=1,5/7=0-93%23=-193%-23=12.2.2算术运算符和算术表达式

(1)基本的算(2)自增,自减运算符++自增--自减注:1、++和--是单目运算符2、++和--只能用于变量,不能用与常量和表达式。3、++j先自增,再使用j++先使用,后自增

如:a=2b=++a后b=3a=3b=a++后b=2a=3单片机的程序设计课件2.2.3关系运算符和关系表达式(1)关系运算符及优先级<,<=,>,>=,==,!=前四个优先级相同,后两个优先级相同,前四个优先级高于后两个。注:在优先级上算术运算符>关系运算符>赋值运算符2.2.3关系运算符和关系表达式(2)关系表达式用关系运算符将两个表达式连接起来的表达式称为关系表达式,关系表达式的值为逻辑值,真和假,1代表真,0代表假。

a>ba=4b=3关系表达式为真,值为1(2)关系表达式2.2.4逻辑运算符和逻辑表达式(1)逻辑运算符及其优先级&&逻辑与||逻辑或!逻辑非注意:1、&&与||是双目运算符,!是单目运算符2、在优先级上!〉&&〉||2.2.4逻辑运算符和逻辑表达式(2)逻辑表达式逻辑表达式值为逻辑量(真或假)执行规则:逻辑表达式是不完全执行的,只有当一定要执行下一个逻辑运算符才能确定表达式的值时,才执行该运算符。如:a&&b&&c若a=0则表达式为0a||b||c若a=1,则表达式为1(2)逻辑表达式2.2.5位运算符及其表达式按位与&,按位或|,按位异或^按位取反~,左移<<,右移>>(1)按位与运算符&

如:chara=3,b=6a&b=2000000110000011000000010作用:1)清零:让要清零的数与0按位与即可2)保留某些位,而将其余的位清零。单片机的程序设计课件(2)按位或运算符|0|0=00|1=11|0=11|1=1按位或的作用是将指定的位置置1(3)异或运算符^0^0=01^1=00^1=11^0=1作用:1)与1异或,使其定位翻转。任何数与1异或都会变成相反数。2)与0异或,使指定位保留原值。任何数与0异或都保持不变。(2)按位或运算符|(4)位取反运算符~如:unsignedchara=0x9a,b;b=~a;a值不变,b=0x65(5)位左移运算符<<(左移1位相当与乘2)如:unsignedchara=15a=a<<100001111a=a<<1左移1位a=30a=a<<2左移2位a=60单片机的程序设计课件(6)位右移运算>>(右移1位相当于除2)inta=15:a=a>>2后a=3注:1、左移运算中高位移出舍弃不用,低位补02、右移运算中低位移出舍弃不用,高位对无符号数补0,对有符号数高位补符号位。(6)位右移运算>>(右移1位相当于除2)2.2.6复合赋值运算符赋值号前加上其他运算符构成复合赋值运算符,c51提供了下列十个复合赋值运算符+=,一=,*=,/=,%=,&=,1=,^=,〈〈=,〉〉=a+=ba=(a+b)x*=a+bx=(x*(a+b))a&=ba=(a&b)a<<=4a=(a<<4)2.2.6复合赋值运算符单片机控制系统的设计与制作试题2

要求:用单片机实现抢答器的设计。当四个开关中的某一个开关按下时,数码管显示器上显示该开关对应的选手编号(1~4),且此时其他选手不能再抢答。当按下复位键后,重新开始抢答。请先设计硬件电路,再画出程序流程图,写出程序代码。单片机控制系统的设计与制作试题2要求:用单片机实现单片机的程序设计课件#include"REGX52.H"consttab[]={0xf9,0xa4,0xb0,0x99};//通过查表来显示对应数字1,2,3,4voiddisp(intn){P2_4=0;//数码管控制位使能P0=tab[n];//查表来显示数字}main(){charanswer=1;//抢答标志使能P2_4=1;//数码管控制位无显示P2_0=1;P2_1=1;P2_2=1;P2_3=1;//按键定义为输入#include"REGX52.H"while(1){while(answer)//当抢答标志为1时执行,为0时表示抢答结束,//不执行下面抢答扫描{if(P2_0==0){disp(0);//显示对应抢答号码answer=0;//抢答标志取消}elseif(P2_1==0){disp(1);answer=0;}elseif(P2_2==0){disp(2);answer=0;}elseif(P2_3==0){disp(3);answer=0;}}}}while(1)单片机控制系统的设计与制作试题3

某企业承担用单片机实现双路防盗声光报警器的电气控制系统的设计与制作任务,其原理如下图1所示。设计要求:正常时SW1为断开状态,SW2为闭合状态。当小偷翻窗入室,会导致SW1闭合或SW2断开时,同时启动声光报警:直流蜂鸣器(BUZZER)通电发声,LED1与LED2交替闪亮,交替时间为0.5秒(时间精度不作严格要求),即BUZ1连续发出声音,同时LED1亮时,LED2灭,LED1灭时,LED2亮。单片机控制系统的设计与制作试题3单片机的程序设计课件#include<REGX52.H>sbitkey1=P0^0;sbitkey2=P0^1;sbitled1=P0^2;sbitled2=P0^3;sbitfengmingqi=P0^4;voiddelay(unsignedinta){// unsignedinti; while(--a){ for(i=0;i<600;i++); } }#include<REGX52.H>main(){fengmingqi=0;while(1){ if(key1==0||key2==1) { fengmingqi=1; led1=0; led2=1; delay(50); led1=1; led2=0; delay(50); } if(key1==1&&key2==0) { fengmingqi=0; led1=1; led2=1;} }}main()C51数据类型与标准C数据类型的最大不同之处:位型。位型(bit)字符型(char)整型(int)长整型(long)浮点型(float)双精度浮点型(double)数组类型(array)结构体类型(struct)共用体(union)枚举(enum)基本类型构造类型指针类型空类型数据类型2.3C51数据类型与运算C51数据类型与标准C数据类型的最大不同之处:位型。位型(b2.3.1常量与变量常量是指在程序执行过程中其值不能改变的量。在C51中支持整型常量、浮点型常量、字符型常量和字符串型常量。变量是在程序运行过程中其值可以改变的量。一个变量由两部分组成:变量名和变量值。变量必须先定义,后使用。位类型bit:位类型是C51编译器的一种扩充数据类型。利用它可以定义一个位类型变量,其值是一个二进制位,只有0或1。2.3.1常量与变量常量是指在程序位类型符有两个:bit和sbit。可以定义两种位变量。bit位类型符用于定义一般的可位处理位变量。它的格式如下:bit位变量名;在格式中可以加上各种修饰,但注意存储器类型只能是bdata、data、idata。只能是片内RAM的可位寻址区,严格来说只能是bdata。【例】bit型变量的定义。 bitdataa1;/*正确*/ bitbdataa2;/*正确*/ bitpdataa3;/*错误*/ bitxdataa4;/*错误*/位类型符有两个:bit和sbit。可以定义两种位变量sbit位类型符用于定义在可位寻址字节或特殊功能寄存器中的位,定义时须指明其位地址,可以是位直接地址,可以是可位寻址变量带位号,也可以是特殊功能寄存器名带位号。格式如下:sbit位变量名=位地址;如位地址为位直接地址,其取值范围为0x00~0xff;如位地址是可位寻址变量带位号或特殊功能寄存器名带位号,则在它前面须对可位寻址变量或特殊功能寄存器进行定义。字节地址与位号之间、特殊功能寄存器与位号之间一般用“^”作间隔。【例】sbit型变量的定义。 sbitOV=0xd2; sbitCY=oxd7; unsignedcharbdataflag; sbitflag0=flag^0; sfrP1=0x90; sbitP1_0=P1^0; sbitP1_1=P1^1; sbitP1_2=P1^2;sbit位类型符用于定义在可位寻址字节或特殊功能寄存

特殊功能寄存器变量MCS-51系列单片机片内有许多特殊功能寄存器,通过这些特殊功能寄存器可以控制MCS-51系列单片机的定时器、计数器、串口、I/O及其它功能部件,每一个特殊功能寄存器在片内RAM中都对应于一个字节单元或两个字节单元。在C51中,允许用户对这些特殊功能寄存器进行访问,访问时须通过sfr或sfr16类型说明符进行定义,定义时须指明它们所对应的片内RAM单元的地址。格式如下:sfr或sfr16特殊功能寄存器名=地址;sfr用于对MCS-51单片机中单字节的特殊功能寄存器进行定义,sfr16用于对双字节特殊功能寄存器进行定义。特殊功能寄存器名一般用大写字母表示。地址一般用直接地址形式,具体特殊功能寄存器地址见前面内容。【例】特殊功能寄存器的定义。sfrPSW=0xD0

温馨提示

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

评论

0/150

提交评论