学习情境一显示系统设计与制作_第1页
学习情境一显示系统设计与制作_第2页
学习情境一显示系统设计与制作_第3页
学习情境一显示系统设计与制作_第4页
学习情境一显示系统设计与制作_第5页
已阅读5页,还剩133页未读 继续免费阅读

下载本文档

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

文档简介

学习情境一显示系统设计与制作第一页,共一百三十八页,2022年,8月28日【训练项目1-1】跑马灯的设计与制作一、项目要求在Proteus仿真软件和单片机实训板上实现8位LED的跑马灯效果,跑马方式可以采用“自上到下的循环”、“自下到上的循环”、“两头到中间再中间到两头循环”等等。学生能采用单片机的P0、P1、P2、P3的任意端口控制8位LED,实现单灯闪烁和跑马效果,并能控制它们的速度。第二页,共一百三十八页,2022年,8月28日二、项目实训仪器、设备及实训材料工具、设备和耗材数量工具、设备和耗材数量工具、设备和耗材数量电脑1台51单片机下载线和USB线1根杜邦导线8PKeiluVision41套晶振1只AT89S51/STC60S21片Proteus7.5软件1套单片机实训板1块稳压电源1台三、项目实施过程及其步骤任务1控制一个LED闪烁任务描述:采用单片机的P0.x、P1.x、P2.x、P3.x的任意端口控制一个LED,在Proteus软件和单片机实训板上,实现LED闪烁,并能控制闪烁速度。第三页,共一百三十八页,2022年,8月28日任务2

制作8位LED跑马灯任务描述:采用单片机的P0、P1、P2、P3的任意端口控制8位LED,在Proteus软件和单片机实训板上,制作8位LED的跑马灯,并能控制LED跑马速度。四、思考与分析(1)调试程序时,黄色箭头指向的当前行代码有没有执行?(2)绘制任务1和2的程序运行轨迹,即黄色箭头在程序代码行走的轨迹。(3)改变跑马灯循环闪烁方式,如:自下向上循环、自两头向中间再向两头循环等。第四页,共一百三十八页,2022年,8月28日1.1什么是单片机单片微型计算机(SingleChipMicrocomputer)简称单片机,是指集成在一个芯片上的微型计算机,它的各种功能部件,包括CPU(CentralProcessingUnit)、存储器(memory)、基本输入/输出(Input/Output,简称I/O)接口电路、定时/计数器和中断系统等,都制作在一块集成芯片上,构成一个完整的微型计算机。由于它的结构与指令功能都是按照工业控制要求设计的,故又称为微控制器(Micro-ControllerUnit,简称MCU)。第五页,共一百三十八页,2022年,8月28日

CPU

存储器定时器/计数器

中断系统P0-P3TxDRxD

TINT并行I/O口串行I/O口单片机的基本结构第六页,共一百三十八页,2022年,8月28日单片机种类

◆目前8位单片机仍是单片机的主流机型;◆生产厂商:◆单片机的发展经历了由4位机到8位机,再到16位机的发展过程美国微芯片公司:PIC16C××系列、PIC17C××系列、PIC1400系列,美国英特尔公司的MCS-48和MCS-51系列,美国摩托罗拉公司的MC68HC05系列和MC68HC11系列,美国齐洛格公司的Z8系列,日本电气公司的μPD78××系列,美国莫斯特克公司和仙童公司合作生产的F8(3870)系列等。

第七页,共一百三十八页,2022年,8月28日型号Flash(KB)RAM(B)EEPROM(KB)I/O引脚UART个数定时器个数WDTA/D路/位fmax(MHz)AT20512128--1512----24AT89S514128--3212Yes--33AT89S528256---3213Yes--33AT89S82531225623213Yes--33STC011256--1622Yes--35STC044256--4022Yes--35STC60S260128014034Yes8/1035STC12LE16S2161280454034Yes8/1035Atmel和STC单片机选型比较第八页,共一百三十八页,2022年,8月28日1.28051内核单片机的引脚及内部结构P3口线的第二功能VCCVSSXTAL2

XTAL1RSTP0.0

P0.1

P0.2P0.3P0.4P0.5P0.6P0.7P1.0

P1.1

P1.2P1.3P1.4P1.5P1.6P1.7P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0ALEP3.0

P3.1

P3.2P3.3P3.4P3.5P3.6P3.72、振荡电路:XTAL1、XTAL23、复位引脚:RST4、并行口:P0、P1、P2、P37、ALE:地址锁存控制信号1、电源线:VCC(+5V)、VSS(地)EAPSEN5、EA:访问程序存储控制信号6、PSEN:外部ROM读选通信号RXD/

TXD/

INT0/INT1/

T0/

T1/

WR/

RD/1

2

3

4

5

6

7

8

9

10111213141516171819

2040

39

38

37

36

35

34

33

32

