首先来说一说74hc595这个芯片怎么打表如图所示,详情见Excel表部分代码 (注:由于时间在这里只例举一部分)
#include<reg52.h>
#include<intrins.h>
typedef unsigned char u8;
sbit ser = P3^4;// ser rclk srclk 是74hc595芯片定义的参数
sbit rclk = P3^5;
sbit srclk = P3^6;
//由于需要自己算点阵的码表 这里就列举一部分
u8 ledduan[7][8] = {0x00,0x3e,0x50,0x90,0x50,0x3e,0x00,0x00,//A
0x00,0xfe,0x92,0x92,0x92,0x7c,0x00,0x00,//B
0x00,0x3c,0x42,0x81,0x81,0x81,0x00,0x00,//C
0x00,0xff,0x81,0x81,0x42,0x3c,0x00,0x00,//D
0x00,0xff,0x89,0x89,0x89,0x89,0x00,0x00,//E
0x00,0xff,0x88,0x88,0x88,0x88,0x00,0x00,//F
0x00,0x7e,0x82,0x8a,0x8a,0x8f,0x00,0x00,};//G
u8 ledwei[] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
//void delay1ms(void) //误差 0us
//{
// unsigned char a,b,c;
// for(c=1;c>0;c--)
// for(b=142;b>0;b--)
// for(a=2;a>0;a--);
//}
void Hc595(u8 dat){
u8 i;
rclk = 0;
srclk = 0;
for(i = 0;i <8;i++){
ser = dat>>7;
dat <<= 1;
srclk = 1;
_nop_();
_nop_();
srclk = 0;
}
rclk = 1;
_nop_();
_nop_();
rclk = 0;
}
|