一、原理分析
二、思维导图
三、代码示例
#define TSMG 500 //定义动态显示中单个数码管点亮时长
void Delay_SMG(unsigned int t) //数码管专用延时
{
while(t--);
}
code unsigned char SMG_NoDot[] =
{
0xc0, //0
0xf9, //1
0xa4, //2
0xb0, //3
0x99, //4
0x92, //5
0x82, //6
0xf8, //7
0x80, //8
0x90, //9
0x88, //A
0x83, //b
0xc6, //C
0xa1, //d
0x86, //E
0x8e, //F
0xbf, //-
0x7f //.
};
code unsigned char SMG_Dot[] =
{
0x40, //0.
0x79, //1.
0x24, //2.
0x30, //3.
0x19, //4.
0x12, //5.
0x02, //6.
0x78, //7.
0x00, //8.
0x10 //9.
};
void DisplaySMG_All(unsigned char value) //全部数码管静态显示
{
Set_HC573(6, 0xff); //使能所有数码管
Set_HC573(7, value); //要显示的内容
}
void DisplaySMG_Bit(unsigned char pos, unsigned char value) //单个数码管动态显示
{
Set_HC573(6, 0x01<<pos); //打开数码管位选
Set_HC573(7,value); //要显示的内容
Delay_SMG(TSMG);
Set_HC573(6, 0x01<<pos); //打开数码管位选
Set_HC573(7,0xff); //消影
}
Delay_SMG(unsigned int t)
函数:- 这个函数用于实现数码管专用的延时,通过一个简单的循环等待来实现延时效果。
- 参数t表示延时的时长,函数会在循环中不断减小t直到t为0,从而实现延时。
SMG_NoDot[]
和SMG_Dot[]
数组:SMG_NoDot[]
数组存储了不带小数点的数码管显示数据,包括0-9、A-F、负号和下标点。SMG_Dot[]
数组存储了带小数点的数码管显示数据,包括0.-9.。
DisplaySMG_All(unsigned char value)
函数:- 这个函数用于实现全部数码管的静态显示。
- 首先通过
Set_HC573(6, 0xff)
使能所有数码管。 - 然后通过
Set_HC573(7, value)
设置要显示的内容,其中value为要显示的数码管数据。
DisplaySMG_Bit(unsigned char pos, unsigned char value)
函数:- 这个函数用于实现单个数码管的动态显示。
- 首先通过
Set_HC573(6, 0x01<<pos)
打开指定位置的数码管位选。 - 然后通过
Set_HC573(7, value)
设置要显示的内容,其中value为要显示的数码管数据。 - 调用
Delay_SMG(TSMG)
函数进行延时,控制数码管点亮时长。 - 再次通过
Set_HC573(6, 0x01<<pos)
打开数码管位选,确保数码管保持点亮状态。 - 最后通过
Set_HC573(7, 0xff)
消影,即将数码管内容清空,实现消隐效果。
这段代码实现了对数码管的控制,可以实现静态显示和动态显示两种效果,通过控制HC573锁存器来控制数码管的显示内容和显示方式。