• 工作总结
  • 工作计划
  • 心得体会
  • 述职报告
  • 事迹材料
  • 申请书
  • 作文大全
  • 读后感
  • 调查报告
  • 励志歌曲
  • 请假条
  • 创先争优
  • 毕业实习
  • 财神节
  • 高中主题
  • 小学一年
  • 名人名言
  • 财务工作
  • 小说/有
  • 承揽合同
  • 寒假计划
  • 外贸信函
  • 励志电影
  • 个人写作
  • 其它相关
  • 生活常识
  • 安全稳定
  • 心情短语
  • 爱情短信
  • 工会工作
  • 小学五年
  • 金融类工
  • 搞笑短信
  • 医务工作
  • 党团工作
  • 党校学习
  • 学习体会
  • 下半年工
  • 买卖合同
  • qq空间
  • 食品广告
  • 办公室工
  • 保险合同
  • 儿童英语
  • 软件下载
  • 广告合同
  • 服装广告
  • 学生会工
  • 文明礼仪
  • 农村工作
  • 人大政协
  • 创意广告
  • 您现在的位置:六七范文网 > 其它相关 > 正文

    两位数码管动态显示编程常见问题分析

    来源:六七范文网 时间:2023-06-11 09:20:24 点击:


    打开文本图片集

    摘 要:由于单片机技术的发展,才能使LED七段数码管能够在减少驱动器的情况下直接被驱动。由于LED数码管显示技术的优势使得它被广泛应用在工业过程控制系统、智能仪表,智能产品等领域。文章重点介绍了LED(light emission diode)数码管动态显示在编程中的常见问题分析。

    关键词:单片机;数码管;动态显示;问题分析

    1 动态显示

    1.1 动态显示的引入

    用数码管显示信息时,每个数码管至少需要8个I/O口,如果需要多个数码管,则需要太多的I/O口,而单片机的I/O口是有限的。在实际应用中,一般采用动态显示的方式解决此问题。即将所有位数码管的段选线并联在一起,由位选控制端决定数码管的工作状态。多位数码管显示时应采用动态扫描方式。

    1.2 动态显示的原理

    所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。

    2 两位数码管动态显示编程常见问题分析

    文章主要针对实现两位数码管显示24进制数的功能,即显示的数据范围为00~23。在PROTEUS中选用的单片机的类型为AT89C51,7个电阻组成的排阻和2位共阴极的数码管。两位数码管动态显示原理图如图1所示

    2.1 在KEIL软件使用时易出现的问题

    (1)在KEIL软件中使用小写的p0~p3。KEIL软件编程时应注意区分字母的大小写。在端口P0~P3应用时均使用大写字母,如sbit led=P2^0; 因为在“regx51.h”文件中寄存器位置定义分别为 “sfr P0= 0x80;”,“sfr P1=0x90;”“sfr P2= 0xA0;”“sfr P3 = 0xB0;”。

    (2)添加.c文件不成功。若是.c文件没有找到指定的存储位置,而是手动输入的名字,则在Keil软件中显示如: 。若是.c文件为空,说明在工程上添加.c文件不成功。添加.c文件成功在Keil软件中显示如: 。

    (3)头文件未引用。若是使用“_crol_(变量,移动位数)”循环左移函数,必须引用头文件#include

    (4)未生成“××.HEX”文件。选择Options for Target"Target1"选项,单击Output选项卡,选中Create HEX File (打上对钩),单击“确定”按钮,完成设置。

    2.2 在KEIL软件中生成的“××.HEX”文件下载到PROTEUS单片机中,进行模拟演示时可能出现的问题

    (1)软件编程和硬件匹配问题

    a.段码的选择。在KEIL软件编程时,需要调用共阴极的数码管。由于数码管需要显示的数字包含0~9,所以在程序中需要调用0~9的编码,为了方便调用,常常把编码以数组的形式表示,如:unsigned char duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ;

    b.位选的控制。两位数码管中选择性显示的控制,即位控端的控制,若使第一位数码管工作,P3.1必须为低电平,即P3=0xfe; 若使第二位数码管工作,P3.0必须为低电平,即P3=0xfd。

    (2)数码管显示个位和十位颠倒

    任何一个由两位数字组成的十进制数均可以由十位上的数字×10+个位数字表示。如:a=b×10+c,则a表示一个两位的十进制数,b表示十位上的数字,c表示个位上的数字。其中a存放在数组shijian[]中,而b、c则存放在数组geshi[]中。

    a.数组当中数据调用顺序不正确。在geshi[]中,geshi[0]存放十位上的数字,geshi[1]存放个位上的数字。如:个位显示“3”,则程序编写为:P3=0xfe,P2= duanma[geshi[1]] 。

    b.两位十进制数进行数字拆分不正确。十位上数字利用“/”(取整)算出, 个位上数字采用“%”(求余)得出。

    个位上数字:geshi[1]=shijian[0]%10;

    十位上数字:geshi[0]=shijian[0]/10;

    (3)程序编译正确,但是下载至单片机数码管不显示数字或显示乱码。

    a.软件编程所用的编码和硬件使用数码管的管型不一致。

    b.软件编程时数码管的位选信号不正确。

    c.数组中的数据未初始化。如geshi[]={0,0,0};则该数组中有3个数值,分别为geshi[0]、geshi[1]和geshi[2],若是在程序中出现“geshi[3]”,内部的数据取决于具体的编译器和系统,则geshi[3]具体的数值不一定,所以一般均需要进行必要的初始化。

    d.调用数组中的数据不正确。

    编写程序时,调用数组内的数据要正确。如:k=0x7f;for(i=0;i<8;i++){P3=k; P2=duanma[geshi[7-i]];k=_cror_(k,1);delay();} 当i=0时,P3=0x7f; P2=duanma[geshi[7]];先调用geshi[]中下标为7的数值,再调用duanma[]中下标为geshi[7]的数值送至P2。

    e.数据范围不正确。如shijian[0]++;if(shijian[0]>256)shijian[0]=0; 对于无符号字符型数据的范围为0~255。若是需要和256进行比较,可以定义为“unsigned int shijian[]={0};” 。

    综上所述,编写程序时常见问题的原因如下:

    (1)学习者对C语言中的部分基础知识掌握不牢固;(2)学习者对相关单片机基础知识理解不透彻;(3)学习者对程序控制要求不

    明确。

    通过KEIL软件和PROTEUS软件的联合调试,学习者能够及时快捷地掌握单片机和C语言中的相关知识,理解相关器件的工作原理,进而掌握编写程序的一般方法和技巧。

    参考文献

    [1]张靖武.单片机系统的PROTEUS设计与仿真[M].北京:电子工业出版社,2007.

    [2]谭浩强.C语言设计(第4版)[M].清华大学出版社,2010.

    推荐访问:两位 常见问题 编程 数码管 分析