#include<reg51.h>
typedef unsigned int u16; ? //對系統默認數據進行重定義
typedef unsigned char u8;
//定義74HC595控制管腳
sbit SRCLK=P3^6; ? ? ? ? ? ?//移位寄存器時鐘輸入
sbit RCLK=P3^5; ? ? ? ? ? ? //存儲寄存器時鐘輸入
sbit SER=P3^4; ? ? ? ? ? ? ?//串行數據輸入
#define LEDDZ_COL_PORT ? P0 //點陣列控制端口
//函數名delay_10us,延時函數,ten_us=1時,大約延時10us,輸入 ten_us,輸出無
void delay_10us(u16 ten_us)
{
? while(ten_us--);
}
//函數名 hc595_write_data(u8 dat) 函數功能 向74HC595寫入一個字節的數據,輸入 dat數據,輸出無
void hc595_write_data(u8 dat)
{
? u8 i=0;
? for(i=0;i<8;i++)?? ?//循環8次即可將一個字節寫入寄存器中
? {
? ? SER=dat>>7; ? ? //優先傳輸一個字節中的高位
?? ?dat<<=1; ? ? ? ?//將低位移動到高位
?? ?SRCLK=0;
?? ?delay_10us(1);
?? ?SRCLK=1;
?? ?delay_10us(1); ?//移位寄存器時鐘上升沿將端口數據送入寄存器中
? }
? RCLK=1;
? delay_10us(1);
? RCLK=0; ? ? ? ? ? //存儲寄存器時鐘上升沿將前面寫入寄存器的數據輸出
}
//主函數
void main()
{
? u8 i=0;
? LEDDZ_COL_PORT=0x7f; //將LED點陣左邊第一列設置為0,即LED陰極為低電平,其余列為1,即高電平
? while(1)
? {?
? ? hc595_write_data(0x80);?? ? ?//將LED點陣上邊第一行設置為1,即LED陽極為高電平,其余行為0,即低電平
? }
}