ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

共阴极动态数码管实验

共阴极动态数码管实验

1.原理图

74HC245是用来增大高电平的驱动能力;74HC138是一个38译码器。

2.如何显示数字

写代码前定要先判断数码管是共阴极还是共阳极(用万用表蜂鸣档测,万用表的正负极连接正确后数码管的一段会亮)

我的是共阴极,片选段连在一起,由38译码器输出的八个低电平引脚,拉低来进行片选


因此数码管显示数字 0 1 2 3 4 5 6 7 8 9 a b c d e f 对应

0x3f 0x06 0x5b 0x4f 0x66 0x6d 0x7d 0x07 0x7f 0x6f 0x77 0x7c 0x39 0x5e 0x79 0x71

3.代码

#include <REGX52.H> #include <INTRINS.H> unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //数码管显示数字0~9对应的段选 就是p0的八个管脚 void Delayms(int ms){ //@11.0592MHz while(ms--){ unsigned char i, j; _nop_(); i = 2; j = 199; do { while (--j); } while (--i); } } //……段选清零 片选 段选…… void Nixie(unsigned char Chip,Number) { P0=0x00; //段码清0,消影 switch(Chip) //位码输出 { case 1:P2_4=1;P2_3=1;P2_2=1;break; case 2:P2_4=1;P2_3=1;P2_2=0;break; case 3:P2_4=1;P2_3=0;P2_2=1;break; case 4:P2_4=1;P2_3=0;P2_2=0;break; case 5:P2_4=0;P2_3=1;P2_2=1;break; case 6:P2_4=0;P2_3=1;P2_2=0;break; case 7:P2_4=0;P2_3=0;P2_2=1;break; case 8:P2_4=0;P2_3=0;P2_2=0;break; } P0=NixieTable[Number]; //段码输出 Delayms(1);//稳定显示 } void main() { while(1) { Nixie(1,1); //在数码管的第1位置显示1 Nixie(2,2); //在数码管的第2位置显示2 Nixie(3,3); //在数码管的第3位置显示3 } }

注意:

1.第21行不可以去掉,虽然去掉显示效果没任何区别。

…… 片选段选 片选段选……如果不清除的话,前一次段选的数字会出现在第二次片选上(片选没来的及选中,段就改变了,直接到下一段),残影会随着延时时间加长而会不明显。但延时时间过长的话就是动态显示了。(可以通过修改34行,Delayms(1);为若干个_nop_();指令,从而延时不同时间进行试验)。

2.第34行去掉值显示正常,但是显示亮度会偏低。原理应该类似pwm波,四个数码管快速切换着亮肯定没有只亮一个数码管亮,因为四个切换亮,通电时常占总时长的1/4。因此要延迟一段时间保持一段时间亮度,再切换。

3.编程时变量用之前,注意提前清理

返回列表