高级会员
- 积分
- 762
- 金钱
- 762
- 注册时间
- 2021-5-18
- 在线时间
- 28 小时
|
这一次给大家带来的项目是课堂作业级别的51单片机数码管显示,本次的项目着重于讲解原理,让大家明白单片机的io对于外界设备的控制是如何进行的。
共阳极和共阴极数码管的差异
(1)驱动方法的差异。一个数码管内部的8颗LED是独立驱动的。如果8颗LED的正极接在一起接到VCC上(负极分别接到单片机的不同引脚),这种接法就叫共阳极。反之如果8颗LED负极接在一起然后接到GND(正极就分别接到单片机的不同引脚)就叫共阴极。两种接法都可以驱动数码管显示,但是用来显示的单片机程序不同(共阳极时单片机0是亮,共阴极时单片机的1是亮)。
(2)驱动电流需求差异。数码管(其实就是LED)如果按照共阳极接法则单片机可以直接驱动显示,如果按照共阴极接法则单片机不能直接驱动,因为单片机的IO口提供的电流大小不够驱动数码管内部的LED显示,需要外部电路来提供一个大电流驱动的芯片来解决(一般会采用74HC245等数据缓冲器)。
数码管显示原理
静态数码管:
静态数码管显示原理为:数码管内部的led灯珠和外部引脚一一对应,利用总线式编码即可实现对八个led的统一编码,并且led顺序为顺时针旋转,可以通过0-F数字的笔画确定led状态,进而得到编码。
动态数码管:
动态数码管的显示分为两个部分,段选和位选,段选就是和静态数码管的显示一样,通过控制led的亮灭来表达字符。位选则是通过选通数码管的公共端来实现数码管的亮灭。由于八位并行I/O口仅能一次性输出一个数字,所以我们需要通过高速位选,利用视觉残留来实现八位数码管一起点亮,故称之为动态数码管。
按照上述的知识点,我们可以搭建下面的原理图:
部分代码示例
代码相对于其他项目来说较为简洁,但是由于字符编码问题,导致粘贴时出现乱码,这个大家不用担心,项目工程里面都是由注释的。
void DigDisplay()
{
u8 i;
for(i=0;i<8;i++)
{
switch(i) //λѡ£¬Ñ¡ÔñμãááμÄêyÂë1ü£¬
{
case(0):
LSA=0;LSB=0;LSC=0; break;//ÏÔê¾μú0λ
case(1):
LSA=1;LSB=0;LSC=0; break;//ÏÔê¾μú1λ
case(2):
LSA=0;LSB=1;LSC=0; break;//ÏÔê¾μú2λ
case(3):
LSA=1;LSB=1;LSC=0; break;//ÏÔê¾μú3λ
case(4):
LSA=0;LSB=0;LSC=1; break;//ÏÔê¾μú4λ
case(5):
LSA=1;LSB=0;LSC=1; break;//ÏÔê¾μú5λ
case(6):
LSA=0;LSB=1;LSC=1; break;//ÏÔê¾μú6λ
case(7):
LSA=1;LSB=1;LSC=1; break;//ÏÔê¾μú7λ
}
P1=xuehao;//·¢ËíѧoÅ
delay(100); //¼ä¸ôò»¶Îê±¼äé¨Ãè
P1=0x00;//Ïûòt
}
}
原文链接:http://bj.dyrs.com.cn/story/202111/1165867
|
|