- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数码管的使用方法
数码管的使用方法与发光二极管没什么区别,只是把七或八只发光二极管组合在一个模件上组成了个8字和小数点,用以显示数字。为了减少管脚,把各个发光管的其中同一个极接在一起作为共用点,因此就产生了共阳极和共阴极数码之说。共阳管就是把各个发光管的正极接在一起,而共阴管就刚好相反。见下图:
一般来说大部分的逻辑IC的吸收电流要强于输出电流。因此,大家都爱使用共阴极的数码管,因为可选的IC多些。很可惜,我的这组数码管是共阳的,因此公共端我打算用三级管来驱动。
我的最小系统板:
我用最常用的S9012,首先我得计划好电路方式,就采用最常用的动态扫描显示。先搭建最简电路,调试出需采用元件的参数。
先不接上图的R2和74HC244,将数码管一个段直接接地。调节R1,测得S9012基极电流为0.21mA时集电极也就是数码管上已有40mA,说明放大倍数足够了。这时接上R2和74HC244,调节R2使数码管电流控制在15mA,这样当8个段一起点亮时三极管上得通过120mA的电流。而基极上需要0.63mA,为了减小三极管的负荷应使三极管过饱和,,调节R1使基极电流为2mA,此时测得集电极和漏极之间的电压约0.1V。好!此时R1为2K。R2为240欧姆。确定。
接下来就是确定电路。电路的接口与AT89S51间有三组接口:段码、位码和电源。为了让AT89S51独立出来这三级接口都采用插针做接口,用排线自由连接到AT89S51的P1-P3口,电源用短路帽连接,完成后的板子见下图
反面:
说明:
然后就是写程序。先写个查询方式的吧!//六位管码管在以0.3秒的间隔在闪烁,这是采用查询方式的,比较占CUP资源/********************************************************************定义管脚:P2_0-------上横 a?????????????? P3_0-------个位????????????????? P2_1-----右上竖 b?????????????? P3_1-------十位????????????????? P2_2-----右下竖 c?????????????? P3_2-------百位????????????????? P2_3-----????? 下横 d???????????? P3_3-------千位????????????????? P2_4-----左下竖 e?????????????? P3_4-------万位????????????????? P2_5-----左上竖 f??????????????? P3_5-------十万位????????????????? P2_6-----中间横 g????????????????? P2_7-----小数点 H*********************************************************************/# include AT89X51.htypedef unsigned char uchar;uchar code bit_num[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//位码值表:0,1,2,3,4,5uchar code meg_val[]={0x03,0x9f,0x25,0x0d,0x99,0x49};//段码值表:0,1,2,3,4,5uchar code hello[]={0x03,0xe3,0xe3,0x61,0x91,0xff};????? //HELLOuchar code beybey[]={0x89,0x61,0xc1,0x89,0x61,0xc1};//beybeyuchar code ab6789[]={0xc1,0x11,0x09,0x01,0x1f,0x41};//ab6789void delay(int n);void main(void){?????? uchar i,m;?????? P2=0xff;????? //先将段码关闭?????? P3=0xff;????? //将位码关闭?????? delay(20);//等待一会?????? while(1)??????? {????????? for (m=30;m0;m--)????? //显示30次约0.3秒{??????? for(i=0;i=5;i++)?????????????? {??????????????? P2=0xff;??????????????? P3=bit_num[i];????? //输出位码到P3口?????????????
文档评论(0)