




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
三、C语言基础任务:制作LED样式彩灯电路三、C语言基础任务:制作LED样式彩灯电路1如何学习C语言C语言能够让你深入系统底层,对于嵌入式系统的开发是必不可少的.你知道的操作系统,哪一个不是C语言写的?所有的windows,Unix,Linux,Mac,os/2,没有一个例外的,如果你不懂C语言,怎么可能深入到这些操作系统当中去呢?更不要说你去写它们的内核程序了。
很多新型的语言都是衍生自C语言,C++,Java,C#,J#,perl...哪个不是呢?掌握了C语言,可以说你就掌握了很多门语言,经过简单的学习,你就可以用这些新型的语言去开发了。
那么究竟怎样学习C语言呢?1:工欲善其事,必先利其器a)IDE集成开发环境b)充分利用网上资源
/bbsc)在实验板上做实验
如何学习C语言C语言能够让你深入系统底层,对于22:葵花宝典a)读程序b)动手写程序c)养成良好的编程习惯在比较复杂的代码后面要有注释3:登峰造极是不是写出底层程序就是程序设计高手呢?非也.精益求精,追解决问题的最优、最快,效率最高的方法。2:葵花宝典a)读程序在比较复杂的代码后面要有注释3:登峰造3程序设计语言C语言是一种程序设计语言。那么什么是程序设计语言?是用来编写计算机程序的语言C语言程序:#include<math.h>main(){floatx;x=56+2*sqrt(24)/(85-34);printf(“%f”,x);}算式:举例程序设计语言C语言是一种程序设计语言。是用来编写计算机程序的4CPU指令系统,由0、1序列构成的指令码组成如:10000000加10010000减用助记符号描述的指令系统如ADDA,B面向机器的语言机器语言汇编语言高级语言面向过程面向对象程序设计是数据被加工的过程1.1
C语言的发展历史程序设计语言的发展
CPU指令系统,由0、1序列构成的指令码组成用助记符号描述的5产生背景产生过程时间:1972~1973地点:美国贝尔实验室目的:UNIX操作系统设计人:Ken.Thompson和Dennis.M.RitchieC标准标准C:K&R合著《TheCProgrammingLanguage》ANSIC:1983年87ANSIC:1987年1990年国际标准的ANSICC语言发展过程C语言发展过程6语言简洁、紧凑、灵活运算符和数据类型丰富程序设计结构化、模块化生成目标代码质量高可移植性好>>>>>1.2
C语言特点>>>>>1.2C语言特点7main(){
……………….………………
…………..
……………….
……………
………………..}main(){
inti,j,sum;sum=0;for(i=1;i<10;i++)
{for(j=1;j<10;j++)
{sum+=i*j;
}
}printf(“%d\n”,sum);}格式特点
习惯用小写字母,字母大小写不同。语句以分号(;)结束。程序的书写格式灵活。{}必须成对出现。/*注释信息*/常用缩进(锯齿形)格式书写。main()main()格式特点832个关键字:(由系统定义,不能重作其它定义)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile<以下内容作初步了解,后面会作逐一学习并使用不能定义上面的关键字作变量、常量等其它用途以上关键字小写有效32个关键字:(由系统定义,不能重作其它定义)<以下内容作初99种控制语句
if()~else~for()~while()~do~while()continuebreakswitchgotoreturn9种控制语句1034种运算符:算术运算符:+-*/%++--关系运算符:<<===>>=!=逻辑运算符:!&&||位运算符:<<>>~|^&赋值运算符:=及其扩展条件运算符:?:逗号运算符:,指针运算符:*&求字节数:sizeof强制类型转换:(类型)分量运算符:.->下标运算符:[]其它:()-<34种运算符:<11算元符号样例一元后缀++j++后缀--
j--前缀++++j前缀----j自增、自减运算符
++--重难点算元符号样例一元后缀++j12自增、自减运算符
++--
注意:自增、自减运算符只有一个操作数,且操作数必须是变量,不能是常量和表达式,如5++,(a+b)++不合法。作用:使变量值加1或减1种类:前缀++i,--i(先执行i=i+1或i=i-1,再使用i值)后缀i++,i--(先使用i值,再执行i=i+1或i=i-1)自增、自减运算符++--注意:自增、自减运算符只有一个13当自增、自减运算符作为一个单独的语句,前后缀的作用是一样的:x++;与++x;等价相当于x=x+1;x--;与--x;等价相当于x=x-1;
但当自增、自减运算符的变量被应用到表达式中的时候,前后缀的区别就存在了:自增、自减运算符
++--当自增、自减运算符作为一个单独的语句,前后缀14intx,y;x=5;y=++x;intx,y;x=5;y=x++;执行后x,y都为6执行后x=6,y=5自增、自减运算符
++--前缀++i,--i(先执行i+1或i-1,再使用i值)后缀i++,i--(先使用i值,再执行i+1或i-1)x=x+1;y=x;y=x;x=x+1;intx,y;intx,y;执行后x,y都为6执行后x=15<C数据类型基本类型构造类型指针类型空类型void定义类型typedef数值类型字符类型char枚举类型enum整型实型单精度型float双精度型double短整型short长整型long整型int数组结构体struct共用体unionC的数据类型重点掌握unsignedcharunsignedint的使用<C基本类型构造类型指针类型空类型void定义类型typed16常量与变量(掌握)常量:在程序执行过程中,其值保持不变的量(即常数)变量:在程序执行过程中,其值可以改变的量变量的大小范围,由定义该变量的数据类型决定例如char的范围是-128~~127(少用)unsignedchar的范围是0~~255(重点)
int
的范围是-32768~~32767(少用)unsignedint的范围是0~~6553516位8位常量与变量(掌握)常量:在程序执行过程中,其值保持不变的量(17常量的定义:使用#define命令定义常量例如:#definePI3.14
则PI是个常量,其值大小为3.14(注意既然是常量,其大小值就不能改变,如PI=5,这样的写法是错误的.)小写,且#不能少空格常量名,名字可随意,但不能为关键字空格常量的大小常量的定义:使用#define命令定义常量小写,且#不能少18#defineS3#include<reg51.h>voidmain(){unchari,j,k;
i=5;j=6;
k=(i+j)*S;P2=k;}综合运用:编译预处理命令每句话结束时要加上”;”可同时定义多个变量,每个变量间用“,”隔开#defineS3综合运用:编译预处理命令每句话结19选择结构程序设计解决选择结构的问题需要对条件进行逻辑判断。C语言提供了关系表达式和逻辑表达式,可以得到逻辑判断结果。C语言提供了选择语句,来根据逻辑判断结果决定执行程序的哪一个流程(分支)。问题:如何进行逻辑判断?逻辑判断结果如何表达?
?2.0
选择结构导入在程序设计中含有选择结构的问题是大量存在的(判断选择)
选择结构程序设计解决选择结构的问题需要对条件进行逻辑判断。问20逻辑判断结果如何表达?
C语言的逻辑判断结果有两个:1和01表示“真”0表示“假”如何进行逻辑判断?对于任意一个表达式(运算量):若其值为非0,无论正负,都代表“真”;若其值为0,则代表“假”。C语言的逻辑判断、逻辑值为0即假非0即真逻辑判断结果如何表达?
C语言的逻辑判断结果如何进行21
关系运算实质上就是比较运算。
例如:a>3为一比较运算,
若a=5,a>3成立,结果为“真”,
若a=1,a>3不成立,结果为“假”。上述表达式:a>3称为关系表达式。2.1关系运算符和关系表达式关系运算实质上就是比较运算。
例如:a22关系运算符关系运算符(双目运算符)种类(六种):<;<=;>;>=;==;!=;小于或等于大于或等于不等于等于注意:“==”与“=”的不同之处“==”是两者是否相等的关系If(a==10)//判断a是否等于10“=”是赋值运算a=10;//把10赋给a
关系运算符关系运算符(双目运算符)小于或等于大于或等于不等23应当:x>0&&x<102.2逻辑运算符和逻辑表达式逻辑运算符逻辑表达式C语言如何表达数学式子0<x<10?应当:x>0&&x<102.2逻辑运算符和逻辑表达式逻辑24ab!a
!b
a&&b
a||b
真真假
假
真
真
真假假
真
假
真
假真真
假
假
真
假假真
真
假
假逻辑运算符(三种):
&&(逻辑与)||(逻辑或)!(逻辑非)逻辑运算真值表逻辑运算符&&和||为双目运算符,!为单目运算符复习:何谓逻辑真假?a、b的值有两种要么是0,要么非0ab!a25a&&b当a,b均为非0时,才为1a||b当a,b中有一个为非0时,就为1!a当a为0,!a为1;反之为0ab!a!ba&&ba||b
真真
真假
假真
假假?a&&b当a,b均为非0时,才为1a||26(4&&0)||2值为1
在逻辑运算中,非0值参加逻辑运算时被看成1处理.(5>3)&&2||(8<(4-(!0)))值为1
a=4,b=5则a||b为1
a=4,b=5则(!a)||b为1逻辑表达式的值逻辑表达式的值:1或0,表示逻辑值“真”或“假”例如:a=4则!a
值为0.
a=4,b=5则a&&b为1(4&&0)||2值为1在逻辑运算中,非27执行过程:当表达式值非0(真)时,执行语句,否则,不执行语句。形式1:if(表达式)语句2.3if语句(三种形式)表达式语句非0真=0假例如:
if(x>y)//如果x的值大于y的值{P0=5;//则执行P0=5,再执行P2=6;}//否则跳过{}里面的语句,直接执行P2=6;//P2=6;执行过程:当表达式值非0(真)时,执行语句,否则,不执行28注意格式问题:形式1:if(表达式)语句表达式语句非0真=0假语句可以是一句,也可以是多句,如下所示:if(x>y)
{P0=2;P1=3;P2=4;P3=5;}if(x>y)P0=2;如果语句是多句组成的,则“{}”不能省略,如果语句只有1句,则“{}”可以写,也可以省略注意格式问题:形式1:if(表达式)语句表达式语句29表达式语句1语句2非0=0执行过程:
当表达式值为非0,执行语句1;当表达式值为0,执行语句2。形式2:if(表达式)语句1else语句2例如:
if(x>y) P0=2;elseP0=4;注意:语句同样是可以由多句或1句构成.如果是多句同样需要用“{}”表达式语句1语句2非0=0执行过程:形式2:if(表达30执行过程:从上向下逐一对if后面的表达式进行检测。当某一个表达式的值为非0时,就执行与此有关的子句中的语句,其余部分就被越过去。如果所有表达式的值都是0,则执行最后的else子句;如果没有最后的那个else子句,那么,将不进行任何操作。形式3:if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3……elseif(表达式n)语句nelse语句n+10表达式1
表达式2
表达式n语句n+100语句n
语句2
语句1
非0
非0
非0…
执行过程:形式3:if(表达式1)语句1031例如:if(a&&b)…if(a>b)…if(3)…if(a+88)…
1.表达式可以是逻辑表达式、关系表达式、算术表达式。2.语句必须以分号结束。
3.若语句不止一条,则必须用{}括起来。在{}外不加分号。注意的问题例如:if(a&&b)…1.表达式可以是逻辑表达式32形式3:if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3……elseif(表达式n)语句nelse语句n+1例如:if(number>500)cost=0.15;elseif(number>300)cost=0.10;elseif(number>100)cost=0.075;elseif(number>50)cost=0.05;elsecost=0;0表达式1
表达式2
表达式n语句n+100语句n
语句2
语句1
非0
非0
非0…
形式3:if(表达式1)语句1例如:0表达33switch语句是多分支选择语句,也叫开关语句一般形式:
switch(表达式){case常量表达式1:语句1;[break;]case常量表达式2:语句2;[break;]…case常量表达式n:语句n;[break;]default:语句n+1;}
4.4switch语句switch表达式语句1语句2语句n语句n+1…式1式2式ndefaultcase
执行过程:当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句。若所有的case中的常量表达式的值都没有与表达式的值匹配,则执行default后面的语句。switch语句是多分支选择语句,也叫开关语句4.4s34循环结构程序设计3.0
循环结构导入在程序设计中含有选择结构的问题是大量存在的
对输入的10个整数求和,怎么编程?
对输入的100个整数求和,怎么编程?以上问题可以引出一个概念“循环”,简单而言:循环就是不断反复地执行同一段程序。循环结构程序设计3.0循环结构导入在程序设计中353.1
概述C语言可实现的循环:用goto和if构成循环while语句do~while语句for语句不提倡当型循环——先判断后执行直到型循环——先执行后判断多功能3.1概述C语言可实现的循环:不提倡当型循环——先判36用while语句实现当型循环表达式循环体当表达式的值为真(非0)时,执行其中的内嵌语句(循环体),然后回过头来再判断表达式的值,如此重复;当表达式为假(0)时结束循环。3.2while语句一般形式:while(表达式)
循环体语句表达式循环体假(0)真(非0)执行过程:先判断表达式,后执行循环体。用while语句实现当型循环表达式循环体当表37循环控制表达式循环控制变量循环体注意:
循环体有可能一次也不执行。循环前,必须给循环控制变量赋初值。若循环体包含一条以上的语句,应以复合语句形式出现{}。循环体中,必须有改变循环控制变量值的语句(使循环趋向结束的语句),否则进入死循环。
无限循环:while(1)循环体;循环体可以为空如:i=200;while(i--);//i的值不停减1//直至为0//常用作延时3.2while语句一般形式:while(表达式)
循环体语句例如:k=1;while(k<=100){s=s+k;k++;}循环控制表达式循环控制变量循环体注意:3.2while38分析:累加求和的问题s=1+2+3+…+100s=0s=s+1s=s+2s=s+3……和的新值s=s+k和的当前值求和项当前值例1用while语句计算#include<stdio.h>main(){intk,s;s=0;k=1;while(k<=100){s=s+k;k++;}while(1);//原地踏步,不再往//执行}注意:s、k的初值及位置分析:累加求和的问题s=0和的新值s=s+k和的当前值求和项39#include<reg51.h>voidmain(){unsignedcharj;unsignedinti;j=10;while(j--)//先将j判断(使用){//后将j减1 P2=j;
i=60000; while(i--) { ; }}}9到0的倒计时#include<reg51.h>9到0的倒计时40用do-while语句实现直到型循环执行循环体,当表达式的值为真(非0)时,再次执行循环体,如此重复;当表达式为假(0)时结束循环。3.3do-while语句一般形式:do
循环体语句while(表达式);
表达式循环体假(0)真(非0)执行过程:先执行循环体,后判断表达式。循环体至少执行一次。do-while语句可转化成while语句。表达式循环体;不可省略!切记!!用do-while语句实现直到型循环执行循环体41用do-while语句实现9到0的倒计时#include<reg51.h>voidmain(){unsignedcharj;//0--9unsignedinti;j=9;do{P2=j; i=60000; while(i--) { ; }}while(j--);
}程序原地踏步,不再往下执行该处分号不能少.用do-while语句#include<reg51.h>程42适合于循环次数确定或不定3.4for语句一般形式:执行过程:for(表达式1;表达式2;表达式3)
循环体语句求解表达式1循环体语句求解表达式3下一语句表达式2真(非0)假(0)说明:表达式1在进入循环之前求解(循环变量赋初值)for语句可转化成while语句。适合于循环次数确定或不定3.4for语句一般形式:执行433.4for语句最简单的应用形式:for(循环变量赋初值;循环条件;循环变量增值;)循环体语句例如:sum=0;for(i=1;i<=3;i++)sum=sum+i;一般形式:for(表达式1;表达式2;表达式3)
循环体语句3.4for语句最简单的应用形式:for(循环变量赋初44for(表达式1;表达式2;表达式3)循环体语句这个分号不能移走表达式1表达式3可以移到循环体语句的后边这个分号不能丢掉表达式2为空,则不判断循环条件,成无限循环{表达式3;}for循环的其他形式:for(表达式1;表达式2;表达式3)这个分号不451.表达式1省略时,应在for前给循环变量赋初值。如:k=1;for(;k<=3;k++)s=s+k;2.表达式2省略时,不判断循环条件,将成为“死循环”,需要在循环体中引入break语句以退出循环3.表达式3省略时,循环体内应有使循环条件改变的语句。如:for(k=1;k<=3;){s=s+k;
k++;}for循环的说明:1.表达式1省略时,应在for前给循环变量赋初值。for循464.同时省略表达式1和表达式3,只有表达式2,此时相当于while语句。如k=1;for(;k<=100;){s=s+k;k++;}k=1;while(k<=100){s=s+k;k++;}for循环的说明:5.表达式2一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值不等于0就执行循环体。如:for(k=1;k-4;k++)s=s+k;仅当k的值等于4时终止循环。k-4是数值表达式。4.同时省略表达式1和表达式3,只有表达式2,此时相当于w47例1用for语句实现9到0的倒计时#include<reg51.h>voidmain(){unsignedcharj;//0--9unsignedinti;for(j=10;j-->0;){P2=j; i=60000; while(i--) { ; }}while(1);//程序原地踏步}该处省略表达式3例1用for语句#include<reg51.h>该处省483.5几种循环的比较while(表达式)
循环体语句do
循环体语句while(表达式);for(表达式1;表达式2;表达式3;)
循环体语句循环条件初始化也可在for前循环控制条件修改循环条件也可在循环体内(改变循环控制变量值)1.不提倡用goto构成循环。2.关于循环的控制:3.5几种循环的比较while(表达式)dofor(493.5几种循环的比较3.一种循环可以解决的问题,使用另外两种同样可行,只是方便程度不同。4.while循环一般用于循环次数不定的情况,for循环一般用于循环次数确定的情况(也可以用于循环次数不定的情况),do-while循环一般用于至少需要执行一次的情况。5.for循环和while循环是先判断条件是否为真,再执行循环体,因此,可出现循环一次也不执行的情况;do-while循环是先执行循环体,再判断条件是否为真,因此,循环体至少执行一次。6.while循环、do-while循环、for循环,可以用break语句跳出循环,用continue语句结束本次循环。3.5几种循环的比较3.一种循环可以解决的问题,使用503.6break语句和continue语句break语句:break;功能:跳出switch结构;在循环语句中,终止并跳出循环体。说明:break只能终止并跳出最近一层的结构。break不能用于循环语句和switch语句之外的任何其它语句之中。#include<reg51.h>voidmain(){unsignedcharj;//0--9j=0;while(1){j++;if(j==9) break;}while(1); }3.6break语句和continue语句break语513.7break语句和continue语句continue语句:continue;功能:结束本次循环,结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断。说明:continue仅用于循环语句中。结束本次循环,循环体的剩余语句被忽略,执行表达式3,进入下一循环。continue总是作if的内嵌语句3.7break语句和continue语句continu52#include<reg51.h>voidmain(){unsignedcharj;//0--9j=0;while(1){if(j==3||j==6) continue;if(j==10) break;P2=j;delay(50);j++;}while(1); }间隔输出0—9除3和6外#include<reg51.h>间隔输出0—9534.0引言一、数组的引入为了便于处理一批类型相同的数据,引入了数组类型.假设现在要保存每个学生的成绩,那就需要40个变量,但这样一来输入、输出、计算都会变得繁琐.在这种情况下,我们可以使用数组类型,声明一个含有40个元素的数组,每个数组元素存放一个成绩,成绩的输入、输出、计算都可通过循环来实现.例:某班有40名学生,求该班成绩的平均分#include<stdio.h>main(){chari,j,k,l,m,n~~~~~
}4.0引言一、数组的引入假设现在要保存每个学生的成54二、数组的概念1.数组:由具有相同类型的固定数量的元素组成的结构2.数组元素:每一个数组元素都是一个变量,为了与一般的变量相区别,我们称数组元素为下标变量3.下标变量在数组中的位置序号称下标,c语言中下标
从0开始
#include<stdio.h>main(){intj,ave,s[40];charsum;sum=0;for(j=0;j<=39;j++){sum=sum+s[j];}ave=sum/40;}二、数组的概念2.数组元素:每一个数组元素3.下标变量在数组55
一、一维数组的定义1.格式:类型标识符数组名[常量表达式];
例:inta[10];charb[10],c[5];2.说明(1)数组名是用户定义的标识符,数组名表示了一个存储区的首地址(即第一个数组元素的地址)84:668095a[0]a[1]a[2]:a[9](2)常量表达式:指数组中元素的个数(3)数组元素的下标由零开始
数组a有10个元素:a[0],a[1]…a[9](4)定义时[]中不能包含变量,4.1一维数组的定义和引用一、一维数组的定义2.说明84:66561.引用形式:
数组名[下标]
注意:如果出现a[5]=72;编译时不会指出错误,系统会将a[4]后下一个存储单元赋值为72,但这样可能会破坏数组以外其他变量的值a[5]8475668095a[0]a[1]a[2]a[3]a[4]72假设这个存储空间是变量x的,实际上a[5]是不存在的,如果执行了a[5]=72,会将x原有的正确数据覆盖掉2.说明(1)下标可以是整型常量或整型表达式
如:a[1],a[2*3] inti=2;a[i]下标不要超范围数组定义为inta[5],数组长度为5而下标在0----4之内,即a[0]----a[4]二、数组元素的引用(3)数组元素地址表示&a[i],&a[0]即a1.引用形式:数组名[下标]注意:如果出现57三、一维数组的初始化1.概念: 在定义一维数组时对各元素指定初始值称为数组的初始化如:inta[5]={1,3,5,7,9};2.说明对数组的全体元素指定初值,初值用{}括起来,数据之间用逗号分开.在这种情况下,可以不指明数组的长度,系统会根据{}内数据的个数确定数组的长度如:inta[]
={1,3,5,7,9};三、一维数组的初始化如:inta[5]={158(3)使数组中的全部元素初始值都为0如:inta[5]={0,0,0,0,0};更简单的写法:inta[5]={0};(2)对数组中部分元素指定初值(这时不能省略数组长度)
如:inta[5]
={1,3,5}; 从前往后,后面元素自动赋0(3)使数组中的全部元素初始值都更简单的写法:int59例3:输入一个数据,在已知数组中查找是否有该数据5801926374x9a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]#include<reg51.h>main(){chari,x;chara[10]={5,8,0,1,9,2,6,3,7,4};x=8;for(i=0;i<10;i++)if(x==a[i]){P2=0x01;
break;}if(i==10)P2=0x02;}例3:输入一个数据,在已知数组中查找是否有该数据560利用数组设计复杂流水灯效果#include<reg51.h>voiddelay(unsignedchari){unsignedintj;for(;i>0;i--)for(j=1247;j>0;j--);}利用数组设计复杂流水灯#include<reg51.h>61voidmain(){unsignedchari;unsignedcharled[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xc0,0x60,0x30,0x0c,0x06,0x03,0x07,0x0e,0x1c,0x38,0x70,0xe0,0xf0,0x78,0x3c,0x1e,0x0f,0x1f,0x3e,0x7c,0xf8,0xfc,0x7e,0x3f,0x7f,0xfe,0xff,0xff,0x00};花样彩灯编码,根据需要设置voidmain()花样彩灯编码,根据需要设置62while(1){for(i=0;i<37;i++){ P1=led[i]; delay(50);}}}while(1)63格式:voidmain()
特点:无返回值,无参。
任何一个C程序有且仅有一个main函数,
它是整个程序开始执行的入口。
例:voidmain()
{
总程序从这里开始执行;
其他语句;
}3.1、main函数
格式:voidmain()
特点:无返回值,无参。
任何64运用查表程序实现复杂流水灯设计:运用查表程序实现复杂流水灯设计:65实例应用:将30H单元地址中的内容(#34H)在数码管上显示,左边显示3,右边显示4。如下图所示实例应用:将30H单元地址中的内容(#34H)在数码管66键盘的应用1:以下图为例,要求每按一次按钮数码管显示对应数字键盘的应用1:以下图为例,要求每按一次按钮数码管显示对应数字67键盘接口和键输入软件中应解决的问题消除键抖动
通常按键开关为机械弹性开关,机械开关在闭合及断开瞬间均伴随有一连串的抖动
,时间一般为5~20ms。
键按下闭合稳定前沿抖动后沿抖动释放稳定键释放按键时的抖动消除键抖动可用软件方法消除(避开抖动)键盘接口和键输入软件中应解决的问题键按下闭合稳定前沿抖动后沿68具体处理办法:~~~~~~~JBP1.0,GO;检测是否按下CALLYS5MSJBP1.0,GO;是抖动则跳转~~~~;键按下处理JNBP1.0,$;检测是否松手GO:JBP1.1,GO1CALLYS5MSJBP1.1,GO1;是抖动则跳转~~~~~~~;键按下处理JNBP1.1,$;检测是否松手GO1:~~~~~~~;其它处理具体处理办法:~~~~~~~69YS20MS:MOVR7,#10D2:MOVR6,#50D1:MOVR5,#200D0:DJNZR5,D0DJNZR6,D1DJNZR7,D2RETYS5MS:MOVR7,#2D22:MOVR6,#50D11:MOVR5,#20D00:DJNZR5,D00DJNZR6,D11DJNZR7,D22RET两个不同的延时在同一个程序中的用法两个子程序结束时都有RETYS20MS:YS5MS:两个不同的延时在同一个程序中的用70键盘的应用2:以下图为例,要求每按一次按钮数码管显示对应数字键盘的应用2:以下图为例,要求每按一次按钮数码管显示对应数字71参考程序:ORG0000HMAIN:MOV40H,#0C0H;初次显示0MOV41H,#0C0HLOOP:;循环检测键盘并显示ACALLXIANSHIJBP1.0,GO2MOV40H,41H;传递数据MOV41H,#0F9H;将1送显示JNBP1.0,$;检测是否松手GO2:JBP1.1,GO3MOV40H,41HMOV41H,#0A4H;JNBP1.0,$;检测是否松手GO3:SJMPLOOP
XIANSHI:MOVP3,#01H;1管显示MOVP2,40H;送数显示ACALLDELAYMOVP3,#02H;2管显示MOVP2,41H;送数显示ACALLDELAYRETDELAY:MOVR7,#255DJNZR7,$RETEND参考程序:ORG0000HXIANSHI72四.空操作指令NOP;PC←PC+1这是一条单字节指令。执行时,不作任何操作(即空操作),仅将程序计数器PC的内容加1,使CPU指向下一条指令继续执行程序。它要占用一个机器周期,常用来产生时间延迟,构造延时程序。四.空操作指令73三、C语言基础任务:制作LED样式彩灯电路三、C语言基础任务:制作LED样式彩灯电路74如何学习C语言C语言能够让你深入系统底层,对于嵌入式系统的开发是必不可少的.你知道的操作系统,哪一个不是C语言写的?所有的windows,Unix,Linux,Mac,os/2,没有一个例外的,如果你不懂C语言,怎么可能深入到这些操作系统当中去呢?更不要说你去写它们的内核程序了。
很多新型的语言都是衍生自C语言,C++,Java,C#,J#,perl...哪个不是呢?掌握了C语言,可以说你就掌握了很多门语言,经过简单的学习,你就可以用这些新型的语言去开发了。
那么究竟怎样学习C语言呢?1:工欲善其事,必先利其器a)IDE集成开发环境b)充分利用网上资源
/bbsc)在实验板上做实验
如何学习C语言C语言能够让你深入系统底层,对于752:葵花宝典a)读程序b)动手写程序c)养成良好的编程习惯在比较复杂的代码后面要有注释3:登峰造极是不是写出底层程序就是程序设计高手呢?非也.精益求精,追解决问题的最优、最快,效率最高的方法。2:葵花宝典a)读程序在比较复杂的代码后面要有注释3:登峰造76程序设计语言C语言是一种程序设计语言。那么什么是程序设计语言?是用来编写计算机程序的语言C语言程序:#include<math.h>main(){floatx;x=56+2*sqrt(24)/(85-34);printf(“%f”,x);}算式:举例程序设计语言C语言是一种程序设计语言。是用来编写计算机程序的77CPU指令系统,由0、1序列构成的指令码组成如:10000000加10010000减用助记符号描述的指令系统如ADDA,B面向机器的语言机器语言汇编语言高级语言面向过程面向对象程序设计是数据被加工的过程1.1
C语言的发展历史程序设计语言的发展
CPU指令系统,由0、1序列构成的指令码组成用助记符号描述的78产生背景产生过程时间:1972~1973地点:美国贝尔实验室目的:UNIX操作系统设计人:Ken.Thompson和Dennis.M.RitchieC标准标准C:K&R合著《TheCProgrammingLanguage》ANSIC:1983年87ANSIC:1987年1990年国际标准的ANSICC语言发展过程C语言发展过程79语言简洁、紧凑、灵活运算符和数据类型丰富程序设计结构化、模块化生成目标代码质量高可移植性好>>>>>1.2
C语言特点>>>>>1.2C语言特点80main(){
……………….………………
…………..
……………….
……………
………………..}main(){
inti,j,sum;sum=0;for(i=1;i<10;i++)
{for(j=1;j<10;j++)
{sum+=i*j;
}
}printf(“%d\n”,sum);}格式特点
习惯用小写字母,字母大小写不同。语句以分号(;)结束。程序的书写格式灵活。{}必须成对出现。/*注释信息*/常用缩进(锯齿形)格式书写。main()main()格式特点8132个关键字:(由系统定义,不能重作其它定义)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile<以下内容作初步了解,后面会作逐一学习并使用不能定义上面的关键字作变量、常量等其它用途以上关键字小写有效32个关键字:(由系统定义,不能重作其它定义)<以下内容作初829种控制语句
if()~else~for()~while()~do~while()continuebreakswitchgotoreturn9种控制语句8334种运算符:算术运算符:+-*/%++--关系运算符:<<===>>=!=逻辑运算符:!&&||位运算符:<<>>~|^&赋值运算符:=及其扩展条件运算符:?:逗号运算符:,指针运算符:*&求字节数:sizeof强制类型转换:(类型)分量运算符:.->下标运算符:[]其它:()-<34种运算符:<84算元符号样例一元后缀++j++后缀--
j--前缀++++j前缀----j自增、自减运算符
++--重难点算元符号样例一元后缀++j85自增、自减运算符
++--
注意:自增、自减运算符只有一个操作数,且操作数必须是变量,不能是常量和表达式,如5++,(a+b)++不合法。作用:使变量值加1或减1种类:前缀++i,--i(先执行i=i+1或i=i-1,再使用i值)后缀i++,i--(先使用i值,再执行i=i+1或i=i-1)自增、自减运算符++--注意:自增、自减运算符只有一个86当自增、自减运算符作为一个单独的语句,前后缀的作用是一样的:x++;与++x;等价相当于x=x+1;x--;与--x;等价相当于x=x-1;
但当自增、自减运算符的变量被应用到表达式中的时候,前后缀的区别就存在了:自增、自减运算符
++--当自增、自减运算符作为一个单独的语句,前后缀87intx,y;x=5;y=++x;intx,y;x=5;y=x++;执行后x,y都为6执行后x=6,y=5自增、自减运算符
++--前缀++i,--i(先执行i+1或i-1,再使用i值)后缀i++,i--(先使用i值,再执行i+1或i-1)x=x+1;y=x;y=x;x=x+1;intx,y;intx,y;执行后x,y都为6执行后x=88<C数据类型基本类型构造类型指针类型空类型void定义类型typedef数值类型字符类型char枚举类型enum整型实型单精度型float双精度型double短整型short长整型long整型int数组结构体struct共用体unionC的数据类型重点掌握unsignedcharunsignedint的使用<C基本类型构造类型指针类型空类型void定义类型typed89常量与变量(掌握)常量:在程序执行过程中,其值保持不变的量(即常数)变量:在程序执行过程中,其值可以改变的量变量的大小范围,由定义该变量的数据类型决定例如char的范围是-128~~127(少用)unsignedchar的范围是0~~255(重点)
int
的范围是-32768~~32767(少用)unsignedint的范围是0~~6553516位8位常量与变量(掌握)常量:在程序执行过程中,其值保持不变的量(90常量的定义:使用#define命令定义常量例如:#definePI3.14
则PI是个常量,其值大小为3.14(注意既然是常量,其大小值就不能改变,如PI=5,这样的写法是错误的.)小写,且#不能少空格常量名,名字可随意,但不能为关键字空格常量的大小常量的定义:使用#define命令定义常量小写,且#不能少91#defineS3#include<reg51.h>voidmain(){unchari,j,k;
i=5;j=6;
k=(i+j)*S;P2=k;}综合运用:编译预处理命令每句话结束时要加上”;”可同时定义多个变量,每个变量间用“,”隔开#defineS3综合运用:编译预处理命令每句话结92选择结构程序设计解决选择结构的问题需要对条件进行逻辑判断。C语言提供了关系表达式和逻辑表达式,可以得到逻辑判断结果。C语言提供了选择语句,来根据逻辑判断结果决定执行程序的哪一个流程(分支)。问题:如何进行逻辑判断?逻辑判断结果如何表达?
?2.0
选择结构导入在程序设计中含有选择结构的问题是大量存在的(判断选择)
选择结构程序设计解决选择结构的问题需要对条件进行逻辑判断。问93逻辑判断结果如何表达?
C语言的逻辑判断结果有两个:1和01表示“真”0表示“假”如何进行逻辑判断?对于任意一个表达式(运算量):若其值为非0,无论正负,都代表“真”;若其值为0,则代表“假”。C语言的逻辑判断、逻辑值为0即假非0即真逻辑判断结果如何表达?
C语言的逻辑判断结果如何进行94
关系运算实质上就是比较运算。
例如:a>3为一比较运算,
若a=5,a>3成立,结果为“真”,
若a=1,a>3不成立,结果为“假”。上述表达式:a>3称为关系表达式。2.1关系运算符和关系表达式关系运算实质上就是比较运算。
例如:a95关系运算符关系运算符(双目运算符)种类(六种):<;<=;>;>=;==;!=;小于或等于大于或等于不等于等于注意:“==”与“=”的不同之处“==”是两者是否相等的关系If(a==10)//判断a是否等于10“=”是赋值运算a=10;//把10赋给a
关系运算符关系运算符(双目运算符)小于或等于大于或等于不等96应当:x>0&&x<102.2逻辑运算符和逻辑表达式逻辑运算符逻辑表达式C语言如何表达数学式子0<x<10?应当:x>0&&x<102.2逻辑运算符和逻辑表达式逻辑97ab!a
!b
a&&b
a||b
真真假
假
真
真
真假假
真
假
真
假真真
假
假
真
假假真
真
假
假逻辑运算符(三种):
&&(逻辑与)||(逻辑或)!(逻辑非)逻辑运算真值表逻辑运算符&&和||为双目运算符,!为单目运算符复习:何谓逻辑真假?a、b的值有两种要么是0,要么非0ab!a98a&&b当a,b均为非0时,才为1a||b当a,b中有一个为非0时,就为1!a当a为0,!a为1;反之为0ab!a!ba&&ba||b
真真
真假
假真
假假?a&&b当a,b均为非0时,才为1a||99(4&&0)||2值为1
在逻辑运算中,非0值参加逻辑运算时被看成1处理.(5>3)&&2||(8<(4-(!0)))值为1
a=4,b=5则a||b为1
a=4,b=5则(!a)||b为1逻辑表达式的值逻辑表达式的值:1或0,表示逻辑值“真”或“假”例如:a=4则!a
值为0.
a=4,b=5则a&&b为1(4&&0)||2值为1在逻辑运算中,非100执行过程:当表达式值非0(真)时,执行语句,否则,不执行语句。形式1:if(表达式)语句2.3if语句(三种形式)表达式语句非0真=0假例如:
if(x>y)//如果x的值大于y的值{P0=5;//则执行P0=5,再执行P2=6;}//否则跳过{}里面的语句,直接执行P2=6;//P2=6;执行过程:当表达式值非0(真)时,执行语句,否则,不执行101注意格式问题:形式1:if(表达式)语句表达式语句非0真=0假语句可以是一句,也可以是多句,如下所示:if(x>y)
{P0=2;P1=3;P2=4;P3=5;}if(x>y)P0=2;如果语句是多句组成的,则“{}”不能省略,如果语句只有1句,则“{}”可以写,也可以省略注意格式问题:形式1:if(表达式)语句表达式语句102表达式语句1语句2非0=0执行过程:
当表达式值为非0,执行语句1;当表达式值为0,执行语句2。形式2:if(表达式)语句1else语句2例如:
if(x>y) P0=2;elseP0=4;注意:语句同样是可以由多句或1句构成.如果是多句同样需要用“{}”表达式语句1语句2非0=0执行过程:形式2:if(表达103执行过程:从上向下逐一对if后面的表达式进行检测。当某一个表达式的值为非0时,就执行与此有关的子句中的语句,其余部分就被越过去。如果所有表达式的值都是0,则执行最后的else子句;如果没有最后的那个else子句,那么,将不进行任何操作。形式3:if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3……elseif(表达式n)语句nelse语句n+10表达式1
表达式2
表达式n语句n+100语句n
语句2
语句1
非0
非0
非0…
执行过程:形式3:if(表达式1)语句10104例如:if(a&&b)…if(a>b)…if(3)…if(a+88)…
1.表达式可以是逻辑表达式、关系表达式、算术表达式。2.语句必须以分号结束。
3.若语句不止一条,则必须用{}括起来。在{}外不加分号。注意的问题例如:if(a&&b)…1.表达式可以是逻辑表达式105形式3:if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3……elseif(表达式n)语句nelse语句n+1例如:if(number>500)cost=0.15;elseif(number>300)cost=0.10;elseif(number>100)cost=0.075;elseif(number>50)cost=0.05;elsecost=0;0表达式1
表达式2
表达式n语句n+100语句n
语句2
语句1
非0
非0
非0…
形式3:if(表达式1)语句1例如:0表达106switch语句是多分支选择语句,也叫开关语句一般形式:
switch(表达式){case常量表达式1:语句1;[break;]case常量表达式2:语句2;[break;]…case常量表达式n:语句n;[break;]default:语句n+1;}
4.4switch语句switch表达式语句1语句2语句n语句n+1…式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东铝业职业学院《组织行为学》2023-2024学年第二学期期末试卷
- 武汉铁路职业技术学院《数据结构与算法实践》2023-2024学年第一学期期末试卷
- 上饶师范学院《广播电视概论》2023-2024学年第二学期期末试卷
- 湖南铁路科技职业技术学院《基础商务英语(二)》2023-2024学年第一学期期末试卷
- 盐城工学院《非政府组织管理》2023-2024学年第二学期期末试卷
- 浙江音乐学院《计算机捡索》2023-2024学年第二学期期末试卷
- 岳阳市2024-2025学年五年级数学第二学期期末统考试题含答案
- 上海工程技术大学《传统民居与乡土建筑》2023-2024学年第二学期期末试卷
- 南通职业大学《地质类科技英语》2023-2024学年第一学期期末试卷
- 江苏省宿迁市沭阳怀文中学2025年初三第一次模拟考试适应性测试语文试题含解析
- 苏州市公安局招聘警务辅助人员笔试真题2024
- GA/T 1433-2017法庭科学语音同一认定技术规范
- 铁矿石外贸合同中英对照
- (整理)变频器电力电缆标准
- 《统计学》完整ppt课件(PPT 228页)
- 人力资源部岗位廉洁风险点及防范措施
- 求一个数比另一个数多几少几应用题
- 公路工程全过程跟踪审计服务方案
- 华南师范大学论文论文封面
- 五年级冀教版英语下册按要求写句子专项习题
- 中英文验货报告模板
评论
0/150
提交评论