313029282726252424222180318051875189C51第九页,共一百三十八页,2022年,8月28日引脚名称(序号)第二功能第二功能描述P3.0(10)RXD串行数据接收端口P3.1(11)TXD串行数据发送端口P3.2(12)/INT0外部中断0输入端口P3.3(13)/INT1外部中断1输入端口P3.4(14)T0定时/计数器0的输入端口P3.5(15)T1定时/计数器1的输入端口P3.6(16)/WR外部RAM或外部I/O写选通端口P3.7(17)/RD外部RAM或外部I/O读选通端口P3端口的第二功能第十页,共一百三十八页,2022年,8月28日1.2.2单片机的内部结构第十一页,共一百三十八页,2022年,8月28日单片机硬件结构时钟电路CPUROMRAMT0T1中断系统串行接口并行接口P0P1P2P3TXDRXDINT0INT1定时计数器中央处理器CPU:8位,运算和控制功能内部RAM:共256个RAM单元,用户使用前128个单元,用于存放可读写数据,后128个单元被专用寄存器占用。内部ROM:4KB掩膜ROM,用于存放程序、原始数据和表格。定时/计数器:两个16位的定时/计数器,实现定时或计数功能。并行I/O口:4个8位的I/O口P0、P1、P2、P3。串行口:一个全双工串行口。中断控制系统:5个中断源(外中断2个,定时/计数中断2个,串行中断1个)时钟电路:可产生时钟脉冲序列,允许晶振频率6MHZ和12MHZ复位电路第十二页,共一百三十八页,2022年,8月28日8051单片机的基本组成中央处理器CPU:8位,运算和控制功能内部RAM:共256个RAM单元,用户使用前128个单元, 用于存放可读写数据,后128个单元被专用寄存器占用。内部ROM:4KB掩膜ROM,用于存放程序、原始数据和表格。定时/计数器:两个16位的定时/计数器,实现定时或计数功能。并行I/O口:4个8位的I/O口P0、P1、P2、P3。串行口:一个全双工串行口。中断控制系统:5个中断源(外中断2个,定时/计数中断2个,串行中断1个)时钟电路:可产生时钟脉冲序列,允许晶振频率6MHZ和12MHZ第十三页,共一百三十八页,2022年,8月28日振荡电路

(1)时钟产生方式(a)内部方式

(b)外部方式第十四页,共一百三十八页,2022年,8月28日(2)基本时序周期①振荡周期为晶振的振荡频率,则振荡周期为1/6μs。②时钟周期为振荡周期的两倍,则时钟周期为1/3μs。③机器周期为时钟周期的六倍,则机器周期为2μs。④指令周期为完成一条指令所花费的时间。一般汇编语言指令周期1~4个机器周期,对于C语言来说,每条语句来花费多少个指令周期是比较难计算,而且也没有计算的意义,所以一般只要大家记住振荡周期越小(或振荡频率越高),执行C语言语句的时间就越短。另外,对于STC12C5A60S2单片机来说,其是单时钟/机器周期单片机,所以它比AT89S51/52单片机要快8~12倍。第十五页,共一百三十八页,2022年,8月28日单片机复位条件:必须使RST引脚持续2微秒高电平(外部时钟12MHz)复位电路第十六页,共一百三十八页,2022年,8月28日1.38051内核单片机的存储器结构程序存储器内部外部0000H0FFFH(4K)0000HFFFFH(64K)0000H0FFFH(4K)0000H0001H0002H(PC)0000H是程序执行的起始单元,

在这三个单元存放一条

无条件转移指令中断5中断4中断3中断2中断10003H000BH0013H001BH0023H002BH外部中断0定时器0中断外部中断1定时器1中断串行口中断8位...0FFFH0FFEHEA=1EA=0程序存储器资源分布中断入口地址(1)程序存储器第十七页,共一百三十八页,2022年,8月28日在单片机C语言程序设计中,用户无需考虑程序的存放地址,编译程序会在编译过程中按照上述规定,自动安排程序的存放地址。例如:C语言是从main()函数开始执行的,编译程序会在程序存储器的0000H处自动存放一条转移指令,跳转到main()函数存放的地址;中断函数也会按照中断类型号,自动由编译程序安排存放在程序存储器相应的地址中。因此,读者只需了解程序存储器的结构就可以了。第十八页,共一百三十八页,2022年,8月28日0000HFFFFH(64K)内部外部(2)数据存储器数据存储器00HFFH7FH80H(高128B)(低128B)RAM专用

寄存器00H07H08H0FH10H17H18H1FH0区R0R7R0R7R0R7R0R71区2区3区工作寄存器区可位寻址区20H2FH7F78070030H7FH数据缓冲区/堆栈区内部RAM存储器

11第3区18H~1FH

01第1区08H~0FHRS1RS0寄存器区片内RAM地址

00第0区00H~07H10第2区10H~17H工作寄存器区选择位RS0、RS1第十九页,共一百三十八页,2022年,8月28日注意:一个单元地址对应有8个位地址

MSB——MostSignificantBit(最高有效位)

LSB——LeastSignificantBit(最低有效位)单元地址2FH2EH2DH2CH2BH2AH29H28H27H26H25H24H23H22H21H20H7F776F675F574F473F372F271F170F07

MSB

位地址

LSB7E766E665E564E463E362E261E160E067D756D655D554D453D352D251D150D057C746C645C544C443C342C241C140C047B736B635B534B433B332B231B130B037A726A625A524A423A322A221A120A027971696159514941393129211911090178706860585048403830282018100800RAM位寻址区位地址表第二十页,共一百三十八页,2022年,8月28日高128个单元☆离散分布有21个特殊功能寄存器SFR。☆

11个可以进行位寻址。☆特别提示:对SFR只能使用直接寻址方式,书写时可使用寄存器符号,也可用寄存器单元地址。第二十一页,共一百三十八页,2022年,8月28日1.4单片机开发环境(a)ISP下载线(b)仿真器第二十二页,共一百三十八页,2022年,8月28日单片机实训板第二十三页,共一百三十八页,2022年,8月28日实训板特点:

