极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1694|回复: 0

stm32f103c8t6使用数码管显示

[复制链接]
发表于 2019-4-6 18:48:45 | 显示全部楼层 |阅读模式
买的74hc595四位数码管模块送的arduino程序不对,现修改如下:
接线:

模块                       stm32f103c8t6开发板
GND -----------------GND
VCC----------------------5V
SCLK -------------------PB9;
RCLK -------------------PB8;
DAT ---------------------PB7;

重要的一点是,先串行输入地址,然后串行输入显示的数据,完整程序如下,复制便可以运行:

unsigned char LED_0F[] =
    {// 0         1          2           3        4         5          6           7        8         9          A           b        C    d          E    F    -
            0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8e,0xbf
    };
    unsigned char LED[4];        //用于LED的4位显示缓存
    int SCLK = PB9;
    int RCLK = PB8;
    int DIO = PB7; //这里定义了那三个脚
    void setup ()
    {
      pinMode(SCLK,OUTPUT);
      pinMode(RCLK,OUTPUT);
      pinMode(DIO,OUTPUT); //让三个脚都是输出状态
      
       LED[0]=9;
            LED[1]=6;
            LED[2]=7;
            LED[3]=8;
  
   
    }
    void loop()
    {
        
           LED4_Display ();  
      
    }
   
    void LED4_Display (void)
    {
            
      unsigned char *led_table;          // 查表指针
            unsigned char i;
            //显示第1位
            led_table = LED_0F + LED[0];
            i = *led_table;
   
            LED_OUT(0x01);                        
            LED_OUT(i);               
        digitalWrite(RCLK,LOW);
        digitalWrite(RCLK,HIGH);
        
            //显示第2位
            led_table = LED_0F + LED[1];
            i = *led_table;
    LED_OUT(0x02);
            LED_OUT(i);               
                           
        digitalWrite(RCLK,LOW);
        digitalWrite(RCLK,HIGH);
            //显示第3位
            led_table = LED_0F + LED[2];
            i = *led_table;
    LED_OUT(0x04);
            LED_OUT(i);                        
                    
        digitalWrite(RCLK,LOW);
        digitalWrite(RCLK,HIGH);
            //显示第4位
            led_table = LED_0F + LED[3];
            i = *led_table;
    LED_OUT(0x08);
            LED_OUT(i);                        
                           
        digitalWrite(RCLK,LOW);
        digitalWrite(RCLK,HIGH);
        
    }
   
    void LED_OUT(unsigned char X)
    {
            unsigned char i;
            for(i=8;i>=1;i--)
            {
                    if (X&0x80)
                {
                  digitalWrite(DIO,HIGH);
                 }  
                else
                {
                  digitalWrite(DIO,LOW);
                }
                    X<<=1;
                digitalWrite(SCLK,LOW);
                digitalWrite(SCLK,HIGH);
            }
    }
1.jpg
回复

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2019-10-16 20:28 , Processed in 0.048788 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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