工作模块2 LED灯显示控制(课件)-《单片机技术应用》同步教学(人大版)

2024-07-10
| 56页
| 83人阅读
| 2人下载
普通

内容正文:

工作模块2:LED灯显示控制 同学们,大家好!上一讲我们学习了矩阵键盘识别原理,并绘制了接口电路,今天我们利用矩阵键盘实现数字键盘的功能 1 工作模块1:目录 2.4 C51的文档结构 2.5 C语言基本结构 LED 灯显示控制 任务2-1 LED灯闪烁 任务2-2 8个LED灯 流水控制 2.1单片机的并行I/O口使用 2.2 LED灯显示电路的硬件设计 2.3 单片机的编程语言 2.6 数据类型及常量变量 2.7 C51运算符 2.8 函数使用 任务实施 知识链接     我们先看矩阵键盘接口电路。P30-P33接行线,P34-P37接列线。 目录 2.1. LED灯闪烁控制的电路图 单片机的并行IO口使用。 2.2.LED灯显示电路的硬件设计 2.3.单片机的编程语言 2.4.C文档结构 任务2-1 LED灯闪烁控制 矩阵键盘程序设计总体思路:单片机采用编程扫描法来监视键盘的输入,采用反转法获取键值。 具体编程步骤如下: 任务2.1 LED灯闪烁控制电路 序号 元件名称 元件型号 元件参数 1 单片机 AT89C52 2 瓷片电容 CAP 30pF 3 电解电容 CAP-ELEC 22uF 4 晶振 CRYSTAL 12MHZ 5 按键 BUTTON 6 发光二极管红 LED-RED 7 电阻 RES 10k、470 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.1LED灯闪烁控制电路 LED闪烁电路所用电子元器件 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.1单片机I/O口应用 输入/输出端口 四个双向并行I/O端口: P0.0~P0.7 P1.0~P1.7 P2.0~P2.7 P3.0~P3.7 共32条线 XTAL2 XTAL1 EA ALE PSEN (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.1 P0口应用 (1)作为通用I/O口使用时,由于P0口内部电路是漏极开路,当需要输出高电平时,需要外接上拉电阻。使用时区分 读引脚:需要先在端口写入1,即P0=0xff。 读端口:是为了适应对I/O口进行“读-修改-写”操作语句的需要。例如,C51语句:P0=P0&0x0f; //&按位取“与”,将P0口的高4位引脚清零后输出。 读端口是由CPU自行完成的,在编程方面无须做前期处理。 (2)在进行单片机系统扩展时,P0可以作为“低位地址/数据”线分时复用,P0口是具有高电平、低电平和高阻抗3种状态的端口。因此, 是一个真正的双向端口, 简称双向口。 (3)每个引脚能驱动8个TTL负载, (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.1 P1口应用 通用I/O口:P1端口是一个带内部上拉电阻的8位准双向I/O端口。P1端口的每一位都可驱动4个TTL负载,读引脚时,需要先向端口写入1,即P1=0xff;。 小提示:准双向口,是说具备双向工作的能力,由于内部电路的结构,不具备高阻态。 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.1 P2口应用 (1) 作为通用I/O口使用:P2端口的每一位都可驱动4个TTL负载,读引脚时,需要先向端口写入1,即P2=0xff;。 (2)高8位地址线使用:P2端口在访问外部程序存储器或16位地址的外部数据存储器时,P2送出高8位地址数据,与P0口的低8位地址数据共同组成16位地址总线,可寻址64KB地址空间,当P2口作为高8位地址总线口使用时,就不能再作为通用I/O口使用。 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.1 P3口应用 作为通用I/O口使用:P3端口是一个带内部上拉电阻的8位准双向I/O端口。P3端口的每一位都可驱动4个TTL负载,读引脚时,需要先向端口写入1,即P3=0xff;P3端口除作为一般I/O外,还具有复用功能。 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.1 P3口应用 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.1 I/O应用总结 任一I/O口都可独立作I/O使用,但P0和P2访问外部存储器时,将不能作通用I/O口用; 1 I/O口作为输入时,必须通过程序输出1; 2 P1、P2、P3为“准双向口”,无需外接上拉电阻; 3 P0口没有内部上拉电阻,作输入时需外接上拉电阻。 4 01 02 1 2 03 04 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.2 LED灯显示电路的硬件设计 发光二极管简称LED灯(Light Emitting Diode),主要由红色、绿色、黄色和蓝色,是半导体二极管的一种,具备单向导电性,即正向偏置导通,反向偏置截止。 式中 U——LED电路电压, ULED 为LED管压降; 推荐值为:R=(5V-1.8V)/10mA=320Ω; 一般选择470Ω~1KΩ电阻。 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.2 LED灯显示电路的硬件设计 51单片机输出低电平时,驱动能力很强,可达20mA~50mA;输出高电平时,驱动能力弱,电流在5mA以下。 a图灌电流 b 拉电流 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.3 单片机编程语言 大致分成三类:机器语言、汇编语言、高级语言。 机器语言 汇编语言 高级语言 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.4 C文档组成 在C语言程序中,子程序的作用是由函数来实现的,函数是C语言的基本组成模块,一个C语言程序就是由若干个模块化的函数组成的。 C程序都是由一个主函数main( )和若干个子函数构成,有且只有一个主函数,程序由主函数开始执行,主函数根据需要来调用其他函数,其它函数可以有多个。 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.2 LED灯显示电路的硬件设计 //任务2-1 点亮一个LED灯 //注解符号 #include<reg51.h> //预编译命令 sbit P1_0=P1^0; //定义可寻址位 void delay(); //函数的声明 void main() //主函数 { while(1) { P1_0=0; //点亮1个LED灯 delay(); P1_0=1; //LED灯熄灭 delay(); }} void delay() //延时子函数 { unsigned int i; for(i=0;i<50000;i++);} (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 任务2-2 8个LED灯流水控制 2.5 C语言基本结构 第三步 掌握程序架构 第二步 第一步 函数编写 语句实现 单片机编程技巧 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 任务2-2 8个LED灯流水控制 2.5 C语言基本结构 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.5 C语言基本结构——表达式语句 表达式语句是最基本的C语言语句。 表达式语句由 “表达式”加上分号“;”组成,其一般形式如下: P1_0=0;//赋值语句 在 C 语言中有一个特殊的表达式语句,称为空语句。 空语句中只有一个分号“;”,程序执行空语句时需要占用一条指令的执行时间,但是什么也不做。 在C51程序中常常把空语句作为循环体,用于消耗CPU时间等待事件发生的场合。 如:for(j=0;j<255;j++); while(1);程序设计时,通常把该语句作为停机语句使用; (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.5 C语言基本结构——复合语句 把多个语句用大括号{}括起来,组合在一起形成具有一定功能的模块,这种由若干条语句组合而成的语句块称为复合语句。在程序中应把复合语句看成是单条语句,而不是多条语句。{}内部的各条语句都必须以“;”结尾,在“}”之外,不能加“;”。 void main() { //函数体的复合语句开始 while(1) { //while循环体的复合语句开始 P1_0=0; delay(10); P1_0=1; delay(10); //注意:复合语句的各条语句都必须以“;” } 结尾,在“}”之外,不能加“;” } (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.5 C语言基本结构——复合语句 把多个语句用大括号{}括起来,组合在一起形成具有一定功能的模块,这种由若干条语句组合而成的语句块称为复合语句。在程序中应把复合语句看成是单条语句,而不是多条语句。{}内部的各条语句都必须以“;”结尾,在“}”之外,不能加“;”。 void main() { //函数体的复合语句开始 while(1) { //while循环体的复合语句开始 P1_0=0; delay(10); P1_0=1; delay(10); //注意:复合语句的各条语句都必须以“;” } 结尾,在“}”之外,不能加“;” } (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.5 C语言基本结构——循环语句 while语句用来实现“当型”循环, 执行过程:首先判断表达式, 当表达式的值为真(非0)时, 反复执行循环体。为假(0)时 执行循环体外面的语句。 循环体 循环继续的条件表达式 下一条语句 非0(真) 0(假) 循环体语句组 while执行过程 格式:while(循环继续的条件表达式) { 语句组; } 花括号不能丢掉! 请问:下述程序实现了什么功能? main( ) { int i,sum=0; while(i<=5) { sum=sum+i; i++; } } (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.5 C语言基本结构——循环语句 do-while语句用来实现“直到型”循环 执行过程:先无条件执行一次循环体, 然后判断条件表达式,当表达式的值 为真(非0)时,返回执行循环体直 到条件表达式为假(0)为止。 绝对不能少分号! 循环体 格式:do { 循环体语句组; } while(循环继续条件); 花括号不能丢掉! 循环继续的条件表达式 下一条语句 非0(真) 0(假) 循环体语句组 请问:下述程序实现了什么功能? main( ) { int i,sum=0; do { sum=sum+i; i++; }while(i<=100); } (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.5 C语言基本结构——循环语句 总循环次数已确定的情况下,可采用for语句形式为: for语句的一般形式: for(循环变量赋初值;循环继续条件;循环变量增值 ) { 循环体语句组;} 分隔符为分号 请问:下述程序实现了什么功能? main( ) { int i,y=0; for(i=1;i<=10;i++) { y=y+i; } } (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.5 C语言基本结构——选择语句 基本if语句的格式如下: if (表达式) { 语句组;} 注意:在if语句中,“表达式”必须用括号括起来。在if语句中,花括号“{ }”里面的语句组如果只有一条语句,可以省略花括号。 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.5 C语言基本结构——选择语句 if-else语句的一般格式如下:if (表达式) { 语句组1; } else { 语句组2; } if-else语句执行过程:当“表达式”的结果为“真”时,执行其后的“语句组1”,否则执行“语句组2” (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.5 C语言基本结构——选择语句 if-else-if语句是多个条件分支的选择,其一般格式如下: if (表达式1) { 语句组1; } else if (表达式2) {语句组2; } … else if (表达式n) {语句组n; } else {语句组n+1;} 图2-14 if-else-if语句执行流程 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.5 C语言基本结构——选择语句 多分支选择的switch语句, 其一般形式如下: switch(表达式) { case常量表达式1: 语句组1;break; case常量表达式2: 语句组2;break; …… case常量表达式n: 语句组n;break; default : 语句组n+1; } 该语句的执行过程是:首先计算表达式的值,并逐个与case后的常量表达式的值相比较,当表达式的值与某个常量表达式的值相等时,则执行对应该常量表达式后的语句组,再执行break语句,跳出switch语句的执行,继续执行下一条语句。如果表达式的值与所有case后的常量表达式均不相同,则执行default后的语句组。 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.6 C51数据类型及常量变量 关于数据类型的含义: 1.不同类型数据在内存中占不同的存储空间,且采取不同的存储形式。 2.不同类型数据对应不同的取值范围。 3.数据类型确定了允许对其进行的操作。 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.6 C51数据类型及常量变量 数据类型名称 数据类型符 占用字节数 所占位数 数的表示范围 无符号(短)整型 unsigned int 2B 16 0~65535 有符号(短)整型 signed int 2B 16 -32768~32767 无符号长整型 unsigned long 4B 32 0-4294967295 有符号长整型 signed long 4B 32 -2147483648~2147483647 无符号字符型 unsigned char 1B 8 0~255 有符号字符型 signed char 1B 8 -128~127 单精度实型 float 4B 32 ±1.175494E-38~3.402823E+38 位型 bit 1bit 1 0或1 指针型 * 1~3B 8~24 对象的地址 可寻址位 sbit 1bit 1 0或1 专用寄存器 sfr 1B 8 0~255 16位专用寄存器 sfr16 2B 16 0~65535 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.6 C51数据类型及常量变量 例:数据类型 变量名 char n1; unsigned char x; int i; 注意:变量名不能用C语言中关键字表示,如:int、for、char等;写unsigned,默认为是有符号型。 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.6 C51数据类型及常量变量 标识符 定义:用来标识变量、常量、函数等的字符序列 组成: 只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线 大小写敏感 不能使用关键字 长度:最长32个字符 命名原则: 见名知意 不宜混淆 如l与I, o与0 例:判断下列标识符号合法性 dec DEc M.D.Tom Date 3days student_name #33 char a>b $123 _x1 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.6 C51数据类型及常量变量 在程序执行过程中,其值不发生改变的量称为常量。常量区分为不同的类型,有整型常量、实型常量、字符常量和字符串常量。 常量类型 具体类型 表示形式 说明 整型常量 八进制整常数 ○12 八进制数12 十六进制整常数 0x1A;0X1A 十六进制数1A 十进制整常数 34;34L 十进制数34(占16位);长整型数34(占32位) 实型常量 十进制形式 0.0,.25,5.789 0~ 9和小数点组成小数点前面的0可以省略 指数形式 2E5 3.7E-2 等于2*105等于3.7*10-2 字符常量 字符型 ‘b’‘5’ 字符b,字符5 转义字符型 回车换行,具体见表2.8 字符串常量 字符串常量 "CHINA" 在内存中存的是C-H-I-N-A-\0 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.6 C51数据类型及常量变量 符号常量:用标识符代表常量 定义格式: #define 符号常量 常量 如 #define NUM 30 #define NUM 30 void main() { int total; total=NUM*5 } (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.6 C51数据类型及常量变量 字符常量:定义:用单引号括起来的单个普通字符或转义字符. 字符常量的值:该字符的ASCII码值 转义字符 转义字符的意义 转义字符 转义字符的意义 回车换行 \\ 反斜线符( \ ) \t 横向跳到下一制表位置 \' 单引号符 \v 竖向跳格 \” 双引号符 \b 退格 \a 鸣铃 \r 回车 \ddd 1~3位八进制数所代表的字符 \f 走纸换页 \xhh 1~2位十六进制数所代表的字符 如 ‘A’——65, ‘a’——97, ‘0’——48 , ‘ ’——10 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.6 C51数据类型及常量变量 字符串常量 定义:用双引号(“”)括起来的字符序列 存储:每个字符串尾自动加一个 ‘\0’ 作为字符串结束标志(字符串用数组表示) 字符常量与字符串常量不同 t h a n k \0 例 字符串“thank”在内存中 a a \0 例 ‘a’ “a” 例 空串 “” \0 例: char ch; ch=‘A’; (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.6 C51数据类型及常量变量 在程序执行过程中,取值可变的量称为变量。一个变量必须有一个名字,在内存中占据一定的存储单元,在该存储单元中存放变量的值。变量使用时则必须作强制定义即“先定义,后使用”。 变量定义的完整形式为: 【存储类型】数据类型 【存储器类型】变量名...; (1)存储类型说明符 auto 自动变量 (动态存储区) register 寄存器变量(动态存储区) extern 外部变量(CPU的通用寄存器) static 静态变量(静态存储区) 小贴士: 静态存储变量:在程序执行时,定义时指定的存储单元一直保持不变,直到程序结束。 动态存储变量:在程序执行时候;使用时才分配内存单元,使用完毕后立即释放,再使用再分配。从以上分析可知,静态存储变量是一直存在的,而动态存储变量则时而存在时而消失。 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.6 C51数据类型及常量变量 自动变量 把存储类型符auto加在变量名前,变量就是自动变量。自动变量只能在函数内说明;auto可以省略。在不同函数中说明的自动变量,可以使用相同的名字,它们的类型可以相同,也可以不同。 寄存器变量 把数据存放在寄存器里,操作起来比内存里快。比如:register int x;就把变量x定义为一个寄存器型的整型变量,存放在CPU的一个通用寄存器中。现在程序中极少使用寄存器型变量。 外部变量 把存储类型符extern加在变量名及其类型前面,该变量就成为一个外部变量。凡是在函数外部定义的变量都是外部变量。 静态变量 把存储器类型符static加在变量名及其类型前面,该变量就成为静态变量。例如:static int i;在整个程序运行期间,静态变量一直占据分配给它的存储区不予归还,直到程序运行结束。 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.6 C51数据类型及常量变量 存储器类型 C51编译器支持的存储器类型见表所示。 C51编译器支持的存储器类型 存储器类型 描述 data 直接访问内部数据存储器,允许最快访问(128B) bdata 可位寻址内部数据存储器,允许位与字节混合访问(16B) idata 间接访问内部数据存储器,允许访问整个内部地址空间(256B) pdata “分页”外部数据存储器(256B) xdata 外部数据存储器(64KB) code 程序存储器(64KB) 变量定义的完整形式为: 【存储类型】数据类型 【存储器类型】变量名...; (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.6 C51数据类型及常量变量 变量名 变量的名字是一种标识符,它必须遵守标识符的命名规则。习惯上变量名用小写字母表示,以增加程序的可读性。必须注意的是大写字符和小写字符被认为是两个不同的字符。 例如:int a,b,c; //定义整型变量a,b.c,自动变量,auto省略了。 unsigned char i=‘A’; //定义无符号字符型变量i,同时赋初值字符“A”; 说明: 1)允许在一个类型说明符后,说明多个相同类型的变量。各变量名之间用逗号间隔。类型说明符与变量名之间至少用一个空格间隔。 2)最后一个变量名之后必须以“;”号结尾。 3)变量定义必须放在变量使用之前,一般放在函数体的开头部分。 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.7 C51运算符 符号 说明 运算对象个数 举例 含义 + 加法运算 双目 x=y+z; y+z的结果赋值给x - 减法运算 双目 x=y-z; y-z的结果赋值给x * 乘法运算 双目 x=y*z; y×z的结果赋值给x / 除法运算 双目 x=y/z; y÷z的结果赋值给x % 取余运算 双目 x=y%z ; y÷z的余数赋值给x,如5%2的结果是1 ++ 自增1 单目 i++; i自身加1 -- 自减1 单目 i--; i自身减1 算术运算符 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.7 运算符 赋值运算符 符号 说明 运算对象个数 举例 含义 = 基本赋值 双目 x=y+z; y与z的和赋值给x += 加赋值 双目 x+=1; x=x+1; -= 减赋值 双目 x-=1; x=x-1; *= 乘赋值 双目 x*=2; x=x*2; /= 除赋值 双目 x/=2 ; x=x/2; %= 模赋值 双目 x%=2 ; x=x%2; <<= 左移位赋值 双目 x<<=1; x变量整体先左移1位,再赋值给x; >>= 右移位赋值 双目 x>>=1; x变量整体先右移1位,再赋值给x; &= 位与赋值 双目 x&=0xf0; 做位与操作后赋值 |= 位或赋值 双目 X|=0xf0; 做位或操作后赋值 ^= 异或赋值 双目 X^=0xf0; 做位异或操作后赋值 ~= 取反赋值 双目 x~=x; 做位取反操作后赋值 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.7 运算符 关系运算符 符号 说明 运算对象个数 举例 含义 < 小于 双目 x<y; x是否小于y; <= 小于等于 双目 x<=y; x是否小于等于y; > 大于 双目 x>y; x是否大于y; >= 大于等于 双目 x>=y; x是否大于等于y; == 等于 双目 x==y x是否等于y != 不等于 双目 X!=y x是否不等于y (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.7 运算符 逻辑运算符 符号 说明 运算对象个数 举例 含义 ! 逻辑非 单目 !a; A为非0时,!a为假;a为0时,!a为真; && 逻辑与 双目 x&&y x,y都为真时,才为真 || 逻辑或 双目 X||y x,y有1个为真时,就为真 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.7 运算符 位运算符 符号 说明 运算对象个数 举例 含义 & 按位逻辑与 双目 0x23&0x0f=0x03; 屏蔽0x23的高四位,保留低四位; | 按位逻辑或 双目 0x23|0x0f=0x2f; 0x23保留高四位,置1低四位; ~ 按位取反 单目 x=~0x23; x=0xd2; ^ 按位异或 双目 0x23^0x0f=0x2c 异或运算:相同出0,相异出1 << 按位左移 双目 x<<2; 高位丢弃,低位补0若x=0x01,移位后为0x04 >> 按位右移 双目 x>>2; 高位补0,低位丢弃若x=0x10,移位后为0x04 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.7 运算符 指针和地址运算符 符号 说明 运算对象个数 举例 含义 * 提取变量的内容 单目 nx=*a; 提取地址a的内容赋值给nx & 提取变量的地址 单目 Ny=&b; 提取变量b的地址赋值给Ny (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.8 函数 1.标准库函数 由C51编译器提供,用户不必定义可以直接调用。在C51编译环境中,以头文件的形式给出。 eg:math.h、stdio.h 函数的分类 2.用户自定义函数 用户根据需要自行编写的函数,它必须先定义之后才能被调用。 eg:delay(); (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.8 函数 函数定义的一般形式是: 函数类型 函数名(形式参数表) { 局部变量定义; 函数体语句; return语句; } 其中,“函数类型”说明了自定义函数返回值的类型。 “函数名”是自定义函数的名字。 “形式参数表”给出函数被调用时传递数据的形式参数,形式参数的类型必须要加以说明。圆括号不能省略。 “局部变量定义”是对在函数内部使用的局部变量进行定义。 “函数体语句”是为完成函数的特定功能而设置的语句。 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.8 函数 函数调用的形式: 函数名(实际参数表); 注意: 函数调用时提供的实际参数(简称实参)应与被调用函数的形式参数按顺序一一对应,而且参数类型也要一致。 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.8 函数 (1)delay(200); (2)c=2*max(a,b); (3)m=max(a,max(b,c)); 总结: 函数调用可以作为一个独立的语句,也可作为表达式或一个运算量。 函数调用方式 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.8 函数 return 语句使用说明 (1)reutrn语句格式: return 表达式; 或return( 表达式); (2)return语句功能:返回调用函数,并将“返回值表达式”的值带给调用函数。 (3)若不需要带回函数值:将函数定义为void型,否则需要有返回语句。 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 2.8 函数 #include:有两种方式可以指定插入头文件 #include <文件名>: 直接到系统指定的目录下查找该文件; #include "文件名": 先在当前目录查找有无该头文件,有则包含该目录下的头文件,没有则到系统指定的目录下找该头文件。 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 任务2.3 调试 RST:复位命令; Run(F5):全速运行。一般与断点配合使用,执行时程序能够从当前行连续运行到断点处,节省调试时间。但无法观察某条语句或某段语句的运行结果。 Stop:停止运行。在无断点设置的程序中,当执行run时, stop键就会激活。 Step(F11):单步跟踪调试。每按一次,黄色箭头向下移动一句,系统就执行一句。 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 任务2.3 调试 Step Over(F10):单步运行调试。每按一次,黄色箭头向下移动一句,系统就执行一句。与Step命令的不同是:Step命令可以跟踪到函数内部执行,而StepOver只是把函数作为一个语句执行。 Step out(ctrl+F11):跳出当前函数。当进入函数内部执行时,按此命令,可以结束当前函数的运行。 Run to cursor line(ctrl+F10):全速运行至光标处。与断点调试相比,断点调试有记忆功能,当再次重复调试程序时,每当程序运行到断点处都会停止在该断点处。此方法特别适用于循环程序的调试。根据需要可以在程序中设置多个断点。 (1)判别有无键按下; (2)软件延时消抖; (3)再次确认有无键按下; (4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或 查表法得到键值; (5)松手检测:判断闭合键是否释放,如没释放则继续等待; (6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。 下面我们来编程! 再 见 同学们,大家好!我是主讲教师杨敬娜。上一讲我们学习了矩阵键盘识别原理,并绘制了接口电路,今天我们利用矩阵键盘实现数字键盘的功能 56 � 语句组 表达式 真(非0) 假(0) � 语句组1 表达式 真(非0) 语句组2 假(0) $$

资源预览图

工作模块2 LED灯显示控制(课件)-《单片机技术应用》同步教学(人大版)
1
工作模块2 LED灯显示控制(课件)-《单片机技术应用》同步教学(人大版)
2
工作模块2 LED灯显示控制(课件)-《单片机技术应用》同步教学(人大版)
3
工作模块2 LED灯显示控制(课件)-《单片机技术应用》同步教学(人大版)
4
工作模块2 LED灯显示控制(课件)-《单片机技术应用》同步教学(人大版)
5
工作模块2 LED灯显示控制(课件)-《单片机技术应用》同步教学(人大版)
6
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。