【机智云Gokit套件试用体验】+驱动7219
练习过它的功能也想用机智云扩展一下端口
近期也是看了一下网络之中,看觉得这个7219很有意思
一起学习嘻嘻嘻
首先介绍一下MAX7219
MAX7219/MAX7221是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。 只有一个外部寄存器用来设置各个LED的段电流。 MAX7221与SPI™、 QSPI™以及 MICROWIRE™相兼容,同时它有限制回转电流的段驱动来减少EMI(电磁干扰)。 一个方便的四线串行接口可以联接所有通用的微处理器。 每个数据可以寻址在更新时不需要改写所有的显示。MAX7219/MAX7221同样允许用户对每一个数据选择编码或者不编码。 整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。 在应用时要求3V的操作电压或segment blinking,可以查阅MAX6951数据资料。
制造商零件编号: MAX7219ENG+
制造商: Maxim IC
应用领域:条线图显示, 仪表面板, 工业控制,LED矩阵显示
#define reg_decode 0x09
#define reg_intensity 0x0a
#define reg_scan_limit 0x0b
#define reg_shutdown 0x0c
#define reg_display_test 0x0f
#define dataa_h GPIO_SetBits(GPIOB,GPIO_Pin_7)
#define dataa_l GPIO_ResetBits(GPIOB,GPIO_Pin_7)
#define load_h GPIO_SetBits(GPIOB,GPIO_Pin_6)
#define load_l GPIO_ResetBits(GPIOB,GPIO_Pin_6)
#define clk_h GPIO_SetBits(GPIOB,GPIO_Pin_11)
#define clk_l GPIO_ResetBits(GPIOB,GPIO_Pin_11)
#define uchar unsigned char
/*************定义显示常数表格************/
static const struct{
char asci;
char segs;
}font=
{{\' \',0x00},{\'0\',0x7e},{\'1\',0x30},{\'2\',0x6d},{\'3\',0x79},{\'4\',0x33},{\'5\',0x5b},{\'6\',0x5f},{\'7\',0x70},{\'8\',0x7f},{\'9\',0x7b},
{\'A\',0x77},{\'b\',0x1f},{\'C\',0x4e},{\'d\',0x3d},{\'E\',0x4f},{\'F\',0x47},{\'H\',0x37},{\'L\',0x0e},{\'r\',0x46},{\'P\',0x67}
};//5
long int k;
void GPIO_Init1(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
/*****************发送一字节串行数据******************/
static void Sendbyte(uchar dataout)
{char i;
load_l;
for(k=0;k<10;k++);
for(i=8;i>0;i--)
{
uchar mask=1<<(i-1);
clk_l;
for(k=0;k<10;k++);
if(dataout&mask)
dataa_h;
else
dataa_l;
for(k=0;k<10;k++);
clk_h;
for(k=0;k<10;k++);
}
}
/*********写入数据**********/
static void Write(uchar reg_number,uchar dataout)
{
load_l;
for(k=0;k<10;k++);
Sendbyte(reg_number);
Sendbyte(dataout);
load_h;
for(k=0;k<10;k++);
}
/***********查段码表将显示字符转换为显示段码************/
static uchar Lookupcode(char character)
{char i;
for(i=0;i<21;i++)
{if(character==font.asci)
{return font.segs;}
}
return (0);
}
void display(char digit,char character)
{
Write(digit,Lookupcode(character));
}
/**********初始化************/
void init(void)
{char i;
dataa_h;
load_h;
clk_h;
Write(reg_scan_limit,3);
Write(reg_decode,0x00);
Write(reg_shutdown,1); /*结束停机测试,正常工作*/
Write(reg_display_test,0); /*结束显示测试,正常工作*/
for(i=1;i<=8;i++)
{Write(i,0x00);
} /*关闭全部显示器*/
}
int main(void)
{
long int i;
unsigned char k=0;
char brightness;
SystemInit();
// UARTx_Init();
// Printf_SystemRccClocks();
// RTC_Init();
//Hal_Init();
// McuStatusInit();
GPIO_Init1();
init();
Write(reg_shutdown,1);
Write(reg_display_test,0);
brightness=bright&0x0f;
Write(reg_intensity,brightness);
while(1)
{
init();
Write(reg_shutdown,1);
Write(reg_display_test,0);
brightness=bright&0x0f;
Write(reg_intensity,brightness);
display(0x01,\'H\');
display(0x02,\'0\');
display(0x03,\'P\');
display(0x04,\'E\');
for(i=0;i<100000;i++);
}
}
练习过它的功能也想用机智云扩展一下端口
近期也是看了一下网络之中,看觉得这个7219很有意思
一起学习嘻嘻嘻
首先介绍一下MAX7219
MAX7219/MAX7221是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。 只有一个外部寄存器用来设置各个LED的段电流。 MAX7221与SPI™、 QSPI™以及 MICROWIRE™相兼容,同时它有限制回转电流的段驱动来减少EMI(电磁干扰)。 一个方便的四线串行接口可以联接所有通用的微处理器。 每个数据可以寻址在更新时不需要改写所有的显示。MAX7219/MAX7221同样允许用户对每一个数据选择编码或者不编码。 整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。 在应用时要求3V的操作电压或segment blinking,可以查阅MAX6951数据资料。
制造商零件编号: MAX7219ENG+
制造商: Maxim IC
应用领域:条线图显示, 仪表面板, 工业控制,LED矩阵显示
#define reg_decode 0x09
#define reg_intensity 0x0a
#define reg_scan_limit 0x0b
#define reg_shutdown 0x0c
#define reg_display_test 0x0f
#define dataa_h GPIO_SetBits(GPIOB,GPIO_Pin_7)
#define dataa_l GPIO_ResetBits(GPIOB,GPIO_Pin_7)
#define load_h GPIO_SetBits(GPIOB,GPIO_Pin_6)
#define load_l GPIO_ResetBits(GPIOB,GPIO_Pin_6)
#define clk_h GPIO_SetBits(GPIOB,GPIO_Pin_11)
#define clk_l GPIO_ResetBits(GPIOB,GPIO_Pin_11)
#define uchar unsigned char
/*************定义显示常数表格************/
static const struct{
char asci;
char segs;
}font=
{{\' \',0x00},{\'0\',0x7e},{\'1\',0x30},{\'2\',0x6d},{\'3\',0x79},{\'4\',0x33},{\'5\',0x5b},{\'6\',0x5f},{\'7\',0x70},{\'8\',0x7f},{\'9\',0x7b},
{\'A\',0x77},{\'b\',0x1f},{\'C\',0x4e},{\'d\',0x3d},{\'E\',0x4f},{\'F\',0x47},{\'H\',0x37},{\'L\',0x0e},{\'r\',0x46},{\'P\',0x67}
};//5
long int k;
void GPIO_Init1(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
/*****************发送一字节串行数据******************/
static void Sendbyte(uchar dataout)
{char i;
load_l;
for(k=0;k<10;k++);
for(i=8;i>0;i--)
{
uchar mask=1<<(i-1);
clk_l;
for(k=0;k<10;k++);
if(dataout&mask)
dataa_h;
else
dataa_l;
for(k=0;k<10;k++);
clk_h;
for(k=0;k<10;k++);
}
}
/*********写入数据**********/
static void Write(uchar reg_number,uchar dataout)
{
load_l;
for(k=0;k<10;k++);
Sendbyte(reg_number);
Sendbyte(dataout);
load_h;
for(k=0;k<10;k++);
}
/***********查段码表将显示字符转换为显示段码************/
static uchar Lookupcode(char character)
{char i;
for(i=0;i<21;i++)
{if(character==font.asci)
{return font.segs;}
}
return (0);
}
void display(char digit,char character)
{
Write(digit,Lookupcode(character));
}
/**********初始化************/
void init(void)
{char i;
dataa_h;
load_h;
clk_h;
Write(reg_scan_limit,3);
Write(reg_decode,0x00);
Write(reg_shutdown,1); /*结束停机测试,正常工作*/
Write(reg_display_test,0); /*结束显示测试,正常工作*/
for(i=1;i<=8;i++)
{Write(i,0x00);
} /*关闭全部显示器*/
}
int main(void)
{
long int i;
unsigned char k=0;
char brightness;
SystemInit();
// UARTx_Init();
// Printf_SystemRccClocks();
// RTC_Init();
//Hal_Init();
// McuStatusInit();
GPIO_Init1();
init();
Write(reg_shutdown,1);
Write(reg_display_test,0);
brightness=bright&0x0f;
Write(reg_intensity,brightness);
while(1)
{
init();
Write(reg_shutdown,1);
Write(reg_display_test,0);
brightness=bright&0x0f;
Write(reg_intensity,brightness);
display(0x01,\'H\');
display(0x02,\'0\');
display(0x03,\'P\');
display(0x04,\'E\');
for(i=0;i<100000;i++);
}
}