首先來說一說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;
}
|