




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务1信号灯模块设计与制作单片机技术与应用智能车间指示系统设计与制作主题讨论:单片机是什么?把CPU、存储器和输入/输出接口电路集成在一个芯片上,这就是单片机。单片机是集成在一块(单)芯片上的微型计算机。MCU:Micro-ControllerUnit,微控制器任务1信号灯模块设计与制作任务1信号灯模块设计与制作【基础任务要求】模拟企业车间信号灯控制,用发光二极管代替信号灯,通过单片机控制一个发光二极管LED闪烁,让LED先点亮,延时一定时间之后熄灭,然后再点亮,熄灭,循环不止。设计电路图制作电路板控制程序设计软硬件联调程序下载产品测试单片机应用系统开发流程任务1信号灯模块设计与制作STC89C52单片机时钟电路复位电路电源电路发光二极管电路系统框图【知识链接】1.单片机的内部结构【知识链接】1.单片机的内部结构家里的统一节拍由混乱恢复到最初的和谐【知识链接】1.单片机的内部结构【知识链接】1.单片机的内部结构大姐:远距离通信【知识链接】1.单片机的内部结构二姐:行程时间安排【知识链接】1.单片机的内部结构三姐:帮CPU处理紧急突发事件【知识链接】1.单片机的内部结构孪生四兄弟:近距离通信【知识链接】1.单片机的内部结构存放数据存放程序单片机控制台CPU中央处理器(控制器和运算器)串行端口定时计数器中断系统并行端口(P0、P1、P2、P3)时钟电路复位电路连线题大姐孪生四兄弟爸爸和妈妈家长的法宝二姐三姐硬件设计-绘电路单片机发光二极管
请问如何连接单片机与发光二极管呢?硬件设计-绘电路3~20mA电流发光二极管发光硬件设计-绘电路电路绘制规范:用统一规定的元件符号尽量避免导线的交叉导线要求横平竖直设置元器件参数元件放在编辑区内细致规范严谨小锦囊任务名:信号灯模块设计与制作元件名称图片型号数量Proteus中的名称单片机芯片STC89C521用AT89C51替代晶振12MHZ1CRYSTAL电容22pF2CAP电解电容22μf/16V1CAP-ELEC电阻1KΩ1RES电阻50Ω1RES发光二极管1LED-RED【知识链接】2.单片机的引脚【知识链接】2.单片机的引脚【知识链接】2.单片机的引脚【知识链接】2.单片机的引脚【知识链接】2.单片机的引脚【知识链接】2.单片机的引脚除了这5个控制引脚外,他还需要8条数据线引脚和16条地址线引脚,大家想想我们到哪里找这么多引脚给他用呢?【知识链接】2.单片机的引脚P0口作为分时复用作为8条数据线和低8位地址线引脚P2口作为高8位地址线引脚【知识链接】3.单片机最小系统怎样保证CPU工作?这就必须提到单片机的两个非常重要的外围电路:单片机的时钟电路和复位电路。【知识链接】3.单片机最小系统时钟电路如下时钟电路是单片机应用系统中必需的电路。振荡信号fosc:6MHZ、12MHZ、11.0592MHZ【知识链接】3.单片机最小系统晶振起振电路贴片电容时钟电路【知识链接】3.单片机最小系统有序的世界-单片机时序:单片机中的各种操作在时间上要有一个严格的先后次序,这种次序就是单片机时序。例如:【知识链接】3.单片机最小系统【知识链接】3.单片机最小系统【知识链接】3.单片机最小系统复位电路【知识链接】3.单片机最小系统复位电路【知识链接】3.单片机最小系统复位电路复位电路【知识链接】3.单片机最小系统1.让单片机恢复到确定的初始状态2.让单片机从初始状态开始工作复位电路如何编程实现发光二极管闪烁呢?
程序设计1重点、难点控制程序开始点亮一个LED灯延时熄灭一个LED灯延时结束delay函数循环次数ii--空语句函数返回YN+-
Keil软件操作步骤1.新建工程文件Project-newproject2.新建源文件File-New3.输入程序4.保存源文件File-Saveas5.添加源文件6.工程编译7.生成.hex文件
控制程序#include<reg51.h> voiddelay(unsignedintc);voidmain(){ while(1) {
P1=0x00;
delay(100);
P1=0x01;
delay(100);
}}voiddelay(unsignedintc){ unsignedchara,b; for(;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--);}程序1:控制程序#include<reg51.h> voiddelay(unsignedintc);sbitled=P1^0;voidmain(){ while(1) {
led=0;
delay(100);
led=1;
delay(100);
}}voiddelay(unsignedintc){ unsignedchara,b; for(;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--);}程序2:
调试运行1.看故障现象2.析故障原因3.查硬件故障4.查软件故障5.验功能效果故障排查步骤严谨规范精益求精进阶任务:多信号灯闪烁控制【任务要求】要求单片机P1口控制8个发光二极管LED闪烁。控制程序#include<reg51.h> voiddelay(unsignedintc);voidmain(){ while(1) {
P1=0x00;
delay(100);
P1=0xff;
delay(100);
}}voiddelay(unsignedintc){ unsignedchara,b; for(;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--);}每天学习一点点,变成更好的自己单片机技术与应用任务2指定效果指示灯设计与制作单片机技术与应用智能车间指示系统设计与制作任务2指定效果指示灯设计与制作【基础任务要求】模拟合作企业智能车间指示灯控制,利用单片机控制发光二极管从两边往中间依次点亮。任务2指定效果指示灯设计与制作任务实现四步骤绘制硬件电路图搭接硬件电路硬件设计调试硬件电路调试控制程序功能调试与实现绘制程序流程图指定效果指示灯编程方法程序设计01020304重点、难点难点绘制系统框图元器件选型分配资源方案设计对接单片机应用系统开发流程任务2指定效果指示灯设计与制作STC89C52单片机时钟电路复位电路电源电路发光二极管电路系统框图硬件设计-绘电路
请问如何连接单片机与8个发光二极管?硬件设计-绘电路电路绘制规范:用统一规定的元件符号尽量避免导线的交叉导线要求横平竖直设置元器件参数元件放在编辑区内细致规范严谨小锦囊任务名:指定效果指示灯设计与制作元件名称图片型号数量Proteus中的名称单片机芯片STC89C521用AT89C51代替晶振12MHZ1CRYSTAL电容22pF2CAP电解电容22μf/16V1CAP-ELEC电阻1KΩ1RES电阻50Ω8RES发光二极管8LED-RED
如何编程实现发光二极管从两边往中间依次点亮?
程序设计1重点、难点控制程序01111110101111011101101111100111P3.0P3.1P3.2P3.3P3.4P3.5P3.6P3.7控制程序指定效果流水灯程序程序代码编写规范:字母大小写一致代码必须在英文状态下输入不要遗漏分号,括号成对出现;变量名的命名规范;运算符规范;细致严谨规范【知识链接】1.数据类型什么是数据类型?身高:175体重:61显示数据:0xfe,0xfd,0xfb…0x7fπ=3.1415926半径:r=2.5海拔:-100
室外温度:-10.5底下车库:-3延时参数:20000姓名性别出生日期工作单位职务住址身高体重血型张三11993-05-01学校学生宿舍21.87135.5B整型浮点型位类型1表示男,0表示女字符型字符型字符型可变不变不变不变可变可变可变可变可变思考:KeilC51编译器所支持的数据类型【知识链接】1.数据类型#include<reg51.h>#defineLEDP3#defineTIME30000voiddelay(unsignedinti){while(i--);}voidmain(){
unsignedchari;while(1){i=0;LED=~((0x01<<i)|(0x80>>i));delay(TIME);i++;LED=~((0x01<<i)|(0x80>>i));delay(TIME);i++;LED=~((0x01<<i)|(0x80>>i));delay(TIME);i++;LED=~((0x01<<i)|(0x80>>i));delay(TIME);}}(1)位类型bit
它的值是一个二进制位,只有0或1。利用它可定义一个位类型变量,但不能定义位指针,也不能定义位数组。例如:bitm;【知识链接】1.数据类型(2)特殊功能寄存器sfr
MCS-51系列单片机内部定义了21个特殊功能寄存器,它们不连续地分布在片内RAM的高128字节中,地址为80H~FFH。
sfr也是单片机C语言扩展的一种数据类型,占用1B,值域为0~255。
利用它可以访问单片机内部的所有8位特殊功能寄存器。用sfr定义特殊功能寄存器地址的格式为:sfr特殊功能寄存器名=特殊功能寄存器地址;特殊功能寄存器在reg51.h这个头文件里面都帮我们定义好了,所以平时我们就不要自己去定义寄存器的名字。【知识链接】1.数据类型(3)可寻址位sbitsbit类型也是单片机C语言的一种扩充数据类型,利用它可以访问芯片内部RAM中的可寻址位或特殊功能寄存器中的可寻址位。
sbit定义的格式如下:
sbit位名称=位地址;在给某个引脚取名的时候经常会用到。例如:sbitled=P1^0;//led表示P1中的P1.0引脚【知识链接】1.数据类型voiddelay(unsignedchari){unsignedcharj,k;for(k=0;k<i;k++)for(j=0;j<255;j++);}#include<reg51.h>sbitled=P1^0;voiddelay(unsignedchari);voidmain(){while(1){led=0;delay(10);led=1;delay(10);}}【知识链接】2.变量姓名性别出生日期工作单位职务住址身高体重血型可变不变不变不变可变可变可变可变可变性别出生日期血型不变姓名工作单位职务住址身高体重可变常量变量变量是在程序运行过程中,其值可以被改变的量。30.8℃变量相当于一个存放数据的容器【知识链接】2.变量#include<stdio.h>intmain(){
inta,b,c; a=10; b=20; c=a+b; printf("%d",c);return0;}程序例中的a、b、c都是变量。什么是变量呢?
a
10b
20c
30变量——盒子,可保存数据盒子的名字——变量名a、b、c盒子里的内容——变量的值10、20、30同一个盒子可先后存放不同的东西,变量的值也可在程序运行过程中发生变化,故称变量。变量实际是内存中的一块存储区域,存储区域的名称就是变量名,所存储的内容就是变量的值。【知识链接】2.变量变量的类型变量名变量的值变量类型不同名字不同内容不同a 合法$sum 非法Student_name 合法_temperature 合法int 非法2names 非法测一测合法非法合法合法非法非法①有效字符:只能由大写字母、小写字母、数字和下划线组成,且以字母或下划线开头。②C语言的关键字不能用作标识符名。变量命名遵循标识符命名规则标识符名很简单,字母数字下划线。字母区分大小写,非数打头非关键。口诀【知识链接】2.变量③标识符命名的软件工程要求──见名知意
所谓“见名知义”是指,通过标识符名就知道标识符所代表的含义。方法:英文单词(或缩写),或汉语拼音字头。例如,name/xm(姓名)、sex/xb(性别)、age/nl(年龄)、salary/gz(工资)。变量命名遵循标识符命名规则尽量做到
见名知意细致规范严谨小锦囊【知识链接】2.变量#include<reg51.h>#defineLEDP3#defineTIME30000voiddelay(unsignedinti){while(i--);}voidmain(){
unsignedchari;while(1){
i=0;LED=~((0x01<<i)|(0x80>>i));delay(TIME);i++;LED=~((0x01<<i)|(0x80>>i));delay(TIME);i++;LED=~((0x01<<i)|(0x80>>i));delay(TIME);i++;LED=~((0x01<<i)|(0x80>>i));delay(TIME);}}unsignedinti,count=1000;//定义整型变量charled=0x7f;
//定义字符型变量bitflag=0;//定义位变量变量必须先定义、后使用。变量定义格式:[存储类型]数据类型变量名[,变量名2…];【知识链接】2.变量
内部变量(局部变量):在函数内部定义的变量。
作用域仅限于函数内。
不同函数的内部变量是可以重名的。#include<reg51.h>#defineLEDP1#defineTIME30000voiddelay(unsignedinti){while(i--);}voidmain(){
unsignedchari;while(1){
i=0;LED=~((0x01<<i)|(0x80>>i));delay(TIME);i++;LED=~((0x01<<i)|(0x80>>i));delay(TIME);i++;LED=~((0x01<<i)|(0x80>>i));delay(TIME);i++;LED=~((0x01<<i)|(0x80>>i));delay(TIME);}}进行变量定义时,应注意以下几点:1.允许在一个数据类型标识符后,说明多个相同类型的变量,各变量名之间用逗号隔开;2.数据类型标识符与变量名之间至少用一个空格隔开;3.最后一个变量名必须以分号“;”结尾;4.变量定义必须放在变量使用之前,一般放在函数体的开头部分;5.在同一个程序中变量不允许重复定义为不同类型。例如:unsignedintx,y,z;inta,b,x;【知识链接】2.变量变量的初始化在定义变量的同时可以给变量赋初值,称为变量的初始化。变量初始化格式:数据类型变量名[=初值][,变量名2[=初值2]……];
例如:inti=4,j,s=5;
floatx=0,y=0,z=0;charch='a';longinta=1000,b;【知识链接】2.变量姓名性别出生日期工作单位职务住址身高体重血型张三11993-05-01学校学生宿舍21.87135.5B整型浮点型位类型1表示男,0表示女字符型字符型字符型可变不变不变不变可变可变可变可变可变【知识链接】3.常量姓名性别出生日期工作单位职务住址身高体重血型可变不变不变不变不变可变可变可变可变性别出生日期血型不变姓名工作单位职务住址身高体重可变常量变量【知识链接】3.常量常量是指在程序运行过程中,其值不能被改变的量。常量整型常量实型常量字符型常量字符串常量【知识链接】3.常量数据格式示例十进制88、-192十六进制0x58、-0xc0长整型88L、0x58L、o130L整型常量举例【知识链接】3.常量#include<reg51.h> voiddelay(unsignedintc);voidmain(){ while(1) { P1=0x00;
delay(100);
P1=0x01;
delay(100);
}}浮点常量举例数据格式示例小数0.888、345.3指数8.88e-1、3.453e2数据格式示例英文单引号:’’‘A’、’9’ASCII码65、57字符常量举例【知识链接】3.常量字符串型常量是用双引号括起来的若干字符。如”test”、”OK”、””等。【知识链接】3.常量位类型常量sbitLED=P1^0;LED=0;LED=1;【知识链接】3.常量运算符是完成某种特定运算的符号【知识链接】4.运算符位运算-在二进制位的级别上进行的一系列运算。C语言提供了六种位运算符,&(按位与)、|(按位或)、^(按位异或)、~(按位取反)、>>(右移)和<<(左移)。位运算的一般形式为:变量1位运算符变量2位运算符也有优先级,从高到低依次是:~→<<→>>→&→^→|。(1)位运算符
1)左移运算符(<<)左移运算符用来将参与运算的一个数的各位全部向左移(高位方向)若干位,每移动1位,最高位丢弃,最低位补0。
其表达式的一般形式为:变量<<移动的位数00000001例如:w=0x01;
w<<=1;00000010(1)位运算符2)右移运算符(>>)右移运算符用来将参与运算的一个数的各位全部向右移(低位方向)若干位,每移动1位,最高位补0,最低位丢弃。其表达式的一般形式为:变量>>移动的位数例如:w=0x80;
w>>=1;1000000001000000(1)位运算符控制程序指定效果流水灯程序3)”按位与”运算符(&)按位与运算法则:有0出0,全1出1例如:0000000110000000位与&00000000(1)位运算符4)”按位或”运算符(|)参加运算的2个数据,按二进制的表达方式按位进行逻辑“或”的运算。运算法则:有1出1,全0出0。例如:0000000110000000位或|10000001(1)位运算符例如:0000001001000000位或|0100001001111110101111011101101111100111P3.0P3.1P3.2P3.3P3.4P3.5P3.6P3.7#include<reg51.h>#defineLEDP3#defineTIME30000voiddelay(unsignedinti){while(i--);}voidmain(){unsignedchari;while(1){i=0;LED=~((0x01<<i)|(0x80>>i));delay(TIME);i++;LED=~((0x01<<i)|(0x80>>i));delay(TIME);i++;LED=~((0x01<<i)|(0x80>>i));delay(TIME);i++;LED=~((0x01<<i)|(0x80>>i));delay(TIME);}}5)”异或”运算符(^)参加运算的2个数据,按二进制的表达方式按位进行逻辑“异或”的运算。运算法则:相同为0,不同为1。例如:0000000110000000位异或^10000001(1)位运算符6)”取反”运算符(~)参加运算的2个数据,按二进制的表达方式按位进行逻辑“非”的运算。例如:10000001位取反~01111110(1)位运算符#include<reg51.h>#defineLEDP3#defineTIME30000voiddelay(unsignedinti){while(i--);}voidmain(){unsignedchari;while(1){i=0;LED=~((0x01<<i)|(0x80>>i));delay(TIME);i++;LED=~((0x01<<i)|(0x80>>i));delay(TIME);i++;LED=~((0x01<<i)|(0x80>>i));delay(TIME);i++;LED=~((0x01<<i)|(0x80>>i));delay(TIME);}}(2)算术运算符
常见的算术运算符包括+、-、*、/、%和++、--。练一练:将两位十进制整数的十位数和个位数分离。#include<stdio.h>intmain(){inta=23,b,c;b=a/10;c=a%10;printf(“a=%d”,a);printf(“十位=%d\n”,b);printf(“个位=%d\n”,c);return0;}除法运算、取余运算有什么用处呢?我们来看一个应用,如果我们需要把一个整数在数码管或者液晶上显示出来的话,那就需要把一个整数的每位拆分开来,一位一位进行显示,例如,要显示25这个数,我们就需要把25这个数的十位和个位拆分开来,分别是2和5,那用什么运算能实现这个结果呢?252525/10=225%10=5378137813781/1000=33781/100%10=73781%100/10=83781%10=1(2)算术运算符有关算术运算符需要说明以下几点:1)除法运算符/,C语言规定:两个整数相除,其商为整数,小数部分被舍弃。如果运算量中有一个是实型,则结果为双精度实型。例如,5/2=2,22.0/4=5.5。2)求余运算符%,要求两个操作数均为整型,结果为两数相除所得的余数。
注:取余运算的两个操作数必须是整数。
例如:8%5=3,25%10=5。(2)算术运算符表达式和算术表达式
表达式是用运算符和括号,将运算对象(常量、变量和函数等)连接起来的、符合C语言语法规则的式子。例如:(x+y)/2–1。
算术表达式是表达式中的运算符都是算术运算符。
例如,3+6*9。(2)算术运算符求表达式的值1)运算符的优先级。在表达式求值时,按运算符的优先级从高到低依次执行。
例如,先乘除后加减:a–b*c。2)如果某个操作数两侧运算符的优先级相同,则按结合性进行:第一是左结合性(先左后右的结合方向)运算符:操作数先与左边的运算符结合。
例如,1-2+3:先执行“1-2”,再“+3”。
第二是右结合性(先右后左的结合方向)运算符:操作数先与右边的运算符结合。
例如,a=b=1:先执行“b=1”,再执行“a=(b=1)”。练一练:自增、自减运算符的应用。例如:inti=100,j;j=++i;j=i++;j=--i;j=i--;//j=101,i=101//j=101,i=102//j=101,i=101//j=101,i=100建议尽量避免++、--和其它运算用在一起,以防出错;单独使用的++i和i++,结果都是把i的值增1。自增自减运算符和表达式①自增(++)、自减(--)的作用
自增(++)使单个变量的值增1(++)
自减(--)使单个变量的值减1(--)②用法及运算规则
前置运算──++变量、--变量
运算规则:先增减、后运算,即先使变量的值增(减)1,然后再以变化后的值参与其它运算。(2)算术运算符后置运算──变量++、变量--运算规则:先运算、后增减,即变量先参与其它运算,然后再使变量的值增(减)1。
自增自减运算符和表达式(2)算术运算符#include<reg51.h>#defineLEDP1#defineTIME30000voiddelay(unsignedinti){while(i--);}voidmain(){
unsignedchari;while(1){i=0;LED=~((0x01<<i)|(0x80>>i));delay(TIME);i++;LED=~((0x01<<i)|(0x80>>i));delay(TIME);
i++;LED=~((0x01<<i)|(0x80>>i));delay(TIME);i++;LED=~((0x01<<i)|(0x80>>i));delay(TIME);}}练一练:分析下面各赋值表达式中变量a的值。a=b=c=3;a=5+(c=7)a=(b=2)+(c=5)a=(b=6)/(c=2)(3)赋值运算符1).赋值运算符
赋值运算符用赋值符号(=)表示,它的作用就是将一个数据赋给一个变量。例如:“t=10;”2).赋值表达式
赋值表达式用于计算右边表达式的值,把右边表达式的值赋给左边的变量。其格式如下:变量(寄存器名或位名称)=表达式(3)赋值运算符练一练:a+=3a-=3a*=3a/=3a%=3a*=b+2
a=a+3a=a-3a=a*3a=a/3a=a%3a=a*(b+2)a=4,b=2(3)赋值运算符3).复合赋值运算
复合赋值运算符就是在赋值符”=”之前加上其他运算符。与算术有关的复合赋值运算符有:+=、-=、*=、/=、%=(注意:两个符号之间不能有空格)
复合运算的一般格式为
变量复合赋值运算符表达式(3)赋值运算符#define<宏名>
<字符串>例如:#definePI3.1415926
#defineuintunsignedint
#defineucharunsignedchar#defineLEDP1宏定义一般是放在程序的预编译部分,其作用域就是从宏定义命令起到源程序结束,如果中间要终止其作用域,可以使用#undef命令。宏定义只是纯粹的替换和展开。宏定义不是说明或语句,所以在行末不用加分号,如果加上了分号,替换时连分号也一起替换。宏定义#include<reg51.h>#defineucharunsignedchar#defineLEDP1#defineTIME30000voiddelay(unsignedinti){while(i--);}voidmain(){
uchari;while(1){i=0;LED=~((0x01<<i)|(0x80>>i));delay(TIME);i++;LED=~((0x01<<i)|(0x80>>i));delay(TIME);i++;LED=~((0x01<<i)|(0x80>>i));delay(TIME);i++;LED=~((0x01<<i)|(0x80>>i));delay(TIME);}}
调试运行1.看故障现象2.析故障原因3.查硬件故障4.查软件故障5.验功能效果故障排查步骤严谨规范精益求精进阶任务:指定效果指示灯设计与制作【任务要求】单片机控制发光二极管从两边往中间依次点亮、从中间往两边依次点亮。
每天学习一点点,变成更好的自己单片机技术与应用任务3
AGV搬运车指示灯设计与制作单片机技术与应用智能车间指示系统设计与制作任务3
AGV搬运车指示灯设计与制作
【基础任务要求】采用两个发光二极管来AGV搬运车左转灯和右转灯,用单片机的P1.0和P1.1引脚控制发光二极管的亮、灭状态;用两个连接到单片机P3.0和P3.1引脚的拨动开关S0、S1,模拟发出左转、右转命令。任务3
AGV搬运车指示灯设计与制作任务实现四步骤绘制硬件电路图搭接硬件电路硬件设计调试硬件电路调试控制程序功能调试与实现绘制程序流程图按键控制指示灯编程方法程序设计01020304重点、难点难点绘制系统框图元器件选型分配资源方案设计对接单片机应用系统开发流程STC89C52单片机时钟电路复位电路电源电路发光二极管电路系统框图任务3
AGV搬运车指示灯设计与制作按键电路任务名:AGV搬运车指示灯设计与制作元件名称图片型号数量Proteus中的名称单片机芯片AT89C511用AT89C51代替STC89C52晶振12MHZ1CRYSTAL电容22pF2CAP电解电容22μf/16V1CAP-ELEC电阻1KΩ1RES电阻50Ω2RES发光二极管2LED-RED拨动开关2SW-SPDT按键1BUTTON元器件选型硬件电路图任务3
AGV搬运车指示灯设计与制作硬件设计-绘电路细致规范严谨小锦囊电路绘制规范:用统一规定的元件符号尽量避免导线的交叉导线要求横平竖直设置元器件参数元件放在编辑区内软件设计
1.如何编程实现发光二极管的亮灭?1
2.如何编程实现判断拨动开关的状态?2重点、难点控制程序设计控制左转向灯按键P3.0左转向灯P1.0控制右转向灯按键P3.1右转向灯P1.1闭合
0亮0闭合0
亮0断开1灭1断开1灭1开始右转按键是否按下?点亮左转向灯左转按键是否按下?点亮右转向灯延时熄灭左、右转向灯延时结束NY程序流程图YN知识链接-选择结构选择程序单分支if双分支if-else多分支重点、难点一、选择结构程序选择结构程序-对给定条件进行判断,并根据判断结果选择应执行的操作的程序。选择程序单分支双分支多分支1、单分支语句-if语句if(表达式){语句组;}后续语句;一、选择结构程序1、单分支语句-if语句表达式的值什么时候为真,什么时候为假呢?只有表达式的值为0,表示假;非0,表示真。if(表达式){语句组;}后续语句;一、选择结构程序开始右转按键是否按下?点亮左转向灯左转按键是否按下?点亮右转向灯延时熄灭左、右转向灯延时结束NY程序流程图YN关系运算(比较运算)是将两个数据进行比较,判定是否符合给定的关系。关系运算符是比较两个数据量的运算符。2.关系运算符
关系表达式是用关系运算符将两个表达式连接起来的式子。
关系表达式的一般形式为:表达式关系运算符表达式
关系表达式的值只有两种可能,即真和假。如果运算的结果是真,用”1”表示;如果运算的结果是假,则用”0”表示。假定a=5;b=3;a>b的结果是什么呢?a==b假0a!=b真1真1实例关系运算符的优先级a==b>ca==(b>c)>,<,>=,<=优先于==,!=#include<reg51.h>sbitleft_led=P1^0;sbitright_led=P1^1;sbitleft_sw=P3^0;sbitright_sw=P3^1;voiddelay(unsignedchari);voidmain(){
while(1){if(left_sw==0){left_led=0;}if(right_sw==0){right_led=0;}delay(200);left_led=1;right_led=1;delay(200);}}voiddelay(unsignedchari){unsignedcharj,k;for(k=0;k<i;k++)for(j=0;j<255;j++);}控制程序设计程序代码编写规范:字母大小写一致标点符号必须在英文状态下输入
变量命名规则勤勉创新坚持2、双分支语句-if-else语句一、选择结构程序2.双分支语句-if-else语句一、选择结构程序#include<reg51.h>sbitleft_led=P1^0;sbitright_led=P1^1;sbitleft_sw=P3^0;sbitright_sw=P3^1;voiddelay(unsignedchari);voidmain(){
while(1){if(left_sw==0){left_led=0;}else{left_led=1;}delay(200);left_led=1;right_led=1;delay(200);}}voiddelay(unsignedchari){unsignedcharj,k;for(k=0;k<i;k++)for(j=0;j<255;j++);}控制程序设计if(right_sw==0){right_led=0;}else{right_led=1;}3、多分支语句-ifelseif语句一、选择结构程序3、多分支语句-ifelseif语句一、选择结构程序#include<reg51.h>sbitleft_led=P1^0;sbitright_led=P1^1;sbitleft_sw=P3^0;sbitright_sw=P3^1;voiddelay(unsignedchari);voidmain(){while(1){
if(left_sw==0&&right_sw==0){left_led=0;right_led=0;delay(200);
left_led=1;right_led=1;delay(200);
}elseif(left_sw==0){left_led=0;delay(200);left_led=1;delay(200);}elseif(right_sw==0){right_led=0;delay(200);
right_led=1;delay(200);}voiddelay(unsignedchari){unsignedcharj,k;for(k=0;k<i;k++)for(j=0;j<255;j++);}else{;}}}if语句的嵌套匹配原则
(1)if语句的嵌套在“语句组1”或(和)“语句组2”中,又包含有if语句的情况。(2)else子句与if的匹配原则:与在它上面、距它最近、且尚未匹配的if配对。一、选择结构程序4、多分支语句-switch语句switch(变量)//变量只能是整型或字符型。{case
变量可能值1:分支1语句;break;case
变量可能值2:分支2语句;break;……case
变量可能值n:分支n语句;break;default:最后分支语句;
//default也可以省略。}#include<reg51.h>sbitleft_led=P1^0;sbitright_led=P1^1;sbitleft_sw=P3^0;sbitright_sw=P3^1;voiddelay(unsignedchari);voidmain(){unsignedcharsw;P3=0xff;while(1){sw=P3;switch(sw){case0xfc:left_led=0;right_led=0;break;
case0xfe:left_led=0;break;case0xfd:right_led=0;break;default:;}delay(200);left_led=1;right_led=1;delay(200);}}voiddelay(unsignedchari){unsignedcharj,k;for(k=0;k<i;k++)for(j=0;j<255;j++);}注:(1)switch后面的“表达式”的类型:int、char和枚举型中的一种。(2)每个case后面“常量表达式”的值,必须各不相同,否则会出现相互矛盾的现象。(3)各case及default子句次序,不影响执行结果。(4)多个case子句,可共用同一语句(组)。(1)if后面的“表达式”:除关系(逻辑)表达式外,也允许是整型、实型、字符型等其它类型的数据。(2)在语句组1和语句组2中,每个语句后面的分号不可少!例如:if(num1>num2)max=num1;elsemax=num2;
关系表达式只能描述单一条件。如果需要同时描述多个条件时,就要借助于逻辑表达式。
①逻辑运算符C语言中提供了三种逻辑运算符:逻辑与(&&)、逻辑或(||)和逻辑非(!)。逻辑表达式的一般形式为
逻辑与:表达式1&&表达式2逻辑或:表达式1||表达式2
逻辑非:!条件式5.逻辑运算符②逻辑表达式真真真逻辑与:&&表达式1&&表达式2&&=真&&=假假真&&=假假&&=假假假逻辑或:||表达式1||表达式2真真真||=真||=假真=假=假假假||||真真逻辑非:!!表达式真!=假!=假真逻辑与:&&逻辑或:
||逻辑非:!表达式1&&
表达式2表达式1||表达式2!表达式16<=age<18age>=6age<18&&5.逻辑运算符逻辑与:&&逻辑或:
||逻辑非:!表达式1&&表达式2表达式1||表达式2!表达式1例如:假定有两个开关K1和K2,开关闭合时连接的I/O引脚为低电平,否则为高电平,请问判断K1和K2同时闭合的表达式应该怎么写?K1==0&&K2==0能正确表示逻辑关系:“a≥10或a≤0”的C语言表达式a>=10||a<=05.逻辑运算符逻辑与:&&逻辑或:
||逻辑非:!表达式1&&表达式2表达式1
||表达式2!表达式1!优先级别最高,其次是&&,最低是||!>算术运算符>关系运算符>&&>||5.逻辑运算符
调试运行1.看故障现象2.析故障原因3.查硬件故障4.查软件故障5.验功能效果故障排查步骤严谨规范精益求精进阶任务-键控多种花样LED灯显示设计要求:通过4个按键控制8个LED灯在4种显示模式之间切换。4种显示模式如下。第1种显示模式:全亮。第2种显示模式:交叉亮灭。第3种显示模式:高四位亮,低四位灭。第4种显示模式:低四位亮,高四位灭。知识点独立按键编程原理软件去抖编程思路:在检测到有键按下时,先执行10ms左右的延时程序,然后再重新检测该键是否仍然按下,以确认该键按下不是因为抖动引起的。同理,在检测到该键释放时,也采用先延时再判断的方法消除抖动的影响。软件去抖程序段如下:if(s1==0)//第一次检测到按键s1按下{
delay(1200);//延时10ms左右去抖if(s1==0)//再次检测到s1按下{
…//按键功能实现
while(!s1);//有键释放,跳出while循环
delay(1200);//延时10ms左右去抖while(!s1);//再次判断是否有键释放}}voiddelay(unsignedinti)//延时函数{
unsignedintk;for(k=0;k<i;k++);}#include<reg51.h>voiddelay10ms(unsignedintc);voidmain(){ unsignedcharkeyvalue; while(1) { P0=0xff;
if(P0!=0xff)
{ delay10ms(1); //按键消抖
if(P0!=0xff)
{ keyvalue=P0;
while(P0!=0xff);//等待按键释放 delay10ms(1);
while(P0!=0xff); } }
switch(keyvalue) { case0xfe:P1=0x00;break; case0xfd:P1=0x55;break; case0xfb:P1=0x0f;break; case0xf7:P1=0xf0;break;
} }}voiddelay10ms(unsignedintc){ unsignedinta,b; for(;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--);}每天学习一点点,变成更好的自己单片机技术与应用任务4流水指示灯设计与制作单片机技术与应用智能车间指示系统设计与制作任务4流水指示灯设计与制作【基础任务要求】利用数组实现8个LED发光二极管从右至左依次点亮、8个LED全亮、8个LED全灭的效果。任务4流水指示灯设计与制作任务实现四步骤绘制控制电路图搭接硬件电路硬件设计调试控制电路调试控制程序软硬件调试仿真运行在单片机开发板上运行仿真运行绘制流程图用数组和循环语句编程实现流水灯控制软件设计01020304重点、难点难点STC89C52单片机时钟电路复位电路电源电路发光二极管电路系统框图任务4流水指示灯设计与制作任务名:流水指示灯设计与制作元件名称图片型号数量Proteus中的名称单片机芯片AT89C511AT89C51晶振12MHZ1CRYSTAL电容22pF2CAP电解电容22μf/16V1CAP-ELEC电阻1KΩ1RES电阻50Ω8RES发光二极管8LED-RED元器件选型硬件电路图任务4流水指示灯设计与制作硬件设计-绘电路细致规范严谨小锦囊电路绘制规范:用统一规定的元件符号尽量避免导线的交叉导线要求横平竖直设置元器件参数元件放在编辑区内软件设计如何用数组编程实现8个发光二极管从右至左点依次点亮、全亮、全灭效果?1重点、难点控制程序设计10P3.0000000P3.1P3.2P3.3P3.4P3.5P3.6P3.70100000000100000000100000000100000000100000000100000000111111111000000000x010x020x040x080x100x200x400x800xff0x00一、数组定义数组:是数目固定、数据类型相同的若干个变量的有序集合。unsignedcharled[10]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,0x00};数据类型数组名数组长度数组元素知识链接数组必须先定义、后使用。数据类型数组名[常量表达式][,数组名2[常量表达式2]……];
(1)”数据类型”是指数组元素的数据类型。(2)数组名,必须遵循标识符命名规则;存放的是一个地址常量,它代表整个数组的首地址。(3)“常量表达式”可以是常数和符号常量、不能包含变量,其值指数组元素个数(又称数组长度)。例如:unsignedcharled[8];intscores[16];#definestudent16unsignedintk;unsignedcharled[k];intscores[student];Χ√#include<reg51.h>unsignedcharled[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,0x00};voiddelay(unsignedintk);//函数声明voidmain(){unsignedchari;
while(1)
{for(i=0;i<10;i++){P3=led[i];delay(1000);}
}}voiddelay(unsignedintk)//函数定义{unsignedinti,j;for(i=0;i<100;i++)for(j=0;j<k;j++);}二、数组初始化给数组中的元素赋值,叫做数组初始化。数组初始化数组定义时初始化赋值语句初始化unsignedcharled[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,0x00};定义数组初始化unsignedcharled[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,0x00};led[0]led[1]led[2]led[3]led[4]led[5]led[6]led[7]led[8]led[9]数据类型数组名[常量表达式]={初值表};unsignedcharled[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,0x00};unsignedcharled[10];led[0]=0x01;led[1]=0x02;led[2]=0x04;led[3]=0x08;led[4]=0x10;led[5]=0x20;led[6]=0x40;led[7]=0x80;led[8]=0xff;led[9]=0x00;允许只给部分元素赋初值。例如:intscore[5]={75,80,85,90};
intscore[5];score[0]=75;score[1]=80;score[2]=85;score[3]=90;score[4]=0;三、一维数组元素的引用0x010x020x040x080x100x200x400x800xff0x0000000001000000100000010000001000000100000010000001000000100000001111111100000000unsignedcharled[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,0x00};每一个数组元素都用数组名和唯一的下标来表示。
数组名[下标]数组元素下标从0开始到(元素个数-1)使用循环程序处理数组0x010x020x040x080x100x200x400x800xff0x00led[0]led[1]led[2]led[3]led[4]led[5]led[6]led[7]led[8]led[9]存储器ledled+1led+2led+3led+4led+5led+6led+7led+8led+9细致三、一维数组元素的引用unsignedcharled[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,0x00};定义数组数组初始化unsignedcharled[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,0x00};led[0]led[1]led[2]led[3]led[4]led[5]led[6]led[7]led[8]led[9]使用循环程序处理数组三、一维数组元素的引用四、循环结构1、for语句1、for语句for(循环变量赋初值;循环条件;循环变量增值)表达式可以部分或全部缺省,但其间的分号不能省略{循环体;}仅有1条语句,可省略大括号#include<reg51.h>unsignedcharled[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,0x00};voiddelay(unsignedintk);//函数声明voidmain(){unsignedchari;while(1){for(i=0;i<10;i++)
{P3=led[i];delay(1000);
}}}voiddelay(unsignedintk)//延时函数{unsignedinti,j;for(i=0;i<100;i++)for(j=0;j<k;j++);}for语句中的三个表达式都是可选项,可以省略,但必须保留“;”#include<reg51.h>unsignedcharled[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,0x00};voiddelay(unsignedintk);//函数声明voidmain(){unsignedchari;while(1){
i=0;
for(;i<10;i++)
{P3=led[i];delay(1000);
}}}voiddelay(unsignedintk)//延时函数{unsignedinti,j;for(i=0;i<100;i++)for(j=0;j<k;j++);}#include<reg51.h>unsignedcharled[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,0x00};voiddelay(unsignedintk);//函数声明voidmain(){unsignedchari;while(1){
i=0;
for(;i<10;)
{P3=led[i];delay(1000);i++;
}}}voiddelay(unsignedintk)//延时函数{unsignedinti,j;for(i=0;i<100;i++)for(j=0;j<k;j++);}2.while语句while(循环条件){循环体;}while语句-先判断后执行特点:当表达式的值一开始就为假时,循环体一次也不会执行。有言在先#include<reg51.h>unsignedcharled[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,0x00};voiddelay(unsignedintk);//函数声明voidmain(){unsignedchari;while(1){i=0;while(i<10)
{P3=led[i];delay(1000)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 品牌租赁合同范本
- 后补合同范本范文
- 合同范本 两甲方
- 变更房屋合同范本
- 合伙合同范本在
- 吉利汽车订购合同范本
- 加工洗沙合同范本
- 公司司机简易合同范例
- 合同范本购货合
- 卖车合同范本
- 2025年黑龙江职业学院单招职业适应性测试题库附答案
- 《多样的中国民间美术》课件 2024-2025学年人美版(2024)初中美术七年级下册
- 家政讲师培训课件
- 2025年中国春节档市场报告-拓普数据-
- 2025年山西省太原市卫健委直属单位招聘522人历年高频重点模拟试卷提升(共500题附带答案详解)
- 劳务合同协议书书
- 白城2025年吉林大安市事业单位面向上半年应征入伍高校毕业生招聘5人笔试历年参考题库附带答案详解
- 全球人工智能产业发展现状和趋势
- 2025年内蒙古化工职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 民法典解读之婚姻家庭编
- 2025年菏泽医学专科学校高职单招数学历年(2016-2024)频考点试题含答案解析
评论
0/150
提交评论