wjlht 发表于 2019-4-6 18:48:45

stm32f103c8t6使用数码管显示

买的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;      //用于LED的4位显示缓存
    int SCLK = PB9;
    int RCLK = PB8;
    int DIO = PB7; //这里定义了那三个脚
    void setup ()
    {
      pinMode(SCLK,OUTPUT);
      pinMode(RCLK,OUTPUT);
      pinMode(DIO,OUTPUT); //让三个脚都是输出状态
      
       LED=9;
            LED=6;
            LED=7;
            LED=8;

   
    }
    void loop()
    {
      
         LED4_Display ();
      
    }
   
    void LED4_Display (void)
    {
            
      unsigned char *led_table;          // 查表指针
            unsigned char i;
            //显示第1位
            led_table = LED_0F + LED;
            i = *led_table;
   
            LED_OUT(0x01);                        
            LED_OUT(i);               
      digitalWrite(RCLK,LOW);
      digitalWrite(RCLK,HIGH);
      
            //显示第2位
            led_table = LED_0F + LED;
            i = *led_table;
    LED_OUT(0x02);
            LED_OUT(i);               
                           
      digitalWrite(RCLK,LOW);
      digitalWrite(RCLK,HIGH);
            //显示第3位
            led_table = LED_0F + LED;
            i = *led_table;
    LED_OUT(0x04);
            LED_OUT(i);                        
                  
      digitalWrite(RCLK,LOW);
      digitalWrite(RCLK,HIGH);
            //显示第4位
            led_table = LED_0F + LED;
            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]
查看完整版本: stm32f103c8t6使用数码管显示