由相对独立的模块组成,读者可以将所有模块进行自由组合,构建不同功能的单片机系统。

不仅提供了实训板硬件电路程序,而且还提供了所有模块的Proteus仿真电路,读者可以通过虚实结合的方式,快速掌握单片机应用技术。

不须使用昂贵的仿真器、编程器就可以开发单片机系统。采用一条USB线就可以把程序下载到STC单片机之中,或者采用一条ISP下载线把程序下载到AT89S51/52单片机之中,既省了购买昂贵的仿真器、编程器,又能方便地开发单片机系统。

该实训板可以兼融多种单片机,如:AT89S51/52、ST12C5A60S2,以及AVR、PIC单片机(需要加转接板)。

采用USB线供电,不需要外接电源。第二十四页,共一百三十八页,2022年,8月28日实训板组成:显示电路模块键盘电路模块传感器电路模块通信电路模块其它电路模块第二十五页,共一百三十八页,2022年,8月28日【训练项目1-2】数码管静态显示系统设计与制作一、项目要求在Proteus仿真软件和单片机实训上,采用单片机的P0、P1、P2、P3的任意端口控制1位共阳极数码管,实现0~F字符循环显示,并能控制循环显示速度。二、项目实训仪器、设备及实训材料工具、设备和耗材数量工具、设备和耗材数量工具、设备和耗材数量电脑1台51单片机下载线和USB线1根杜邦导线8PKeiluVision41套晶振1只AT89S51/STC60S21片Proteus7.5软件1套单片机实训板1块稳压电源1台第二十六页,共一百三十八页,2022年,8月28日三、项目实施过程及其步骤任务1实现0~F任意字符显示任务描述:采用单片机的P3端口控制1位数码管,在Proteus软件和单片机实训板上,使数码管显示0~F任意字符。然后再改用其它端口控制数码管,实现同样功能。第二十七页,共一百三十八页,2022年,8月28日三、项目实施过程及其步骤任务2实现0~F字符循环显示任务描述:在任务1的基础上,实现0~F字符循环显示。然后再改用其它端口控制数码管,实现同样功能。四、思考与分析(1)绘制任务1和2的程序运行轨迹,即黄色箭头在程序代码行走的轨迹。(2)采用共阴极数码管,实现0~F字符循环显示。(3)采用延时函数、数组定义显示代码等方法,减少程序代码。第二十八页,共一百三十八页,2022年,8月28日1.5数码管的结构与原理

在单片机应用系统中,数码管常用来显示系统的工作状态、运算结果等信息,实现人机交互。一般数码管有1位、3位、2位、4位等组合方式。第二十九页,共一百三十八页,2022年,8月28日第三十页,共一百三十八页,2022年,8月28日显示字符共阳极数码管共阴极数码管dpgfedcba字码dpgfedcba字码0110000000XC0001111110X3F1111110010XF9000001100X062101001000XA4010110110X5B3101100000XB0010011110X4F4100110010X99011001100X665100100100X92011011010X6D6100000100X82011111010X7D7111110000XF8000001110X078100000000X80011111110X7F9100100000X90011011110X6FA100010000X88011101110X77B100000110X83011111000X7CC110001100XC6001110010X39D101000010XA1010111100X5EE100001100X86011110010X79F100011100X8E011100010X71灭111111110XFF000000000X00第三十一页,共一百三十八页,2022年,8月28日1.6C语言数据类型、运算符与表达式数据类型单精度型(float)双精度型(double)整型(int)实型(浮点型)字符型(char)基本类型构造类型枚举类型号(enum)数组类型结构体类型(struct)共用体类型(union)指针类型空类型(void)第三十二页,共一百三十八页,2022年,8月28日序号名称数据类型长度(位数)值

域1有符号字符型[signed]char8B-128~+1272无符号字符型unsignedchar8B0~2553有符号整型[signed]short16B-32768~+327674无符号整型unsignedshort16B0~655355有符号整型[signed]int16B-32768~+327676无符号整型unsignedint16B0~655357有符号长整型[signed]long32B-2147483648~+21474836478无符号长整型unsignedlong32B0~42949672959单精度浮点型float32B±1.175494E-38~±3.4022823E+3810双精度浮点型double64B±1.175494E-38~±3.4022823E+3811指针型*1~24B存储器地址12位类型bit1B0或113可寻址位sbit1B0或114特殊功能寄存器sfr1B0~255C51编译器所支持的数据类型第三十三页,共一百三十八页,2022年,8月28日1.6.2变量与常量在程序运行的过程中,其值不能改变的量,称为常量。常量的数据类型有整型、浮点型、字符型、位类型和字符串型。数值常量可以在程序中直接引用,例如:a=15;a=2.65;a=‘c’等;但是符号常量不能直接使用,在使用之前必须用编译预处理命令“#define”先进行定义,例如:第三十四页,共一百三十八页,2022年,8月28日在程序运行中,其值可以改变的量称为变量。一个变量主要由两部分构成,一个是变量名,另个是变量值。每个变量都在内存中占据一定的存储单元(地址),并在该内存单元中存放该变量的值。(1)变量的定义[存储种类]数据类型[存储器类型]变量名表;第三十五页,共一百三十八页,2022年,8月28日(2)变量的初始化数据类型标识符

