📄 7219a.c
字号:
//***************************************************************************//
// IOB5 ----------- DIN// IOB6 ----------- SCK // IOB7 ----------- LOAD //
//***************************************************************************//
#define SDA_HEX 0x0020 //DIN
#define SCK_HEX 0x0040 //CLOCK
#define CS_HEX 0x0080 //LOAD
/*#define SCK_HEX 0x0004
#define SDA_HEX 0x0001
#define CS_HEX 0x0002*/
//**************** 宏函数 **********************
#define SETB_SCK() *P_IOB_DATA|=SCK_HEX
#define CLR_SCK() *P_IOB_DATA&=!SCK_HEX
#define SETB_SDA() *P_IOB_DATA|=SDA_HEX
#define CLR_SDA() *P_IOB_DATA&=!SDA_HEX
#define SETB_CS() *P_IOB_DATA|=CS_HEX
#define CLR_CS() *P_IOB_DATA&=!CS_HEX
volatile unsigned int *P_IOB_DATA =(unsigned int*)(0x7005);
volatile unsigned int *P_IOB_DIR =(unsigned int*)(0x7007);
volatile unsigned int *P_IOB_ATTRIB = (unsigned int*)(0x7008);
volatile unsigned int *P_WatchDog_Clear = (unsigned int*)(0x7012);
//**************** 函数预定义 ******************************
void InitIO_7219();
void SendData_7219(unsigned int order,unsigned int data);
void senddata_7219(unsigned int data);
void show(int data1,int data2) ;
//***************************************************************
void show(int data1,int data2)
{
unsigned int i=0,showval,b;
*P_WatchDog_Clear=0x01;
InitIO_7219();
*P_WatchDog_Clear=0x01;
SendData_7219(0x0c,0x01); // 使其7219工作正常模式
SendData_7219(0x0b,0x07); // 配置scan limit模式,使其8个管子都工作
SendData_7219(0x0a,0x05); // 设置亮度为最亮
SendData_7219(0x0d,0xff);
SendData_7219(0x09,0xff); // 使8个管子都用编码方式
//第七位设置为1,可以启动该位小数点
//***************传前面4位*******************************//
b=data1/1000;
SendData_7219(1,b);
b=data1/100%10;
SendData_7219(2,b);
b=data1/10%10;
SendData_7219(3,b);
b=data1%10;
SendData_7219(4,b);
//****************传后面4位********************************//
b=data2/1000;
SendData_7219(5,b);
b=data2/100%10;
SendData_7219(6,b);
b=data2/10%10;
SendData_7219(7,b);
b=data2%10;
SendData_7219(8,b);
}
//*********************** 对操作7219的IO口做配置 //*****************************************//
void InitIO_7219()
{
*P_IOB_DIR|=SCK_HEX;
*P_IOB_ATTRIB|=SCK_HEX;
*P_IOB_DATA|=SCK_HEX;
*P_IOB_DIR|=SDA_HEX;
*P_IOB_ATTRIB|=SDA_HEX;
*P_IOB_DATA|=SDA_HEX;
*P_IOB_DIR|=CS_HEX;
*P_IOB_ATTRIB|=CS_HEX;
*P_IOB_DATA|=CS_HEX;
}
//********************** 送数据给7219的函数 -- order 是命令字 ; data 是数据 ******************//
void SendData_7219(unsigned int order,unsigned int data)
{
unsigned int rtemp,dtemp;
dtemp=data;
dtemp&=0x00ff;
rtemp=order;
rtemp<<=4;
rtemp<<=4;
rtemp|=dtemp;
senddata_7219(rtemp);
}
void senddata_7219(unsigned int data)
{
unsigned int i; // 将CS拉低
CLR_CS();
for(i=0;i<16;i++)
{
CLR_SCK();
if(data&0x8000)
SETB_SDA();
else CLR_SDA();
SETB_SCK();
data<<=1;
}
SETB_CS();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -