#include "pbdata.h"
/*********************************************************************************************************
* 说 明: 7脚数码管驱动程序
* 作 者: 阿学
* 版 本: V1.0
* 日 期: 2021-01-05
**********************************************************************************************************/
u8 display_Tab[42]={//显示数码管用到的41个灯,最后一个无用
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,0,
};
//数字0-9
u8 Nunx_Tab[10][7]=
{
{A1,B1,C1,D1,E1,F1,NG},//0
{NG,B1,C1,NG,NG,NG,NG},//1
{A1,B1,D1,E1,G1,NG,NG},//2
{A1,B1,C1,D1,G1,NG,NG},//3
{NG,B1,C1,F1,G1,NG,NG},//4
{A1,C1,D1,NG,F1,G1,NG},//5
{A1,C1,D1,E1,F1,G1,NG},//6
{A1,B1,C1,NG,NG,NG,NG},//7
{A1,B1,C1,D1,E1,F1,G1},//8
{A1,B1,C1,D1,F1,G1,NG},//9
};
//其他
u8 Nunx2_Tab[6]={A6,B6,C6,D6,E6,F6};
//7腳都设为悬浮
/**********************************************************************************************************
* 函 数 名: PIN_Float
* 功能说明: 7腳都设为悬浮
* 形 参:无
* 返 回 值: 无
**********************************************************************************************************/
void PIN_Float(void)
{
SEG1_IN;
SEG2_IN;
SEG3_IN;
SEG4_IN;
SEG5_IN;
SEG6_IN;
SEG7_IN;
}
/**********************************************************************************************************
* 函 数 名: num_display
* 功能说明: 5位数码管数字选择
* 形 参:add:第几位,SEG_1,SEG_2,SEG_3,SEG_4,SEG_5;dat:数字,0-9
* 返 回 值: 无
**********************************************************************************************************/
void num_display(u8 add,u8 dat)
{
u8 i;
u8 seg;
for(i=0;i<7;i++)//清零
{
seg=Nunx_Tab[8][i];
display_Tab[seg+add]=0;
}
for(i=0;i<7;i++)//点亮
{
seg=Nunx_Tab[dat][i];
display_Tab[seg+add]=1;
}
}
/**********************************************************************************************************
* 函 数 名: other_display
* 功能说明: 其他显示
* 形 参:add:0-5
* 返 回 值: 无
**********************************************************************************************************/
void other_display(u8 add,u8 dar)
{
u8 seg;
seg=Nunx2_Tab[add];
if(dar==1)
{
display_Tab[seg]=1;
}
else
{
display_Tab[seg]=0;
}
}
/**********************************************************************************************************
* 函 数 名: Dynamic_scanning
* 功能说明: 数码管动态扫描
* 形 参:无
* 返 回 值: 无
**********************************************************************************************************/
u8 gScan_Rowt=0;
void Dynamic_scanning(void)
{
gScan_Rowt++;
if(gScan_Rowt>7)
{
gScan_Rowt=1;
}
PIN_Float();
if(gScan_Rowt==1)
{
SEG1_L;
if(display_Tab[A1]==1)
SEG2_H;
if(display_Tab[B1]==1)
SEG3_H;
if(display_Tab[C1]==1)
SEG4_H;
if(display_Tab[D1]==1)
SEG5_H;
if(display_Tab[E1]==1)
SEG6_H;
if(display_Tab[F1]==1)
SEG7_H;
}
else if(gScan_Rowt==2)
{
SEG2_L;
if(display_Tab[G1]==1)
SEG1_H;
if(display_Tab[A2]==1)
SEG3_H;
if(display_Tab[B2]==1)
SEG4_H;
if(display_Tab[C2]==1)
SEG5_H;
if(display_Tab[D2]==1)
SEG6_H;
if(display_Tab[E2]==1)
SEG7_H;
}
else if(gScan_Rowt==3)
{
SEG3_L;
if(display_Tab[F2]==1)
SEG1_H;
if(display_Tab[G2]==1)
SEG2_H;
if(display_Tab[A3]==1)
SEG4_H;
if(display_Tab[B3]==1)
SEG5_H;
if(display_Tab[C3]==1)
SEG6_H;
if(display_Tab[D3]==1)
SEG7_H;
}
else if(gScan_Rowt==4)
{
SEG4_L;
if(display_Tab[E3]==1)
SEG1_H;
if(display_Tab[F3]==1)
SEG2_H;
if(display_Tab[G3]==1)
SEG3_H;
if(display_Tab[A4]==1)
SEG5_H;
if(display_Tab[B4]==1)
SEG6_H;
if(display_Tab[C4]==1)
SEG7_H;
}
else if(gScan_Rowt==5)
{
SEG5_L;
if(display_Tab[D4]==1)
SEG1_H;
if(display_Tab[E4]==1)
SEG2_H;
if(display_Tab[F4]==1)
SEG3_H;
if(display_Tab[G4]==1)
SEG4_H;
if(display_Tab[A5]==1)
SEG6_H;
if(display_Tab[B5]==1)
SEG7_H;
}
else if(gScan_Rowt==6)
{
SEG6_L;
if(display_Tab[C5]==1)
SEG1_H;
if(display_Tab[D5]==1)
SEG2_H;
if(display_Tab[E5]==1)
SEG3_H;
if(display_Tab[F5]==1)
SEG4_H;
if(display_Tab[G5]==1)
SEG5_H;
}
else if(gScan_Rowt==7)
{
SEG7_L;
if(display_Tab[A6]==1)
SEG1_H;
if(display_Tab[B6]==1)
SEG2_H;
if(display_Tab[C6]==1)
SEG3_H;
if(display_Tab[D6]==1)
SEG4_H;
if(display_Tab[E6]==1)
SEG5_H;
if(display_Tab[F6]==1)
SEG6_H;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
前往页