◇任务要求◇
◇任务准备◇
一、掌握动态显示工作原理
所谓动态扫描显示,即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉的暂留作用,使人感觉好像各位数码管同时都在显示,而实际上多位数码管是一位一位轮流显示的,只是轮流显示的速度非常快,人眼无法分辨出来。
二、设计仿真电路图
数码管动态显示仿真电路如图3-3所示。
图3-3 数码管动态显示仿真电路图
三、74LS377芯片介绍
74LS377是8D锁存器,其引脚如图3-4所示。在74LS377片选CE端为低电平时,选中该芯片,在CP为上升沿时能把输入信号锁入芯片中。
图3-4 74LS377芯片引脚
74LS377真值表如表3-10所示。
表3-10 74LS377的真值表
四、数组的概念
在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类型数据元素的集合称为数组。在C语言中,数组属于构造数据类型。
本书中我们仅对程序中可能用到的一维数组进行介绍。
1.一维数组的定义
定义:数组是有序数据(必须是相同的数据类型结构)的集合。
格式:类型说明符 数组名[常量表达式]
例如:int a[10]表示数组名为a,有10个元素,并且每个元素的类型都是int型的。
2.一维数组元素的初始化
一维数组有下列初始化方法:
(1)在定义数组时,对数组元素赋初值。
例如,in a[10]={0,1,2,3,4,5,6,7,8,9},等价于a[0]=0,a[1]=1,…a[9]=9。
(2)可以只给一部分元素赋初值。
例如,int a[10]={0,1,2,3,4},表示只给数组的前5个元素赋初值,后5个元素的值,系统自动默认为0。
(3)在对全部数组元素赋初值时,可以不指定数组长度。
例如,int a[5]={0,1,2,3,4},可以改写为int a[]={0,1,2,3,4};但是,int a[10]={0,1,2,3,4},不能改写为int a[]={0,1,2,3,4};
3.一维数组的引用
数组必须先定义﹑后使用。C语言规定,只能逐个引用数组元素,而不能一次引用整个数组。数组的引用形式为:数组名[下标]。
其中,下标可以是整型常量也可以是整型表达式,例如,led=a[2]。
五、动态显示程序设计方案
通过P0,WR,CS1控制段码锁存器,通过P0,WR,CS2控制位码锁存器,按照题目要求,每显示一位数字需要送入一位段码和相应的位码,要显示8个数字,上述步骤要重复8次,每次显示完成后要有延时。编译代码,下载程序后观察,上面的代码实现了题目的要求,但还没有体现出动态显示的特点,下面将每个数码管点亮的时间缩短到100 ms,编译下载,可以看见以数码管变换显示的速度快多了。我们再把亮点时间缩短至10 ms,编译下载,此时已经可隐约看见8个数码管上同时显示数字“01234567”,但是看上去会有些晃眼。我们再把亮点时间缩短至1ms,编译下载,这时8个数码管非常稳定﹑清晰地显示着数字“01234567”。
程序编写过程中需要注意的是:在每次送完段选数据后,在送入位选数据之前,需要加上一句“P0=0xff”,这条语句的专业名称叫做“消影”。这段程序可以使数码管清晰地进行显示,非常重要。
六、数码管动态显示参考程序
【知识链接】Keil C51的数据结构
1.标识符
标识符就是编程时使用的表示某个事件名称的符号,如函数名﹑变量名﹑引脚名﹑特殊功能寄存器名等。标识符有系统标识符和用户自定义标识符之分。
标识符的命名规则如下:
(2)标识符只能由字母﹑数字和下划线三类字符组成。
(3)标识符是区分大小写的,如A和a是两个不同的标识符。
(4)标识符有效长度不超过32个字符。
(5)标识符不能是Keil C51的关键字。
2.数据类型
(1)char:有符号字符型,一字节,值域:-128~127。
(2)int:有符号整型,两字节,值域:-32768~32767。
(3)long:有符号长整型,四字节,值域:-2147483648~2147483647。
(4)unsigned char:无符号字符型,一字节,值域:0~255。
(5)unsigned int:无符号整型,两字节,值域:0~65535。
(6)unsigned long:无符号长整型,四字节,值域:0~4294967295。
(7)float:浮点型(都是有符号的),四字节,值域:±1.175494E-38~± 3.402823E+38。
(8)bit:位变量,一个二进制位,值域:0~1。
(9)sbit:51单片机特殊功能寄存器位,值域:0~1。
(10)Sfr:51单片机特殊功能寄存器,值域:0~255。(www.daowen.com)
(11)sfr16:51单片机特殊功能寄存器,如DPTR,值域:0~65535。
(12)bit,sbit,sfr,sfr16:不是标准C的内容,是51单片机及Keil C51编译器特有的,不能用指针对它们进行操作。
3.变量
Keil C51规定所有变量在使用前都必须加以说明。变量说明语句由数据类型﹑可选的存储类型和其后的一个或多个变量名组成,形式如下:
数据类型 [存放类型] 变量表;
变量的作用范围:在花括号内说明(也称声明或定义)的变量,其作用范围仅限该花括号内,称为局部变量;在所有函数外面定义的变量,其作用范围是整个程序,称为全局变量。
静态变量:在类型前加关键词static说明的变量,称为静态变量。在函数内部定义的静态变量也是局部变量,但它在函数下次调用时,能保存上次调用的值。在函数外面定义的静态变量,是全局变量,但它只在当前C文件中有效,这样可以防止多个C文件中同名冲突。
4.位变量
使用Keil C的关键字sbit来定义位变量。
第一种方法:sbit 位变量名=位地址值;
第二种方法:sbit 位变量名=字节名称^序号;
第三种方法:sbit 位变量名=字节地址值^序号。
5.常量
常量就是不可改变的量,是一个常数。同变量一样,常量也可以有各种数据类型。常量可以用以下几种方式定义:
(1)宏定义
#define OFF 1/*定义常量标识符OFF,其值为1*/。
(2)使用CODE空间
char code array[]={1,2,3,4};/*定义一个常数表,存放在程序存储器中*/。
(3)常量定义关键词const
const int MAX = 60。
(4)enum枚举常量
enum switchENUM {ON,OFF};/*ON 值为0,OFF值为1*/。
七、单片机程序下载
YL-236型单片机实训平台使用YL-ISP在线下载器在线下载程序,操作步骤如下:
(1)连接YL-ISP在线下载器,将在线下载器的排线与主机模块的ISP下载接口相连,并将在线下载器的USB接口与计算机的USB接口相连。
(2)启动YL-ISP在线下载器程序,检测下载器的连接状态。
(3)单击“选择器件”下拉按钮,选择需要的芯片型号。
(4)单击“调入Flash文件”栏中的文件夹图标,调入可执行文件(扩展名为.hex),文件会自动加载。
(5)单击“自动编程”按钮写入程序,写入成功后,信息输出列表框中会反馈“操作成功”字样。
◇任务实施◇
一、硬件电路搭建
分析单片机控制数码管的动态显示电路,在YL-236型单片机实训平台上选取主机模块﹑电源模块和显示模块,搭建单片机控制数码管动态显示电路。
1.模块选择
本任务所需要的模块具体如表3-11所示。
表3-11 本任务所需要的模块
2 工具和器材
本任务所需要的工具和器材如表3-12所示。
表3-12 表具和器材
3.电路搭建
搭建数码管动态显示仿真电路(如图3-3所示)的连接图。
二、程序代码的编写、编译
(1)启动Keil C51编程软件,新建工程﹑文件并均以“SMG”为名保存在文件夹中。
(2)在SMG.c文件的文本编辑器窗口中输入程序代码。
(3)编译源程序,排除程序输入错误,生成SMG.hex文件。
三、系统调试
系统调试的步骤如下:
(1)使用程序下载专配USB线将计算机的USB接口与单片机主机模块程序下载接口连接起来。
(2)打开电源总开关,启动程序下载软件,下载可执行文件至单片机中。
(3)观察LED状态,若实现任务要求,则系统调试完成;否则,需要进行故障排除。
◇任务评价◇
一、工艺性评分标准
工艺性评分标准如表3-13所示。
表3-13 工艺性评分标准
二、功能评分标准
功能评分标准如表3-14所示。
表3-14 功能评分标准
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。