变量名1=常量1[,变量名2=常量2,…,变量名n=常量n];第三十六页,共一百三十八页,2022年,8月28日1.6.3运算符和表达式运算符名运算符算术运算符+-*/%++--关系运算符><==>=<=!=逻辑运算符!&&||位运算符<<>>~&|^赋值运算符=条件运算符?:逗号运算符,指针运算符*&求字节数运算符sizeof强制类型转换运算符(类型)下标运算符[]函数调用运算符()第三十七页,共一百三十八页,2022年,8月28日1.运算符的优先级和结合性(1)优先级

优先级是用来标志运算符在表达式中的运算顺序的。求解表达式时,总是先按运算符的优先次序由高到低进行操作。(2)结合性

当一个运算对象两侧的运算符优先级相同时,则按运算符的结合性确定表达式的运算顺序。第三十八页,共一百三十八页,2022年,8月28日2.算术运算符与算术表达式

+(加法运算)-(减法运算)*(乘法运算符)

/(除法运算符)%(求余运算符,或称模运算符)如:4%2=0++(变量自加1)--(变量自减1)

注意两个整数相除结果为整数,如8/5的结果为1,舍去小数部分。如果参加运算的两个数中有一个数为实数,则结果是实型。求余运算要求%两侧都是整型数据。第三十九页,共一百三十八页,2022年,8月28日自增、自减运算实战演练:请说明程序运行完后x,y,z,m,n的值分别是多少?main(){intx=6,y,z,m,n; y=++x; z=x--;m=y/z;n=y%z;}自增运算符(++)和自减运算符(--):(1)前置运算──++变量、--变量 即先增减、后运算。(2)后置运算──变量++、变量--即先运算、后增减。第四十页,共一百三十八页,2022年,8月28日赋值运算符

赋值语句的作用是把某个常量或变量或表达式的值赋值给另一个变量。符号为‘=’。这里并不是等于的意思,只是赋值,等于用‘==’表示。赋值语句左边必须是变量或寄存器,且必须先定义。常量不能出现左边。第四十一页,共一百三十八页,2022年,8月28日赋值运算符和赋值表达式简单的赋值运算符:复合的赋值运算符=+=、-=、*=、%=、/=i+=2等价于i=i+2a*=b+5等价于a=a*(b+5)x%=3等价于x=x%3第四十二页,共一百三十八页,2022年,8月28日4.关系运算符与赋值表达式关系运算符优先级

<<=>>===!=低高第四十三页,共一百三十八页,2022年,8月28日关系表达式

用关系运算符将两个表达式(可以是算术表达式、关系表达式、赋值表达式或逻辑表达式)连接起来的式子,称为关系表达式。关系表达式的值为逻辑值“真”或“假”,以1代表“真”,以0代表“假”。

例如:

(1)关系表达式“8==4”的值为

,表达式的值为

(2)关系表达式“5>0”的值为

,表达式的值为

第四十四页,共一百三十八页,2022年,8月28日

逻辑运算符优先级

!(逻辑非)

&&(逻辑与)||(逻辑或)注意:逻辑运算符与位操作运算符的区别。5.逻辑运算符与赋值表达式第四十五页,共一百三十八页,2022年,8月28日逻辑表达式

用逻辑运算符将一个或多个表达式连接起来,进行逻辑运算的式子。逻辑量的真判断——非0逻辑量的假判断——0若a=1,b=2,c=3,x=4,y=3,写出下各个表达式的值:(1)a+b>c&&b==c(2)!a<b&&b!=c||x+y<=3(3)!(x=a)&&(y=b)&&0000第四十六页,共一百三十八页,2022年,8月28日运算类型运算符优先级结合性括号运算符()1从左至右逻辑非和按位取反!~2从右至左算术运算*/%3从左至右+-4从左至右左移、右移运算<<>>5从左至右关系运算<<=>>=6从左至右==!=7从左至右位运算&8从左至右^9从左至右|10从左至右逻辑与&&11从左至右逻辑或||12从左至右赋值运算与复合赋值运算

=+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=14从右至左例如:(1)x<y&&m<n等效于(x<y)&&(m<n)(2)a==b||c==d等效于(a==b)||(c==d)(3)!a&&b>c等效于(!a)&&(b>c)第四十七页,共一百三十八页,2022年,8月28日与操作按位与操作符:&

格式:x&y

规则:对应位均为1时才为1,否则为0

例如,

i=i&0x0f;

等同于

i&=0x0f;主要用途:取(或保留)1个数的某(些)位,其余各位置0。6.位运算符与位运算表达式第四十八页,共一百三十八页,2022年,8月28日位运算或操作按位或操作符:|

格式:x|y

规则:对应位均为0时才为0,否则为1

例如,

i=i|0x0f;

等同于

i|=0x0f;主要用途:将1个数的某(些)位置1,其余各位不变第四十九页,共一百三十八页,2022年,8月28日位运算异或操作按位异或操作符:^格式:x^y规则:对应位相同时为0,不同时为1

例如,

i=i^0x0f;

等同于

i^=0x0f;主要用途:使1个数的某(些)位翻转(即原来为1的位变为0,为0的变为1),其余各位不变。第五十页,共一百三十八页,2022年,8月28日位运算按位取反操作按位取反操作符:~格式:~x规则:各位翻转,即原来为1的位变成0,原来为0的位变成1

例如,

