OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4713|回复: 0

GN1638驱动8个数码管(stm32),分别显示数字

[复制链接]

32

主题

187

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1123
金钱
1123
注册时间
2021-3-21
在线时间
172 小时
发表于 2022-11-17 10:04:21 | 显示全部楼层 |阅读模式
数码管为共阴极数码管,一个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();               


}               
}
慎独
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 22:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表