• 树莓派进阶之路 (016)


    模块图片,4位共阳极数码管.

    我们使用树莓派wiringPi的库来通过74HC595驱动4位数码管:

    C 代码如下: 

     1 #include <wiringPi.h>
     2 #include <stdio.h>
     3 #include <stdlib.h>
     4 #include <stdint.h>
     5 #include <time.h>
     6 #define SCLK 12
     7 #define RCLK 13
     8 #define DIO 14
     9 unsigned int code_char[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
    10 unsigned char code_segbit[]={0x01,0x02,0x04,0x08};
    11 int pins[3]={SCLK,RCLK,DIO};
    12 int init(){
    13     int i=0;
    14     for(i=0;i<3;i++){
    15     pinMode(pins[i],OUTPUT);
    16     digitalWrite(pins[i],LOW);
    17     }
    18 }
    19 
    20 int destroy(){
    21     int i=0;
    22     for(i=0;i<3;i++){
    23     digitalWrite(pins[i],LOW);
    24     pinMode(pins[i],INPUT);
    25     }
    26 }
    27 
    28 void loop(){
    29     time_t rawtime;
    30     time(&rawtime);
    31     struct tm *timeinfo;
    32     timeinfo=localtime(&rawtime);
    33     digitalWrite(RCLK,LOW);
    34     if(timeinfo->tm_min>=10)shiftOut(DIO,SCLK,1,code_char[timeinfo->tm_min%10]);//character
    35     else shiftOut(DIO,SCLK,1,code_char[timeinfo->tm_min]);
    36     shiftOut(DIO,SCLK,1,code_segbit[0]);//bit
    37     digitalWrite(RCLK,HIGH);
    38     digitalWrite(RCLK,LOW);
    39     if(timeinfo->tm_min>=10)shiftOut(DIO,SCLK,1,code_char[timeinfo->tm_min/10]);//character
    40     else shiftOut(DIO,SCLK,1,code_char[0]);
    41     shiftOut(DIO,SCLK,1,code_segbit[1]);//bit
    42     digitalWrite(RCLK,HIGH);
    43     digitalWrite(RCLK,LOW);
    44     if(timeinfo->tm_hour>=10)shiftOut(DIO,SCLK,1,code_char[timeinfo->tm_hour%10]);//character
    45     else shiftOut(DIO,SCLK,1,code_char[timeinfo->tm_hour]);
    46     shiftOut(DIO,SCLK,1,code_segbit[2]);//bit
    47     digitalWrite(RCLK,HIGH);
    48     digitalWrite(RCLK,LOW);
    49     if(timeinfo->tm_hour>=10)shiftOut(DIO,SCLK,1,code_char[timeinfo->tm_hour/10]);//character
    50     else shiftOut(DIO,SCLK,1,code_char[0]);
    51     shiftOut(DIO,SCLK,1,code_segbit[3]);//bit
    52     digitalWrite(RCLK,HIGH);
    53     //printf("%d %d	%d %d %d %d
    ",
    54     // timeinfo->tm_hour,timeinfo->tm_min,
    55     // timeinfo->tm_hour/10,timeinfo->tm_hour%10,
    56     // timeinfo->tm_min/10,timeinfo->tm_min%10);
    57     delayMicroseconds(10);
    58 }
    59 
    60 int main(void){
    61     if(wiringPiSetup()==-1) //wiringPiSetupGpio==BCM
    62         exit(1);
    63     init();
    64     while(1) {
    65         loop();
    66     }
    67     destroy();
    68     return 0;
    69 }

    74HC595.h

     1 /*
     2  * wiringShift.h:
     3  *    Emulate some of the Arduino wiring functionality. 
     4  *
     5  * Copyright (c) 2009-2012 Gordon Henderson.
     6  ***********************************************************************
     7  * This file is part of wiringPi:
     8  *    https://projects.drogon.net/raspberry-pi/wiringpi/
     9  *
    10  *    wiringPi is free software: you can redistribute it and/or modify
    11  *    it under the terms of the GNU Lesser General Public License as published by
    12  *    the Free Software Foundation, either version 3 of the License, or
    13  *    (at your option) any later version.
    14  *
    15  *    wiringPi is distributed in the hope that it will be useful,
    16  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
    17  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    18  *    GNU Lesser General Public License for more details.
    19  *
    20  *    You should have received a copy of the GNU Lesser General Public License
    21  *    along with wiringPi.  If not, see <http://www.gnu.org/licenses/>.
    22  ***********************************************************************
    23  */
    24 
    25 #define    LSBFIRST    0
    26 #define    MSBFIRST    1
    27 
    28 #ifndef    _STDINT_H
    29 # include <stdint.h>
    30 #endif
    31 
    32 #ifdef __cplusplus
    33 extern "C" {
    34 #endif
    35 
    36 extern uint8_t shiftIn      (uint8_t dPin, uint8_t cPin, uint8_t order) ;
    37 extern void    shiftOut     (uint8_t dPin, uint8_t cPin, uint8_t order, uint8_t val) ;
    38 
    39 #ifdef __cplusplus
    40 }
    41 #endif

    74HC595.C

     1 /*
     2  * wiringShift.c:
     3  *    Emulate some of the Arduino wiring functionality. 
     4  *
     5  * Copyright (c) 2009-2012 Gordon Henderson.
     6  ***********************************************************************
     7  * This file is part of wiringPi:
     8  *    https://projects.drogon.net/raspberry-pi/wiringpi/
     9  *
    10  *    wiringPi is free software: you can redistribute it and/or modify
    11  *    it under the terms of the GNU Lesser General Public License as published by
    12  *    the Free Software Foundation, either version 3 of the License, or
    13  *    (at your option) any later version.
    14  *
    15  *    wiringPi is distributed in the hope that it will be useful,
    16  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
    17  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    18  *    GNU Lesser General Public License for more details.
    19  *
    20  *    You should have received a copy of the GNU Lesser General Public License
    21  *    along with wiringPi.  If not, see <http://www.gnu.org/licenses/>.
    22  ***********************************************************************
    23  */
    24 
    25 #include <stdint.h>
    26 #include "wiringPi.h"
    27 #include "wiringShift.h"
    28 
    29 /*
    30  * shiftIn:
    31  *    Shift data in from a clocked source
    32  *********************************************************************************
    33  */
    34 
    35 uint8_t shiftIn (uint8_t dPin, uint8_t cPin, uint8_t order)
    36 {
    37   uint8_t value = 0 ;
    38   int8_t  i ;
    39  
    40   if (order == MSBFIRST)
    41     for (i = 7 ; i >= 0 ; --i)
    42     {
    43       digitalWrite (cPin, HIGH) ;
    44       value |= digitalRead (dPin) << i ;
    45       digitalWrite (cPin, LOW) ;
    46     }
    47   else
    48     for (i = 0 ; i < 8 ; ++i)
    49     {
    50       digitalWrite (cPin, HIGH) ;
    51       value |= digitalRead (dPin) << i ;
    52       digitalWrite (cPin, LOW) ;
    53     }
    54 
    55   return value;
    56 }
    57 
    58 /*
    59  * shiftOut:
    60  *    Shift data out to a clocked source
    61  *********************************************************************************
    62  */
    63 void shiftOut (uint8_t dPin, uint8_t cPin, uint8_t order, uint8_t val)
    64 {
    65   int8_t i;
    66   if (order == MSBFIRST)
    67     for (i = 7 ; i >= 0 ; --i)
    68     {
    69       digitalWrite (dPin, val & (1 << i)) ;
    70       digitalWrite (cPin, HIGH) ;
    71       digitalWrite (cPin, LOW) ;
    72     }
    73   else
    74     for (i = 0 ; i < 8 ; ++i)
    75     {
    76       digitalWrite (dPin, val & (1 << i)) ;
    77       digitalWrite (cPin, HIGH) ;
    78       digitalWrite (cPin, LOW) ;
    79     }
    80 }
  • 相关阅读:
    资源网站
    远程服务SSH
    Samba服务配置
    练习raid5
    raid(0、1)
    NFS服务器配置(windows访问)
    LVM磁盘阵列
    ISCSI服务器配置
    Zibbix监控
    MySQL Replication配置
  • 原文地址:https://www.cnblogs.com/jikexianfeng/p/7095875.html
Copyright © 2020-2023  润新知