金牌会员
- 积分
- 1123
- 金钱
- 1123
- 注册时间
- 2021-3-21
- 在线时间
- 172 小时
|
数码管为共阴极数码管,一个GN1638驱动8个数码管。
连接方式如图:
数码管连接方式:
根据数码管连接方式写出0~9,不带下标为{0xD7,0x14,0xCD,0x5D,0x1E,0x5B,0xDB,0x15,0xDF,0x5F}
地址部分为:
#define GN1638_DIN1_H() GPIO_SetBits(TM_DIN1_GPIO_Port, TM_DIN1_Pin); delay_ms(1)
#define GN1638_DIN1_L() GPIO_ResetBits(TM_DIN1_GPIO_Port, TM_DIN1_Pin);delay_ms(1)
以下为程序部分:
void GN1638_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //使能USART1,GPIOA时钟
// 1
GPIO_InitStructure.GPIO_Pin = TM_STB1_Pin|TM_CLK1_Pin; //
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = TM_DIN1_Pin; //
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOD,TM_STB1_Pin|TM_CLK1_Pin);
GPIO_SetBits(GPIOB,TM_DIN1_Pin);
}
void GN1638_Write_Byte(uint8_t dat)
{
u8 i=0;
GN1638_STB1_L();
for(i=0;i<8;i++)
{
GN1638_SCK1_L() ;
if(dat&0x01)
{
GN1638_DIN1_H();
}
else
{
GN1638_DIN1_L();
}
GN1638_SCK1_H();
dat=dat>>1;
}
}
//主函数调用
//根据数据手册,先设置数据命令,拉高STB,设置显示地址,写入数据,拉高STB,直到数据写完,最后显示控制命令
void main()
{
GN1638_Init();
while(1)
{
while(1)
{
GN1638_Write_Byte(0x02);//选择显示模式为6位8段
GN1638_STB1_H();
GN1638_Write_Byte(0x44);//选择固定地址
GN1638_STB1_H();
//
GN1638_Write_Byte(0xC0);//地址
GN1638_Write_Byte(0xDF);//数据8
GN1638_STB1_H();
GN1638_Write_Byte(0xC2);//地址
GN1638_Write_Byte(0x15);//数据7
GN1638_STB1_H();
GN1638_Write_Byte(0xC4);//地址
GN1638_Write_Byte(0xDB);//数据6
GN1638_STB1_H();
GN1638_Write_Byte(0xC6);//地址
GN1638_Write_Byte(0x5B);//数据5
GN1638_STB1_H();
GN1638_Write_Byte(0x8F);//辉度
GN1638_STB1_H();
}
}
|
|