数码管显示数字解析.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在第6课里,我们讲到数码管的静态显示,利用静态显示法,通过控制位选和段选,可以让数任意几位数码管显示任意字符,但由于所有位数码管的相同的段选全部接在一起,所以只能同时显示相同的数字,例如8位同时显示8字,1、3、5位同时显示3字。但大家想一下,如果我们要让数码管同一时刻显示不同的数字,如图1所示的现象,用静态显示的方法就不能够实现,这里就只能用到动态显示的方法,今天这一节我们主要讲解数码管动态显示的原理的程序实现的方法。 图1 数码管同时显示123456 ? 在讲解动态显示方法之前,我们先介绍在种数码管及单片机程序开发过程常用的方法-数组编码法。 1、数组编码 在跟数码管相关的程序中,可以对位进行编码,也可对段进行编码,这里我们以段编码进行讲解。通过第8课的程序我们知道,在位选确定后,要显示数字8时,P0=0x80,显示数字3时P0=0xb0,也就是0xb0,0x80分别可以表示数字3和8,按此方法,我们把在数码管上显示0-f,16个数字全部用16制度表示出来,这16个16进制数就称为数码管可显示0-f的相应的编码,如图2所示(注意共阳和共阴极数码管相应的编码有所不同,这里以实验板上共阳极的为例)。 图2 共阳极数码管编码 在编程中,编码的表示方法如下: unsigned char code table[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e }; 这里编码表示的方法与C语言中数组定义的方法基本一样。table是数组名,后面需加[],中括号中需加上数组中元素的个数,也可以不写。等号的右边用一个大括号将所有元素包含起来,里面的元素之间用“,”隔开,在大括号外用“;”结束。等号左边的unsigned char 是数据元素的数据类型,这里定义为无符号字符型,也就是元素的值范围只能是0-255之间。Code表示把这个数组定义为编码,这样定义的好处是其元素转化成二进文件后可能直接存储到程序存储器中,当然这里也可以不加code,但是这样编译后会将其直接存储到数据存储器中,要知道单片机中数据存储器的容量是非常有限的,定义为code后可节约单片机数据存储器的空间。 调用程序的方法如下, P0=table[1]; 这里表示将数组中的第2个元素(注意第一个是table[0])0xf9赋给P1口, 即P0=0xf9;也就是此时位被选通的数码管会显示数字2. 下面利用编码的方法让6个数码管以间隔1秒的时间循环显示0-f。相应程序如例1. 例1:6个数码管循环显示0-f #includereg52.h #define uint unsigned int #define uchar unsigned char sbit duan=P2^6; sbit wei=P2^7; uchar num; unsigned char code table[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e }; void delay(uint); ?void main() { 牋牋牋 wei=1; 牋牋牋 P0=0xfe; 牋牋牋 wei=0; ?牋牋牋 for(num=0;num16;num++) 牋牋牋 { 牋牋牋牋牋牋?duan=1; 牋牋牋牋牋牋?P0=table[num]; 牋牋牋牋牋牋?delay(150); 牋牋牋牋牋牋?duan=0; 牋牋牋 } } ?void delay(uint z) { 牋牋牋 uint x,y; 牋牋牋 for(x=z;x0;x--) ????????????? for(y=500;y0;y--); } 下载到实验板后实验现象如图3所示。 ? ? 图3 ?6个数码管依次从0-f变化 ? 2、数码管的动态显示 明白了数组编码后,现在我们正式介绍数码管的动态显示,为了更利于大家理解,我们先用前面介绍过的静态显示法写一个程序,功能为:让6个数码管间隔一秒依次显示1、2、3、4、5、6。程序如例2. 例2??????????数码管依次显示1、2、3、4、5、6 #includereg52.h #define uint unsigned int #define uchar unsigned char sbit duan=P2^6; sbit wei=P2^7; uchar num; uchar code table[]= {0x3f,0x06,0x5b,0x4f, 0x66,0

文档评论(0)

光光文挡 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档