|
发表于 2008-3-8 09:50:01
|
显示全部楼层
发一小段SM1628代码:
/*******************************************************************
函数描述:写入一个字节到SM1628
函数原型: void wbyte_1628()
*******************************************************************/
write_1628(uchar data)
{
uchar k;
STB=0;
nop;
for(k=8;k>0;k--)
{
CLK=0;
if(data&0x01)
DIO=1;
else
DIO=0;
nop;nop;
CLK=1;
data=data>>1;
}
}
/*******************************************************************
函数描述:读取SM1628
函数原型: void read_1628()
*******************************************************************/
read_1628()
{
uchar k,data;
STB=0;
TRISB=0b00000001;
nop;nop;
for(k=8;k>1;k--) //for(k=8;k>0;k--)陷入
{
CLK=0;
nop;nop;nop;
if(DIO)
data=data|0x80;
else
data=data&0x7f;
data=data>>1;
CLK=1;
nop;nop;nop;nop;nop;nop;
}
nop;nop;nop;nop;
TRISB=0x00;
return(data);
}
/*******************************************************************
数码管显示函数
函数原型: void display();
Function: display progame
*******************************************************************/
display(uint data)
{
uchar BCD[4];
BCD[0]=0;
BCD[1]=0;
BCD[2]=0;
BCD[3]=0;
///////////////////
while(data>=1000)
{
data=data-1000;
BCD[3]++;
}
while(data>=100)
{
data=data-100;
BCD[2]++;
}
while(data>=10)
{
data=data-10;
BCD[1]++;
}
BCD[0]=data;
///////////////////
LED4=table[BCD[0]];
LED3=table[BCD[1]];
LED2=table[BCD[2]];
LED1=table[BCD[3]];
//===========================
// 设置显示模式
//===========================
write_1628(0b00000011); //7位,10段
STB=1;
nop;nop;nop;nop;
//===========================
// 设置数据
//===========================
write_1628(0b01000000);
STB=1;
nop;nop;nop;nop;
//===========================
// 设置地址
//===========================
write_1628(0b11000000);
//===========================
// 传输显示数据
//===========================
write_1628(LED4);//第四位数码管
write_1628(0xff);//
write_1628(LED1);//第一位数码管
write_1628(0xff);//
write_1628(LED2);//第二位数码管
write_1628(0xff);//
write_1628(LED3);//第三位数码管
write_1628(0xff);
write_1628(LED5);//LED灯
STB=1;
nop;nop;nop;nop;
//===========================
// 控制显示
//===========================
if(!flag)
write_1628(0b10001011);//后3位亮度调节
else
write_1628(0b10000000);//关显示
//write_1628(0b10001011);//后3位亮度调节
STB=1;
}
/******************************************************************* |
|