非常着急
这是我的电路图和程序但是好像不对
//-----------------------函数声明--------------------------------------------------------
#include "reg51.h"
//-----------------------地址定义--------------------------------------------------------
#define addr_bit_1 0x01 //显示数据1的寄存器地址
#define addr_bit_2 0x02 //显示数据2的寄存器地址
#define addr_bit_3 0x03 //显示数据3的寄存器地址
#define addr_bit_4 0x04 //显示数据4的寄存器地址
#define addr_bit_5 0x05 //显示数据5的寄存器地址
#define addr_bit_6 0x06 //显示数据6的寄存器地址
#define addr_bit_7 0x07 //显示数据7的寄存器地址
#define addr_bit_8 0x08 //显示数据8的寄存器地址
#define addr_trans_mode 0x09 //译码方式寄存器的地址
#define addr_light_con 0x0a //亮度寄存器
#define addr_scan_count 0x0b //扫描界线寄存器
#define addr_close 0x0c //掉电控制寄存器
#define addr_glint_con 0x0d //闪烁控制寄存器
#define addr_show_test 0x0f //显示测试寄存器
//-----------------------管脚定义--------------------------------------------------------
sbit ps7219_pin_RST = P1^4;
sbit ps7219_pin_LOAD = P1^5;
sbit ps7219_pin_DIN = P1^6;
sbit ps7219_pin_CLK = P1^7;
//-----------------------函数声明--------------------------------------------------------
void ps7219_reset(); //复位
void ps7219_init(); //初始化控制寄存器
void ps7219_echo(unsigned char da_1,da_2,da_3,da_4,da_5,da_6,da_7,da_8);//数据寄存器
void ps7219_send_data(unsigned char addr,da); //完成一次寄存器的写操作
void ps7219_delay(void);
//--------------------------------------------------------------------------------------------------
// 函数名称: ps7219_reset
// 函数功能: 完成ps7219的复位
//--------------------------------------------------------------------------------------------------
void ps7219_reset()
{
unsigned char i;
ps7219_pin_RST=0;
for(i=0;i<125;i++)
ps7219_delay();
ps7219_pin_RST=1;
for(i=0;i<255;i++)
ps7219_delay();
ps7219_pin_RST=0;
for(i=0;i<125;i++)
ps7219_delay();
}
//--------------------------------------------------------------------------------------------------
// 函数名称: ps7219_init
// 函数功能: 通过写控制寄存器,完成ps7219的初始化
//--------------------------------------------------------------------------------------------------
void ps7219_init()
{
ps7219_reset();
ps7219_send_data(addr_scan_count,0x04);
ps7219_send_data(addr_light_con,0x0f);
ps7219_send_data(addr_trans_mode,0xff);
ps7219_send_data(addr_close,0x01);
}
//--------------------------------------------------------------------------------------------------
// 函数名称: ps7219_echo
// 入口参数: da_1,da_2,da_3,da_4,da_5,da_6,da_7,da_8 8个显示数据
// 函数功能: 送八个显示数据到显示寄存器
//--------------------------------------------------------------------------------------------------
void ps7219_echo(unsigned char da_1,da_2,da_3,da_4,da_5,da_6,da_7,da_8)
{
ps7219_send_data(addr_bit_1,da_1);
ps7219_send_data(addr_bit_2,da_2);
ps7219_send_data(addr_bit_3,da_3);
ps7219_send_data(addr_bit_4,da_4);
ps7219_send_data(addr_bit_5,da_5);
ps7219_send_data(addr_bit_6,da_6);
ps7219_send_data(addr_bit_7,da_7);
ps7219_send_data(addr_bit_8,da_8);
}
//--------------------------------------------------------------------------------------------------
// 函数名称: ps7219_send_data
// 入口参数: addr寄存器地址,da寄存器设置值
// 函数功能: 把设置值写入对应的寄存器
//--------------------------------------------------------------------------------------------------
void ps7219_send_data(unsigned char addr,da)
{
unsigned char i,byte_out;
byte_out=addr;
ps7219_pin_DIN=1;
ps7219_pin_CLK=1;
ps7219_pin_LOAD=0;
for(i=0;i<8;i++)
{
ps7219_pin_CLK=1;
ps7219_pin_DIN=(bit)(byte_out&0x80);
byte_out=byte_out<<1;
ps7219_pin_CLK=0;
ps7219_delay();
}
ps7219_pin_CLK=1;
byte_out=da;
for(i=0;i<7;i++)
{
ps7219_pin_CLK=1;
ps7219_pin_DIN=(bit)(byte_out&0x80);
byte_out=byte_out<<1;
ps7219_pin_CLK=0;
ps7219_delay();
}
ps7219_pin_CLK=1;
ps7219_pin_LOAD=1;
ps7219_pin_DIN=(bit)(byte_out&0x80);
ps7219_pin_CLK=0;
ps7219_delay();
ps7219_pin_CLK=1;
}
//--------------------------------------------------------------------------------------------------
// 函数名称: ps7219_delay
// 函数功能: 延时子程序
//--------------------------------------------------------------------------------------------------
void ps7219_delay(void)
{
unsigned char i;
for(i=0;i<125;i++)
{}
}