i=~i;主要用途:间接地构造一个数,以增强程序的可移植性。第五十一页,共一百三十八页,2022年,8月28日左移运算符“<<”的功能,是把“<<”左边的操作数的各二进制位全部左移若干位,移动的位数由“<<”右边的常数指定,高位丢弃,低位补0。例如:“a<<4”是指把a的各二进制位向左移动4位。如a=00000011B(十进制数3),左移4位后为00110000B(十进制数48)。右移运算符“>>”的功能,是把“>>”左边的操作数的各二进制位全部右移若干位,移动的位数由“>>”右边的常数指定。进行右移运算时,如果是无符号数,则总是在其左端补“0”位运算第五十二页,共一百三十八页,2022年,8月28日7.逗号运算符与逗号运算表达式在C语言中逗号“,”也是一种运算符,称为逗号运算符,其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式,其一般形式为:表达式1,表达式2,………,表达式n第五十三页,共一百三十八页,2022年,8月28日1.7基本语句及结构化程序设计表达式语句和复合语句

表达式语句是最基本的C语言语句。表达式语句由表达式加上分号“;”组成,其一般形式如下:

表达式;执行表达式语句就是计算表达式的值。在C语言中有一个特殊的表达式语句,称为空语句。空语句中只有一个分号“;”,程序执行空语句时需要占用一条指令的执行时间,但是什么也不做。在C51程序中常常把空语句作为循环体,用于消耗CPU时间等待事件发生的场合。第五十四页,共一百三十八页,2022年,8月28日1.7.1表达式语句和复合语句把多个语句用大括号{}括起来,组合在一起形成具有一定功能的模块,这种由若干条语句组合而成的语句块称为复合语句。在程序中应把复合语句看成是单条语句,而不是多条语句。复合语句在程序运行时,{}中的各行单语句是依次顺序执行的。在C语言的函数中,函数体就是一个复合语句。第五十五页,共一百三十八页,2022年,8月28日基本if语句的格式如下:if(表达式){

语句组;

}if语句执行过程:当“表达式”的结果为“真”时,执行其后的“语句组”,否则跳过该语句组,继续执行下面的语句。

1.7.2选择语句第五十六页,共一百三十八页,2022年,8月28日if语句中的“表达式”通常为逻辑表达式或关系表达式,也可以是任何其他的表达式或类型数据,只要表达式的值非0即为“真”。以下语句都是合法的:

if(3){……}if(x=8){……}if(P3_0){……}在if语句中,“表达式”必须用括号括起来。在if语句中,花括号“{}”里面的语句组如果只有一条语句,可以省略花括号。如“if(P3_0==0)P1_0=0;”语句,但是为了提高程序的可读性和防止程序书写错误,建议读者在任何情况下,都加上花括号。1.7.2选择语句第五十七页,共一百三十八页,2022年,8月28日if-else语句的一般格式如下:if(表达式) {

语句组1;

} else{

语句组2;

}if-else语句执行过程:当“表达式”的结果为“真”时,执行其后的“语句组1”,否则执行“语句组2”1.7.2选择语句第五十八页,共一百三十八页,2022年,8月28日if-else-if语句是由ifelse语句组成的嵌套,用来实现多个条件分支的选择,其一般格式如下:if(表达式1) {

语句组1;

} elseif(表达式2){

语句组2;

} …elseif(表达式n){

语句组n;

}else{

语句组n+1;

}1.7.2选择语句第五十九页,共一百三十八页,2022年,8月28日1.7.2选择语句第六十页,共一百三十八页,2022年,8月28日多分支选择的switch语句,其一般形式如下:

switch(表达式){ case常量表达式1:语句组1;break; case常量表达式2:语句组2;break; …… case常量表达式n:语句组n;break; default:语句组n+1;}该语句的执行过程是:首先计算表达式的值,并逐个与case后的常量表达式的值相比较,当表达式的值与某个常量表达式的值相等时,则执行对应该常量表达式后的语句组,再执行break语句,跳出switch语句的执行,继续执行下一条语句。如果表达式的值与所有case后的常量表达式均不相同,则执行default后的语句组。1.7.2选择语句第六十一页,共一百三十八页,2022年,8月28日while语句用来实现“当型”循环,执行过程:首先判断表达式,当表达式的值为真(非0)时,反复执行循环体。为假(0)时执行循环体外面的语句。循环体循环继续的条件表达式下一条语句非0(真)0(假)循环体语句组while执行过程格式:while(循环继续的条件表达式)

{语句组;}花括号不能丢掉!请问:下述程序实现了什么功能?main(){inti,sum=0;while(i<=10){sum=sum+i;i++;}}1.7.3循环语句第六十二页,共一百三十八页,2022年,8月28日do-while语句用来实现“直到型”循环执行过程:先无条件执行一次循环体,然后判断条件表达式,当表达式的值为真(非0)时,返回执行循环体直到条件表达式为假(0)为止。绝对不能少分号!循环体格式:do{

循环体语句组;

}while(循环继续条件);花括号不能丢掉!循环继续的条件表达式下一条语句非0(真)0(假)循环体语句组请问:下述程序实现了什么功能?main(){inti,sum=0;do{sum=sum+i;i++;}while(i<=100);}1.7.3循环语句第六十三页,共一百三十八页,2022年,8月28日总循环次数已确定的情况下,可采用for语句形式为:for语句的一般形式:

for(循环变量赋初值;循环继续条件;循环变量增值)

