//ch595的数据输入
#define clk 1
#define rclk 2
#define dat 3
//延时函数
void s_ms(unsigned int t)
{
for(;t>1;t--)
{
}
}
//写74hc595函数
void sendbyte(uchar byte)
{
uchar i,tem,zz;
byte=encoder(byte); //译码
PORTA&=~(1<
{
PORTA&=~(1<
if(tem==0)
{
PORTA&=~(1<
else
{
PORTA|=(1<
byte=byte<<1;
PORTA|=(1<
PORTA|=(1<
uchar encoder(uchar num)
{
uchar code;
switch(num)
{
case 0x00:
code=0xc0;break;
case 0x01:
code=0xf9;break;
case 0x02:
code=0xa4;break;
case 0x03:
code=0xb0;break;
case 0x04:
code=0x99;break;
case 0x05:
code=0x92;break;
case 0x06:
code=0x82;break;
case 0x07:
code=0xf8;break;
case 0x08:
code=0x80;break;
case 0x09:
code=0x90;break;
}
return(code);
}
自己看看吧
595串入并出的IC,写一个位的data,来一个clk,一共8个,写完就可以了。
for(i=0;i<8;i++) //循环移入8位数据,
{
PORT_595 &=~ BIT(SCK595);
if(disdata&0x80)
{
PORT_595 |= BIT(SER595);
}
else
{
PORT_595 &=~ BIT(SER595);
}
PORT_595 |= BIT(SCK595);//上升沿把一位数据移入595
disdata <<= 1;//数据右移1位
}
595就是串行转并行的(移位)寄存器
你用数组的方式写就可以了程序不是很难,你那是位码是高三位的还是低三位的。