//数码管显示字库
[url=home.php?mod=space&uid=592560]@near[/url] uchar table[]=
{0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};
/****** 74HC595驱动 ******/
/***********************************************************
函数名:Write_Byte()
功 能:向74HC595芯片数据寄存器写入一字节数据
参 数:byte --- 欲写入的一字节数据内容
返回值:无
/**********************************************************/
void Write_Byte(uchar byte)
{
uchar i;
for(i=0;i<8;i++)
{
if(byte & 0x01) //若数据目前位为1
{
PA_ODR |= 0x08; //写入1(14管脚)
}
else //若数据目前位为0
{
PA_ODR &= (~0x08); //写入0(14管脚)
}
PC_ODR &= (~0x08); //拉低SCK(11管脚)
PC_ODR |= 0x08; //拉高SCK(11管脚),595上升沿读入数据位
byte>>=1; //数据右移1位,为送出新数据位做准备
}
}
/***********************************************************
函数名:Latch_595()
功 能:锁存并输出595读入的数据
参 数:无
返回值:无
/**********************************************************/
void Latch_595(void)
{
PC_ODR &= (~0x10); //拉低RCK(12管脚),准备锁存脉冲信号
PC_ODR |= 0x10; //拉高RCK,送出锁存脉冲信号(上升沿有效)
PD_ODR &= (~0x10); //拉低RCK(12管脚),结束锁存脉冲信号
}
/***********************************************************
函数名:Disp_Light_Number()
功 能:数码管显示一个3位DMX512地址
参 数:number --- 欲显示的数内容
返回值:无
/**********************************************************/
void Disp_Light_Number(uchar number)
{
uchar bai,shi,ge; //定义百十个位
//取得各位数字
bai = number/100; //百位
shi = (number/10)%10; //十位
ge = number%10; //个位
//动态显示
Write_Byte(0x20);
Write_Byte(table[ge]); //显示个位
Latch_595();
Write_Byte(0x40);
Write_Byte(table[shi]); //显示十位
Latch_595();
Write_Byte(0x80);
Write_Byte(table[bai]); //显示百位
Latch_595();
}
|