要点:数码管的显示原理与对应段码;数码管显示的相关思维
1.原理图接口对应:
【注】 Y6C控制公共端com,Y7C控制段码显示;
com端:公共端控制数码管数字的显示;
2.共阳数码管F3461BH(4位8段)(共阳:所有数码管的正极接在一端)![](https://i-blog.csdnimg.cn/blog_migrate/668f927926b58ba4ea07e3f8e0c0773b.jpeg)
3.例题:
新建工程,以 I/O 模式编写代码,在 CT107D 单片机综合训练平台上,实现以下功能:
1、系统上电后,关闭蜂鸣器,关闭继电器,关闭 8 个 LED 灯。
2、8 个数码管从左至右,逐个数码管依次显示“0”到“9”的 10 个数字。 即左边第 1 个数码管依次显示“0”到“9”,其他数码管熄灭;接着左边第 2 个数码管 依次显示“0”到“9”,其他数码管熄灭...依次类推,直到 8 个数码管显示完成。
3、8 个数码管同时显示“0”到“9”的 10 个数字和“A”到“F”的 6 个字母。
4、循环实现上面 2 组数码管的显示功能。
【训练要点】:数码管的工作原理,数码管显示内容的段码值计算。 在 138 译码器和 573 锁存器的控制下,共阳数码管的位置选择和内容显示。
4.代码实现:
#include "reg52.h"
unsigned char code SMG_duanma[18] = {0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,0x88,
0xc6,0xc0,0x86,0x8e,0xbf,0x7f}; //16位数,'.','-'
void Delay(unsigned int t)
{
while(t--);
while(t--);
}
void InitHC138(unsigned char N)
{
switch(N)
{
case 4: P2 = (P2 & 0x1f) | 0x80; break;
case 5: P2 = (P2 & 0x1f) | 0xa0; break;
case 6: P2 = (P2 & 0x1f) | 0xc0; break;
case 7: P2 = (P2 & 0x1f) | 0xe0; break;
case 0: P2 = (P2 & 0x1f) | 0x00; break;
}
}
void Show_SMG_Bit(unsigned char dat,unsigned char pos)
{
InitHC138(6); //数码管的位置com
P0 = 0x01 << pos; //依次点亮,用移位来操作
InitHC138(7); //数码管的数值内容
P0 = dat;
}
void SMG_Static()
{
unsigned char i,j;
for(i=0;i<8;i++)
{
for(j=0;j<=9;j++)
{
Show_SMG_Bit(SMG_duanma[j],i);
Delay(60000);
}
}
for(j=0;j<16;j++)
{
InitHC138(6); //数码管的位置com
P0 = 0xff; //全部显示
InitHC138(7); //数码管的数值内容
P0 = SMG_duanma[j] ; //
Delay(60000);
Delay(60000);
}
}
void main()
{
while(1)
{
SMG_Static();
}
}