版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
6.开关语句开关语句也是一种用来实现多条件分支的语句。case
常量表达式n:语句体n;break;default:语句体dcase
常量表达式1:语句体1;break;case常量表达式2:语句体2;break;switch(a)case(O):b=0;break;case(1):b=1;break;
default:b=3;switch
(表达式)(2)break
语句break语句通常用来跳出循环程序块,
一般用在循环
语句和开关语句中
。break语句的一般形式:break;(3)continue语句continue语句用来执行跳过循环体中剩余的语句,而强行执行下一次循环的操作。
continue语句的一般形
式
:continue;(1)goto
语句goto语句是一个无条件的转向语句,其一般形式如下:goto
语句标号;其中,语句标号为一个带冒号的有效标识符。在C51中执行到这个语句时
,程序指
针就会无条件地跳转到goto后的标号所指
向的程序段。7.程序跳转语句主要包括三种跳转语句:goto语句、break
语句和continue语句。8.函数返回语句与空语句return
语句用于终止函数的执行,并控制程序返回到调用该函数的位置。一般形式为:(1)return
(表达式);(2)return;空语句仅用一个分号“;”构成,是C51语言中一个特殊的表达式语句,常用于程序延时,没有任何的执行效果。第二章C51
程序设计基础2.5
C51的指针单片机原理与接口技术C语言指针的一般定义形式为:数据类型
*指针变量名[=&被指向变量名];其中,指针变量指向一个由“数据类型”说明的变量。被指向变量和指针变量都位于C编译器默认的内存区中。如
:
inta='g’;int
*ptr=&a;//ptr是一个指向int型变量的指针变量,此时ptr的值为int型变量a的地址,而a和ptr两个变量都位于C编译器默认的内存区中。C51指针的一般定义形式:数据类型[存储类型1]
*[存储类型2]变量名[=&被指向变量名];数据类型——被指向变量的类型。存储类型1——被指向变量所在的存储区,缺省时由地址赋值关系决定
存储类型2——指针变量所在的存储区,缺省时为编译器默认的存储区char
data
*ptr;//存储器指针ptr指向data区中char型数据//ptr是一个指向char
型变量的指针,它本身位于SMALL
编//译模式默认的data存储区里,此时它指向位于xdata存储//区里的char型变量a
的地址。charxdata
a='g’;char
*ptr=&a;数据类型[存储类型1]*[存储类型2]变量名[=&被指向变量名];
可用存储类型标识符指定一个一般指针的存储区。char*xdata
ptr
;//
指针ptr分别保存在xdata
中
。
也可指定一个存储器指针的保存存储区类型。charxdata*datapt;//存储器指针指向外部RAM中char数据,pt被保存在内部RAM
中charxdata
a=‘g';char
xdata*idata
ptr=&a;//ptr是固定指向xdata存储区的char型变量的指针变量,它自身存放在idata存储区中,此时ptr指向位于xdata
存储区中的char
型变量a的地址。如:用汇编语句进行累加器A循环加1和将累加结果传递给PO的功能。#include<STC15.h>void
main(void){#pragmaasm//嵌入汇编代码MOV
RO,#4ahLOOP:INCA
//累加器循环加1DJNZ
R0,LOOP#pragma
endasmPO=ACC;//输出累加结果厂C51
中嵌入汇编代码程序中需要用到一些简短的汇编指令时,可以通过语句“#pragma”嵌
入汇编代码的办法实现。8
Optionsfor
Group
'Source
Group1'Froperties|cs1Pah:FleType:Sze:last
change:Code
Bank:Sop
on
Eet
Code:Not
specfedSelect
ModulestoAwayshcude:CustomAkgumerts:OK
CancelF
hchude
inTaget
BuidFAways
BudFGenerateAanemblerSRC
Fle
☑
AssembleSRC
Fle厂
Lnk
PubicaOnlyDefaults
HelpL8」x二的#
|
⑤因
画
盖
T
an
g
e
t
1/
/
定
义
变
量嵌
入
汇
编
代
码/
/
累
加
器
循
环
加
1/
/
输
出
累
加
结
果L12048NINhcudePaths
MncCortrol
I
C
lr
PTMZE65PEDBROWSEDEBUGOJECTEXTEND
PRINTCUuatnga'“sM)TABS②5RCCOKCanoelDefanltsHelpcortomp日
相
甲
md
d
ae:Bu114
target
Torget
1'conpiling
embeded.e….ssenblingenbeded,sre.1inking.Program
Size:data-9.0
xdata-0
code-21creating
hefile
fron
“embeded_asm”..embeded_as"-0Error(8)。0W3aE
ce
7×嵌入汇编代码时需要对编译器Keil进行一定设置。cdefa)F
GlobaReciste
CdlorngF
Dont
une
abokte
rogiter
accee4系四#include
<reg51.h>void
main(void)unsigned
char
i=1;
#pragma
asmMOV
RO,#0AHLOOP:INC
ADJNZRO,L0OP#pragma
endasmi=ACC;options
for
Group
'Source
Group!"Properties
C51A51Preprocesor
SymbolaDelne.Bsto
runforfloatcompane:
befa
·
F
Irtemugtveclorsat
addeF
KeepvatablesinorderF
ErableANSIrtegerpromofionndes7erbede
dam
-
播ion
-
IEa
sem
bede
ddDBtdnYewBojectDebupflashPejphenkIohsSes
edowHe律
4也
如
愿012o
日040B067091011hetweB
Target1自
Source
Group1
Dembededc
国CS1S
LBCodeOptinizationUndeine:第二章C51
程序设计基础2.6
C51的函数单片机原理与接口技术1.函数的特点同标准C
一
样,C51
的程序由若干函数组成。●必须有一个主函数main()●
程序的执行从main(函数开始,调用其它函数后返回主函数main(),
最后在主函数中结束整个程序,而不管函数的排列顺序如何。while
(--j);while
(--i);void
main(
void)u8
i;--------局部变量定义P2=(P2&0x1f|Oxa0);//
打开74HC573(1)
锁存器
P0=0x00
;
//关闭轰鸣器、继电器P2&=
0x1f;while(1)for(i=0;i<8;i++)P2
=((P2
&Ox1f)
|0x80);/
///
打开74HC573(2)
锁存器delay100ms();预处理命---------
include
"STC15F2K60S2.h"//
定义STC15单片机头文件
宏定义命----------#define
u8unsignedchar//u8
代替
unsignedchar自定义函数---------
void
delay100ms()
//100ms延时函数局部变量定义---------u8i=180,j=73;do函数体--主函数-函数体--
------P0=
0xfe<<i;
//左移i
位P2&=0x1f;(1)有无返回值角度在C51
中,从有无返回值角度,可将函数划分为无返回值函数和有返回值函数两种。(2)数据传送角度在C51中,从主调函数和被调函数之间数据传送的角度,又可将函数分为无参函数和有参函数两种。(3)函数定义角度在C51中,从函数定义的角度,又可将函数分为主函数、自定义函数和库函数3种。2.函数的分类从以下三个角度对函数进行分类。义的一般形式如下:类型说明符函数名(形参列表)形参类型说明语句return语句3.函数的定义一个完整的函数包括类型说明、参数定义、函数体说明3部分。函数定4.函数的参数函数的参数包括形参和实参两种。在C51中,函数的参数可以采用多种数据类型,例如整型、字符型、浮点型,甚至可以是指针、数组以及多维数组等。5.函数的返回值函数的返回值
只能在函数体中,通过return语句返回给主调函数。6.函数的调用在C51中,函数的调用的一般形式如下:函数名(实参列表)函数名即被调用函数名,实参列表是主调函数传递给被调函数的实参变量。
函数的调用通常有3种形式:●函数语句。示例:FUN1();●函数表达式。示例:z=max(x,y);●函数参数。示例:c=max(b,max(x,y));7.C51的中断函数
void
ISRname(void)
interrupt
n
//n
为中断号局部变量声明可执行语句如:/1外部中断0中断服务函数void
intr_0(void)interrupt0{P2=((P2&0x1f|0x80);LED1=~LED1;P2=P2&0x1f;函数功能_crol_将字符型数据按照二进制循环左移n位。_irol_将整型数据按照二进制循环左移n位。_Irol_将长整型数据按照二进制循环左移n位。
cror
将字符型数据按照二进制循环右移n位。_iror_将整型数据按照二进制循环右移n位。_Iror_将长整型数据按照二进制循环右移n位。
nop
使单片机程序产生延时。_testbit_对字节中的一位进行测试。8.C51编译器提供的内部函数库函数功能CBYTE对51单片机的存储空间进行寻址CODE区。DBYTE对51单片机的存储空间进行寻址IDATA区。PBYTE对51单片机的存储空间进行寻址PDATA区。XBYTE对51单片机的存储空间进行寻址XDATA区。CWORD访问51的CODE区存储器空间。DWORD访问51的IDATA区存储器空间。PWORD访问51的PDATA区存储器空间。XWORD访问51的XDATA区存储器空间。FVAR访问far存储器区域。FARRAY访问far空间的数组类型目标。FCARRAY访问fconstfar空间的数组类型目标。9.C51
编译器提供的绝对地址访问函数库第二章
C51
程序设计基础2.7
IAP15F2K61S2单片机的I/O口程序设计实例单片机原理与接口技术任务1
点亮发光二极管任务要求:点亮8个发光二极管,在上电时关闭继电器、轰鸣器。知识点
:1.发光二极管限流电阻的选择。2.74HC573
、74HC138
、ULN2003
的使用。3.继电器、轰鸣器的工作原理及控制。一、发光二极管(LED)限流电阻的选择LED具有许多优点,它不仅有工作电压低(1.5~3
V)、体积小、寿命长、可靠性高等优点,而且响应速度快(≤100ns)、亮度比较高。一般LED的工作电流选在5~10mA,
不允许超过最大值(通常为50mA)。VCC10pIN3STEPDGNDIN7GND10ULN2003M74HC573MIRU25BY5Y5CJI3P42/WR74HC02U6
VCCGND
11OE
VCC
LED2
Q1Q2D3
Q3
D4Q4D5
Q5
D6
Q6D7
Q7
D8Q8GND2019
只
R风
R32
1k
v=C2310pP00P01P0223418
RR
L2自
R33
Ik17
民LED
R40
1kP03
5D
P04
616LBKK
R41
Ik15
LeD
RR
15R42
1kP05
714R
LED
R43IkP06
813
只R
17
LBD
R44
IkP07
912
18
LED
R45
Ik10LEDvCC
SP1NBUZZBUZZERGNDU25D74HCO2U24Y2Y3Y4Y6G2B74HC138U25A74HC02U25C74HC02LED模块电路图NRELAYDIODEmlm2vccOUT1OUT2OUT3OUT5OUT6OUT7COMP25P27二VCC
GNDY7WRY6WRY4C.GN191817161514二
13二GND
KIQ1
Q2Q3
Q4Q5
Q6Q7
Q8DID3D5
D6D7
D8P02
P03
P04P05
P06Y4WRM74HC573MIRRELAY-SPDTU10
IN1IN5
IN6N
RELAYGNDY7CccWROE2016二、工
作原理分析任务1要求:点亮开发板的8个发光二极管,上电时关闭继电器、轰鸣器。1.74HC138
译码器电路74HC138译码器是一款高速CMOS器件,其引脚兼容低功耗肖特基TTL(LSTTL)系列。可接受3位二进制加权地址输入
(C
、B
、A,C
是高位),U25B74HCO2U25D1274HC02U24Y0Y2Y3Y4Y5G2B74HC138Y5CJ13P42/WRGNDU25A74HCO2U25C74HCO2Y7WRY6WRY5WRY4WRVCCGNDY7CG1、G2A、G2B三个引脚为使能端,
G1G2A
G2B=100时,74HC138
工作,此时,74HC138
提供8个互斥的低电平有效输出
(Y~Y₇)。开发板上74HC138
的
C、B
、A
分别由P2.7
、P2.6
、P2.5。Y5CJ13P42/WRCON3U25B74HCO2U25D1274HC02U24Y0Y¹Y3Y4Y5Y774HC138U25A74HCO2U25C74HCO2Y5WRY4WRY7WRY6WRY7CY6CP27VCCGNDM74HC573M1R锁存器为八路3态输出的非反转透明锁存器,OE引脚为输出使能端,LE
引脚为锁存使能端。当LE
为高电平时,输出同步,当LE
为低电平时,符合建立时间和保持时间的数据将会被锁存二
、工
作原理分析任务1要求:点亮开发板的8个发光二极管,上电时关闭继电器、轰鸣器。2.74HC573
锁存器电路ysC.10pPO4二
P0510pQ414R40
R41KteSTEPANRELAY
NMOTOR10M74HC573MIROUTIOUT2
OUT3OUT5
OUT6OUT7COM1918171615二13vcVCCQ1
Q2Q3
Q4Q5
Q6Q8DI
D2
D3
D4
D5D6
D7D8IN6IN7GNDM74HCS573MIRULN2003U6输入输出LED0~D7Q0~Q7HXX高阻LLX不变L
OEHLLLHHH电路中,M74HC573M1R(U6)锁存器的锁存使能端Y4C=Y4+WR
。编程采用IO
模式,即将J13
的
2
和
3
连
接
,WR=0
。Y₄是译码器输入P2.7~P2.5
为
100时的有效输出。当=0时,Y4C=1,M74HC573M1R(U6)锁存器工作。
通过P0
口即可控制LED
的亮灭情况。二、工作原理分析任务1要求:点亮开发板的8个发光二极管,上电时关闭继电器、轰鸣器。3.ULN2003
达林顿阵列芯片电路GNDRELAY-SPDTNRELAYDIODESTEPA_RELAYvccU10IN1IN2IN3IN4IN5IN6IN7GNDULN2003GNDPO0P02二P04P05P06P0710U9LED1D2D3D4D5D6D7D8GNDYSCC26
10pGNDOUT1
OUT2OUT3
OUT4OUT5
OUT6OUT7COMVCCQ1
Q2Q3
Q4Q5
Q6Q7
Q81615109191817二16二15M74HC573M1R电路中ULN2003的作用是驱动继电器
(K1)和轰鸣器
(
BUZZER)。ULN2003
是一款高耐压、大电流驱动反向器件,由7个NPN达林顿管组成,单个达林顿管集电极可输出500mA
电流,每个都有内置2.7K
基极电阻,在5V
的工作电压下,它能与TTL
和CMOS
电路直接相连。常用于单片机、PLC等控制电路,能直接驱动继电器、显示屏、步进电机等负载。当Y5C=1,M74HC573M1R(U9)锁存器
工作。蜂鸣器一端接VCC,
只需给另一端
给高电平则不响,即令P06=0。继电器一
端接VCC,
只需给另一端RELAY
给高电平则
不吸合,即令P04=0。
故PO赋值为0。vcRELAY-SPDTNRELAYDIODEGND1P00P02二P04二10INIIN3IN5IN7GNDULN2003YSC.10pGNDSTEPASTEPCNMOTOROED5D7GNDVCCQ2
Q3Q4
Q5Q7
Q8OUT2OUT4
OUT5OUT6
OUT7COM201918二16二144.程序设计流程要点◆分时控制两个锁存器U6、U9,
避免同时工作冲突。◆保留P2.0~P2.4(低5位)数据,不影响外围设备,通过P2&0x1F实现数据保留。◆锁存器选择指令:控制U6:P2
=(P2&Ox1F)|0x80(0x80为U6
选通地址,与保留的低5位数据组合)控制U9:P2=(P2&Ox1F)|0xAO(0xA0为U9
选通地址,与保留的低5位数据组合)程序如下:
#include"STC15F2K60S2.h"//IAP15F2K61S2
单片机对应的头文件void
jf_init()//继电器和轰鸣器初始化函数P2=(P2&0x1f)|0xa0;//Y5C=1,
打开锁存器U9P0=0;P2&=0x1f;//Y5C=0,关闭锁存器U9voidmain()jf_init();//
关闭继电器和轰鸣器P2=(P2&0x1f)|0x80;//Y4C=1,
关闭锁存器U6while(1)请同学们编译并调试程序,观察运行效果。P0=0;//LED
点亮任
务2
LED
流水灯控制任务要求:将开发板上的8个发光二极管间隔400
ms依次循环左移、右移点亮,每次只有一个LED亮。上电关闭继电器、轰鸣器。知识点:1.软件延时函数测试。2.循环移位函数的使用。RegistermaincBegister
Ydlue7define
u16unsigned
int
调趣试式8
kdefine
u8unsigned
char9
vo
id
jf_init()//继电器和轰鸣器初始化函数
10日(11
P2=(P260x1f)10xa0;//Y5C=1,打开锁存器U912
P0=0;13
P25=0x1f;//Y5C=0,打开锁存器U9
14-115
void
delay(u16k)
//0.2ms延时函数
16日17
u16i,j;18
for(i=k;i>0;i--)19
for(j=182:j>0:j--);20L21
void
main()
22日1D
23
jf_init(;
/
/
关闭
继电
器
和
轰
鸣
器24
P2=(P260x1f)10x80;//Y4C=1,打开锁存器U625
while(1)26白
(27
PO=0;
/
/
L
E
D电
点
亮28
delay(1);R20rIr2r3r4r6r7回Sysraur1床一办tstatet8e出
p0a00
运行0x000:00Dm000x000:00Da000:000n00a00Dr07Ox07C:0:00030x00D00007760.000064670x00回Pajec三Registers一、软件延时函数测试CUseryadminDesktop
(单片机程序实例2LED2DSV1i
vproi-Vhslon Build
Time
Elapsed:00:00:01图2.12LED闪烁调试界面Build
Output
".AObjects\1"-0Error(s),0Warning(8)。■
电.\Objects\1"-0Error(s),0Warning(s),
Bui1dTimeElapsed;00:00:01第
遇可如
中☆
自
良
谭律胆振酷
园
③
B000
□
圆
三
·
□··棚·
四·
菌·Registers
4区maineReristerValue
12P0=0;P26=0x1f;//Y5C=0,打开锁存器U9L}voiddelay(u16
k)//0.2ms延时函数日u16i,j;for(i=k;i>0;1--)for(j=182;j>0;j--);Lvoid
main()日
(jf_init();//关闭继电器和轰鸣器P2=(P260x1f)10x80;//Y4C=1,打开锁存器U6while(1)(
PO=0;//LE
D电点
亮
delay(1);PO=
0xff
;7/LED熄灭delay(1);Regsr0r1r2r3r4r5r6r7Sys却ArC
sur1dptrstatese0=00Dx00Ox000=00Ox000x000x000x000x000m07Ox09C:0x0017Ox00Ox0000
32170000601314151617181920212223242526日
2728团
2930313233回Pojet三RegistersBuldOutputP000tgistersVdlaeeg0=000r00Ox00Ox00Ox00000006742□已花费的时间·
□·
·
圈··
困··maine12
P0=0;13
P26=0x
1
f
;
/
/Y
5C
=
0
,
打
开
锁
存
器U
9插入断点1v
id
delay(u16k)
//0.2ms
延时函数1
6日17
u16i,j;for
(i=k;i>0;i--)19
for
(j=
182;j>0;j--);21
void
main()22日
jf_init();
//关闭继电器和轰鸣器24
P2=(P2&0x1f)10x80;//Y4C=1,打开锁存器U625
while
(1)26日
P0=0;
//LED电点亮delay(1
);PO=0xff;//LED熄灭delay(1
);3132oLJcUsersladmin\Desktopv单片机程序实例2LEDA烁L1.uvpro]-pVisionil
Edt
iew
Projec
Flash
Debug
Peripherals
Tools
SVCs
Window
Helpd山可
如
吟2良
良
律课胜
振
团
区
国
@o
回·4ilda
Output.\Obyects\1”-0
Error(5),0Warning(s),a1ldTimeElapsed:00:00:01图2.13
(a)delay(1)语句执行前C:Usersladmin\Desktop\单片机程序实例2
LED内烟1.Avproj-μVisionFleEdtViewProjecFlashDebugPeripheralsTools
svcsWindowHelp图2.13(b)delay(1)语句执行后
路
风legisterr0
r1中日.二、循环移位函数的使用Keil编译系统提供的C51内部函数库有循环移位和延时等操作函数。内部函数的原型声明包含在头文件intrins.h中。本例实现循环左移和循环右移将用到C51库函数的“_crol_(c,b)”和“_cror_
(c,b)”两个函数。可以Keil界面中点击“Help”菜单,选择“uvisionhelp”,调出帮
助对话框,在搜索框输入关键字
“crol”,点回车,即得到搜索结果,选中需要查看的内容。⑧C51DevelopmentToos
□
×隐章
查找
上一步
前进
打印
选项O日录(Q
素
引搜家⑤
收健入关键字进行查找0McrolceldTLbrary
Routineerer_1LibraryRoutinecSEGA51AsemblerStatemertctypehcWORDDdadatDATAA51
Asembler
StatementDATABL51LinkerDirectiveDATEA51AssemblerDirectiveDBA51AssemblerStatementDBITA51AssemblerStatemert
DBYTEDD
A51Asembler
StatementDEBUGA51AssemblerDirectiveDEBUGe51Compiler
Directive
decDEFNEDEFINEA51AssemblerDirective
DEFNEc51CompilerDirectiveDefineddialogDIRDISABLEe51
Compler
Directve_crol_循环左移函数Summary*ineludeunsigneduanignedu58LgmedcLnrina.h>char_erol_
(
char
e,charb);1"charatertorotate
lefeDescription
The_crol_routinerotatesthebitpattermforthecharacterc
leftbits.Thisroutine
is
implemented
as
an
intrinsic
function.
Return
Value
The_crol_routne
retums
the
rotated
value
of
a.See
Also
cror,irolL,iror,IroL,Irorinelude
(In
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 44554.8-2025电子凭证入账要求第8部分:电子非税收入一般缴款书
- 邮政春耕活动策划方案(3篇)
- 引流活动服装方案策划(3篇)
- 冬至系列活动策划方案(3篇)
- 坟墓搬移施工方案(3篇)
- 冰雹天气施工方案(3篇)
- 娱乐场所安全管理与防范指南(标准版)
- 汽车维修与服务质量规范指南
- 2025年城市公共交通设施维护操作手册
- 阅读识字汇报方案
- 高中教学经验交流课件
- 钢管杆组立作业安全培训课件
- 直播间设计装修合同范本
- 建设用地报批服务投标方案
- 非静脉曲张上消化道出血的内镜管理指南解读课件
- 新生儿消化道出血
- 2025年可爱的中国测试题及答案
- 油费补助管理办法
- 新食品零售运营管理办法
- 强制性产品认证实施规则 低压电器 低压元器件(CNCA-C03-02:2024)
- 《实践论》《矛盾论》导读课件
评论
0/150
提交评论