{

循环体语句组;

} 分隔符为分号请问:下述程序实现了什么功能?main(){inti,y=0;for(i=1;i<=10;i++){y=y+i;}}1.7.3循环语句第六十四页,共一百三十八页,2022年,8月28日循环继续条件for的下一条语句非0(真)0(假)循环体语句组循环变量赋初值循环变量增值for语句循环执行过程只求解一次要执行若干次,具体次数由“循环继续条件”决定for语句不仅可用于循环次数已经确定的情况,也可用于循环次数虽不确定,但给出了循环继续条件的情况,它完全可以代替while语句和do-while语句。for(循环变量赋初值;循环继续条件;循环变量增值)

{循环体语句组;} 第六十五页,共一百三十八页,2022年,8月28日1.8单片机I/O端口及其应用单片机共有四个8位并行I/O口,分别用P0、P1、P2、P3表示。每个I/O口既可以按位操作使用单个引脚,也可以按字节操作使用8个引脚。第六十六页,共一百三十八页,2022年,8月28日P0口的结构

输出控制电路输出驱动电路

P0口逻辑电路第六十七页,共一百三十八页,2022年,8月28日

当P0口作为输出口使用时,内部总线将数据送入锁存器,内部的写脉冲加在锁存器时钟端CP上,锁存数据到Q、端。经过MUX,T2反相后正好是内部总线的数据,送到P0口引脚输出。当P0口作为输入口使用时,应区分读引脚和读端口两种情况,所谓读引脚,就是读芯片引脚的状态,这时使用下方的数据缓冲器,由“读引脚”信号把缓冲器打开,把端口引脚上的数据从缓冲器通过内部总线读进来。读端口是指通过上面的缓冲器读锁存器Q端的状态。读端口是为了适应对I/O口进行“读-修改-写”操作语句的需要。例如下面的C51语句:

P0=P0&0xf0; //将P0口的低4位引脚清0输出P0口的结构第六十八页,共一百三十八页,2022年,8月28日

除了I/O功能以外,在进行单片机系统扩展时,P0口是作为单片机系统的地址/数据线使用的,一般称为地址/数据分时复用引脚。当输出地址或数据时,由内部发出控制信号,使“控制”端为高电平,打开与门,并使多路开关MUX处于内部地址/数据线与驱动场效应管栅极反相接通状态。此时,输出驱动电路由于两个FET处于反相,形成推拉式电路结构,使负载能力大为提高。输入数据时,数据信号直接从引脚通过输入缓冲器进入内部总线。P0口的结构第六十九页,共一百三十八页,2022年,8月28日P1口的结构

P1口逻辑电路第七十页,共一百三十八页,2022年,8月28日P1口是准双向口,只能作为通用I/O口使用。P1口作为输出口使用时,无需再外接上拉电阻。P1口作为输入口使用时,应区分读引脚和读端口。读引脚时,必须先向电路中的锁存器写入“1”,使输出级的FET截止。P1口的结构第七十一页,共一百三十八页,2022年,8月28日P2口的结构

P2口逻辑电路第七十二页,共一百三十八页,2022年,8月28日P2口是准双向口,在实际应用中,可以用于为系统提供高8位地址,也能作为通用I/O口使用。P2口作为通用I/O口的输出口使用时,与P1口一样无需再外接上拉电阻。P2口作为通用I/O口的输入口使用时,应区分读引脚和读端口。读引脚时,必须先向锁存器写入“1”。P2口的结构第七十三页,共一百三十八页,2022年,8月28日P3口的结构

P3口逻辑电路第七十四页,共一百三十八页,2022年,8月28日P3口是准双向口,可以作为通用I/O口使用,还可以作为第二功能使用。作为第二功能使用的端口,不能同时当作通用I/O口使用,但其他未被使用的端口仍可作为通用I/O口使用。P3口作为通用I/O的输出口使用时,不用外接上拉电阻。P3口的结构第七十五页,共一百三十八页,2022年,8月28日【训练项目1-3】数码管动态显示系统设计与制作一、项目要求在Proteus仿真软件和单片机实训上,采用单片机的P0、P1、P2、P3的任意端口控制2个4位一体的共阳极数码管,实现任意数字显示,然后再修改程序实现简易时钟显示,显示格式为:□□—□□—□□,即“时”—“分”—“秒”。第七十六页,共一百三十八页,2022年,8月28日二、项目实训仪器、设备及实训材料工具、设备和耗材数量工具、设备和耗材数量工具、设备和耗材数量电脑1台51单片机下载线和USB线1根杜邦导线8PKeiluVision41套晶振1只AT89S51/STC60S21片Proteus7.5软件1套单片机实训板1块稳压电源1台三、项目实施过程及其步骤任务1实现任意数字显示任务描述:采用单片机的P0和P2端口分别作为数码管的数据和驱动端口,在Proteus软件和单片机实训板上,使数码管显示任意数字。然后再改用其它端口控制数码管,实现同样功能。第七十七页,共一百三十八页,2022年,8月28日第七十八页,共一百三十八页,2022年,8月28日任务2实现简易时钟显示任务描述:在任务1的基础上,实现简易时钟功能。然后再改用其它端口控制数码管,实现同样功能。第七十九页,共一百三十八页,2022年,8月28日四、思考与分析(1)绘制任务1和2的程序运行轨迹,即黄色箭头在程序代码行走的轨迹。(2)采用共阴极数码管,实现任意数字显示。第八十页,共一百三十八页,2022年,8月28日1.9数组第八十一页,共一百三十八页,2022年,8月28日分隔符为分号数组的概念

