📄 7219.c
字号:
//=======================================================================================
//模块名称:7219显示子函数
//功能:用于向7219芯片送数据,驱动八位数码管显示
//使用方法:在使用该模块的函数里用 extern void Display(unsigned long int data); 进行申明
//版权说明:该模块所有权归华中科技大学电子创新基地所有
//=======================================================================================
//
//*****************定义要使用的IO引脚*****************************
#define SCK_HEX 0x0080 // IOB7 ----------- SCK
#define SDA_HEX 0x0020 // IOB5 ----------- CS/LOAD
#define CS_HEX 0x0040 // IOB6 ----------- DIN
//**************** 宏函数 **********************
#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); //看门狗
// extern unsigned long int Data;
//**************** 函数预定义 ******************************
void InitIO_7219();
void SendData_7219(unsigned int order,unsigned int data);
void senddata_7219(unsigned int data);
//=======================================================================================
//
//=======================================================================================
void Display(unsigned long int Data)
{
unsigned int b=0;
*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,0x01); // 设置亮度为1/16,最亮时为0x0f
SendData_7219(0x0d,0xff); //?????????????????
SendData_7219(0x09,0xff); // 使8个管子都用编码方式
//第七位设置为1,可以启动该位小数点
//***************传前面4位*******************************//120 000 000
// b=Data/100000000%10;
SendData_7219(8,15);
// b=Data/10000000%10;
SendData_7219(7,15);
// b=Data/1000000%10;
SendData_7219(6,15);
b=Data/10000%10;
SendData_7219(5,(b | 0x0080));
//****************传后面4位********************************//
b=Data/1000%10;
SendData_7219(4,b);
b=Data/100%10;
SendData_7219(3,b);
b=Data/10%10;
SendData_7219(2,b);
b=Data%10;
SendData_7219(1,b);
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//显示一个数字的函数
//参数:(1)在第几个数码管上显示;(2)显示什么数字
//使用说明:在使用该模块的函数里用 extern void Display_num(unsigned int location,unsigned int code); 进行申明
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
/*void Display_num(unsigned int location,unsigned int code)
{
*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,0x01); // 设置亮度为最不亮
SendData_7219(0x0d,0xff); //?????????????????
SendData_7219(0x09,0xff); // 使8个管子都用编码方式
//第七位设置为1,可以启动该位小数点
SendData_7219(location,code);
} */
//=======================================================================================
//函数名称:InitIO_7219()
//功能:对操作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;
}
//=======================================================================================
//函数名称:SendData_7219(unsigned int order,unsigned int data)
//函数功能:送数据给7219的函数
//参数:order 是命令字,表示是第几个数码管,data是数据,该位数码管应显示的数据
//=======================================================================================
void SendData_7219(unsigned int order,unsigned int data)
{
unsigned int rtemp=0,dtemp;
dtemp=data;
dtemp&=0x00ff;
rtemp=order;
rtemp<<=4;
rtemp<<=4;
rtemp|=dtemp;
senddata_7219(rtemp);
}
//=======================================================================================
//函数名称:senddata_7219(unsigned int data)
//功能:送数据给7219的函数
//参数:data 是数据
//=======================================================================================
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 + -