数组属于常用的数据类型,数组中的元素有固定数目和相同类型,数组元素的数据类型就是该数组的基本类型。例如,整型数据的有序集合称为整型数组,字符型数据的有序集合称为字符型数组。数组还分为一维、二维、三维和多维数组等,常用的是一维、二维和字符数组。

1.9数组第八十二页,共一百三十八页,2022年,8月28日数组的基本特点构造类形数据:由基本类型数据按照一定规则组成。数组:是有序数据的集合;数组中的每一个元素都属于同一个数据类型,用一个统一的数组名和下标来唯一地确定数组中的元素。应用场合:需要处理的数据为数量已知的若干相同类型的数据时。

注意:先定义,后使用。第八十三页,共一百三十八页,2022年,8月28日一维数组的定义和引用一维数组的定义:一般格式:类型标识符数组名[常量表达式];

int

array[10];

unsignedchar

num[7];说明:数组名——见名知意;数组名中存放的是一个地址常量,它代表整个数组的首地址。同一数组中的所有元素,按其下标的顺序占用一段连续的存储单元。方括弧而非圆括弧;常量表达式:可以是常量或符号常量;表示数组元素的个数(也称数组长度)。不允许对数组大小作动态定义。数组元素下标从0开始。array[0],array[1],…array[9];遵循标识符命名规则第八十四页,共一百三十八页,2022年,8月28日数组元素的表达形式:数组名[下标表达式]Array[4]=100;array[8]=34;array[10]=56;注意:数组下标不能越界!一个数组元素具有和相同类型单个变量一样的属性,可以对它赋值和参与各种运算。一维数组的引用第八十五页,共一百三十八页,2022年,8月28日一般格式:

数据类型数组名[常量表达式]={初值表}1.定义时赋初值;intscore[5]={1,2,3,4,5};2.给一部分元素赋值;intscore[5]={1,2};3.使所有元素为0;intscore[5]={0};4.给全部数组元素赋初值时,可以不指定数组长度;

intscore[]={1,2,3,4,5};一维数组的初始化第八十六页,共一百三十八页,2022年,8月28日1.10函数C语言程序都是由多个函数组成的,一般至少有一个主函数main(),函数是C语言程序的基本模块,通过对函数模块的调用来实现程序的功能。C语言不仅提供了丰富的库函数,而且还允许定义自己的函数,所以C语言程序都由各类不同功能的函数组成的。第八十七页,共一百三十八页,2022年,8月28日函数的分类标准库函数用户自定义函数(1)从函数是否具有返回值的角度分类①有返回值函数②无返回值函数(2)从函数是否带有参数角度分类

①无参函数

②有参函数第八十八页,共一百三十八页,2022年,8月28日函数定义C语言函数定义形式:[数据类型说明符]函数名([形参定义表]){ 执行语句; //“{}”中的内容称为函数体}第八十九页,共一百三十八页,2022年,8月28日函数的调用1.函数调用方式函数调用的一般形式为:[变量=]函数名([实参表])第九十页,共一百三十八页,2022年,8月28日2.对被调函数的声明C语言程序中一个函数调用另一个函数需要具备以下条件:①被调用的函数必须是已经存在的函数,是库函数或用户自定义的函数。②如果调用库函数,一般要在程序文件的开关用include命令,包含有关库函数所在的头文件。③如果调用用户自定义的函数,并且该函数与调用它的函数在同一个程序文件中,一般还应该在主调函数中对被函数作声明。即向编译系统声明将要调用此函数,并将有关信息通知编译。第九十一页,共一百三十八页,2022年,8月28日数组作为函数的参数

1.数组元素作为函数的参数

数组元素可以作为函数的实参,这时对应的形参是变量,与变量作实参一样,把数组元素的值传递到形参变量所在存储单元中,是单向的值传递。

第九十二页,共一百三十八页,2022年,8月28日2.数组名作为函数的参数

可以用数组名作为函数的实参,对应的形参也应该是数组名。

#include“reg51.h”voidsort(intx[],intn){ inti,j,tk; for(i=0;i<n-1;i++) //选择排序法对n个数进行降序排列

{ k=i; for(j=i+1;j<n;j++) //找出最大的元素

if(x[k]<x[j])k=j;if(k!=i){ t=x[i];x[i]=x[k];x[k]=t;} }}voidmain(){ intcj[10]={76,80,65,60,58,91,47,63,70,85}; sort(a,10);}第九十三页,共一百三十八页,2022年,8月28日局部变量和全局变量第九十四页,共一百三十八页,2022年,8月28日1.局部变量第九十五页,共一百三十八页,2022年,8月28日2.全局变量第九十六页,共一百三十八页,2022年,8月28日内部函数和外部函数1.内部函数static类型标识符

函数名

([形参定义]){

函数体}2.外部函数[extern]类型标识符

函数名

([形参定义]){

函数体}第九十七页,共一百三十八页,2022年,8月28日【训练项目1-4】LED点阵显示屏设计与制作一、项目要求在Proteus仿真软件和实训板上,采用单片机的P0、P1、P2、P3的任意端口控制单色和双色两种8*8点阵屏模块,实现一些特定的文字或图形显示。第九十八页,共一百三十八页,2022年,8月28日二、项目实训仪器、设备及实训材料工具、设备和耗材数量工具、设备和耗材数量工具、设备和耗材数量电脑1台51单片机下载线和USB线1根杜邦导线8PKeiluVision41套晶振1只AT89S51/STC60S21片Proteus7.5软件1套单片机实训板1块单、双色8*8点阵屏各1块三、项目实施过程及其步骤任务1

单色LED点阵显示屏设计与制作任务描述:要求在8*8LED点阵屏上循环显示▲

◆□■5个图形。第九十九页,共一百三十八页,2022年,8月28日第一百页,共一百三十八页,2022年,8月28日任务2双色LED点阵显示屏设计与制作任务描述:要求在8*8LED双色点阵屏上显示绿色、红色、橙色的“心”图形。第一百零一页,共一百三十八页,2022年,8月28日“心”图形实际显示效果四、思考与分析(1)在点阵屏上实现1~9数字显示。(2)在任务2中,第84行用于防止重影,若没有这行代码,显示现象怎样?第一百零二页,共一百三十八页,2022年,8月28日1.11LED点阵模块结构及原理1.11.1LED点阵模块的种类及结构(a)8*8LED点阵模块实物外形(b)共阴8*8LED点阵(c)共阳8*8LED双色点阵第一百零三页,共一百三十八页,2022年,8月28日【训练项目1-5】字符型LCD显示系统设计与制作一、项目要求在Proteus仿真软件和实训板上,采用单片机的P0、P1、P2、P3的任意端口控制LCD1602字符型液晶屏,实现任意字符显示。然后再制作一个简易电子钟,要求整点能发出报警声音,显示格式为:□□:□□:□□,即“时”—“分”—“秒”。第一百零四页,共一百三十八页,2022年,8月28日二、项目实训仪器、设备及实训材料工具、设备和耗材数量工具、设备和耗材数量工具、设备和耗材数量电脑1台51单片机下载线和USB线1根杜邦导线8PKeiluVision41套晶振12M1只AT89S51/STC60S21片Proteus7.5软件1套单片机实训板1块LCD1602液晶屏1块三、项目实施过程及其步骤任务1实现任意字符显示任务描述:采用单片机的P0和P2端口分别作为LCD的数据和控制端口,在Proteus软件和单片机实训板上,实现任意字符显示。然后再改用其它端口,实现同样功能。第一百零五页,共一百三十八页,2022年,8月28日第一百零六页,共一百三十八页,2022年,8月28日实训板上显示效果第一百零七页,共一百三十八页,2022年,8月28日任务2制作简易电子钟任务描述:在任务1的基础上,使LCD显示具有“时、分、秒”的简易电子钟。四、思考与分析(1)采用其它端口作为液晶屏的数据线或控制线,如何实现任务1和任务2?(2)在任务2中,如何使“AM”在12正点来时自动变为“PM”,又在00点来时自动变为“AM”?实训板上显示效果第一百零八页,共一百三十八页,2022年,8月28日1.12字符型LCD屏的种类及工作原理第一百零九页,共一百三十八页,2022年,8月28日1.引脚定义引脚号引脚名称引脚功能1VSS接地2VDD电源脚(+5V)3VO液晶屏驱动电源(0~5V),可接电位器4RS数据和指令选择控制端;当RS=0时,命令状态;当RS=1时,数据状态5R/

读写控制端;当R/=0时,写操作;当R/=1时,读操作6E数据读写操作控制位,E线向LCD模块发送一个脉冲(下降沿有效),LCD模块与单片机之间将进行一次数据交换7~14 DB0~DB7(1)数据总线以8位数据读/写方式,DB0~DB7均有效(2)数据总线以4位数据读/写方式,DB4~DB7有效,而DB0~DB3悬空不接,节约单片机资源(3)BD7除了为双向数据线,另外还为BF忙碌BF标志位

15A背光控制正电源(很多液晶屏上没有安装背光灯,所以此脚为空)16K背光控制地(很多液晶屏上没有安装背光灯,所以此脚为空)第一百一十页,共一百三十八页,2022年,8月28日2.LCD模块三个控制引脚的基本操作第一百一十一页,共一百三十八页,2022年,8月28日LCD写操作时序LCD读操作时序第一百一十二页,共一百三十八页,2022年,8月28日第一百一十三页,共一百三十八页,2022年,8月28日4.字符型LCD写数据操作第一百一十四页,共一百三十八页,2022年,8月28日1.13指针对于变量要弄清楚两个概念:一个是变量名,另个是变量值。前者是一个数据的标号,后者是一个数据的内容。而对内存单元,也要弄清楚两个概念:一个是内存单元的地址,另个是内存单元的内容。前者是内存对该单元的编号,表示该单元在整个内存中的位置,后者指的是在该内存单元中存放的数据。第一百一十五页,共一百三十八页,2022年,8月28日1.指针变量的定义类型识别符*指针变量名char*cp1,*cp2;int*p1,*p2;在定义指针变量时要注意:(1)指针变量前面的“*”表示该变量的类型为指针型变量,指针变量名是p1、p2,而不是*p1、*p2,这与前面介绍的变量定义形式有所区别。(2)指针变量名的命名规则与变量名命名规则相同,遵循标识符命名规则。(3)在定义指针变量时必须指定其“基类型”,因为不同类型的数据在内存中占用的字节数不一样长。第一百一十六页,共一百三十八页,2022年,8月28日2.指针变量的引用第一百一十七页,共一百三十八页,2022年,8月2

温馨提示

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

评论

0/150

提交评论