单片机/MCU论坛
直播中

jinglixixi

8年用户 1552经验值
擅长:嵌入式技术 光电显示 接口/总线/驱动 控制/MCU
私信 关注
[文章]

【BPI-Pico-RP2040 开发板】+串行数码管与电子时钟显示

在通常情况下,数码管的显示方式多采用并行的方式,其通道是编程时的灵活性比较大,但比较耗费引脚资源。为此,这里选用一款以串行方式工作的数码管模块,它是以MAX7219作为控制芯片,具有占用引脚少,无需时时扫描的特点。

该模块的外观如图1时时,它共有5个引脚,分别是:VCC、GND、SCL、CS和SDA。
image.png
图1 串行数码管

相关引脚与开发板的连接关系为:

dat----GPIO12

clk-----GPIO13

cs -----GPIO11

Max7219以串行方式发送字节数据的函数为:

void
Write_Max7219_byte(byte DATA) {



      byte i;



      digitalWrite(11, LOW); 



      for(i=8;i>=1;i--)



      {



            digitalWrite(13, LOW);



            if(DATA&0x80)



            {



                  digitalWrite(12, HIGH);



            }



            else



            {



                  digitalWrite(12, LOW);



            }



            DATA=DATA<<1;



            digitalWrite(13, HIGH);



      }



}

Max7219写处理的函数为:

void
Write_Max7219(byte address,byte dat)



{



     digitalWrite(11, LOW);



     Write_Max7219_byte(address);    //写入地址,即数码管编号



     Write_Max7219_byte(dat);        //写入数据,即数码管显示数字



     digitalWrite(11, HIGH); 



}

MAX7219的初始化函数为:

void
Init_MAX7219(void)



{



     Write_Max7219(0x09, 0xff);        //译码方式:BCD码



     Write_Max7219(0x0a, 0x03);       //亮度



     Write_Max7219(0x0b, 0x07);       //扫描界限;4个数码管显示



     Write_Max7219(0x0c, 0x01);       //掉电模式:0,普通模式:1



     Write_Max7219(0x0f, 0x01);       //显示测试:1;测试结束,正常显示:0



}

MAX7219的引脚设置函数为:

void setup() {



     pinMode(13,
OUTPUT);           // clk



     pinMode(12,
OUTPUT);           // dat



     pinMode(11, OUTPUT);           // cs 



     Init_MAX7219();



     Write_Max7219(0x0f,
0x00);



}

执行显示测试的程序为:

void loop() {



    Write_Max7219(1,8);



    Write_Max7219(2,7);



    Write_Max7219(3,6);



    Write_Max7219(4,5);



    Write_Max7219(5,4);



    Write_Max7219(6,3);



    Write_Max7219(7,2);



    Write_Max7219(8,1);



    while(1);



}

经下载,其执行效果如图3所示。
image.png
图2 驱动测试

在具备数码管显示功能的情况下,通过延时函数的使用可完成一个电子时钟的计时效果,其程序内容如下:

byte hh=12;



byte mm=30;



byte ss=0;



void loop() {



     Write_Max7219(1,ss%10);



     Write_Max7219(2,ss/10);



    Write_Max7219(3,10);



    Write_Max7219(4,mm%10);



    Write_Max7219(5,mm/10);



    Write_Max7219(6,10);



    Write_Max7219(7,hh%10);



    Write_Max7219(8,hh/10);



    delay(1000);  while(1);



    ss=ss+1;



    if(ss>=60) 



    {



        ss=0;



        mm=mm+1;



    }



    if(mm>=60) 



    {



        mm=0;



        hh=(hh+1)%24;



    }



}

经程序下载,其运行效果如图3所示,由于该数码管的显示符有限,故以“-”来替代“:”作为时间值的分隔符。
image.png
图3 电子时钟效果

在Arduino IDE的开发环境下,可轻松地在BPI-Pico-RP2040 开发板上进行采集模拟信号,它单凭一条读取语句即可解决问题。由于ADC的通道3与片内温度传感器相连,为此可以采集该通道的信号来获得温度状态。

读取片内温度并予以显示的程序如下:

float  conversion_factor = 3.3/(65535);



float  reading;



int  
 analogPin =  29;



int  
 temperature = 0;



void loop() {



   
reading = analogRead(analogPin)*conversion_factor;



   
temperature = 27 - (reading-0.706)/0.001721;



   
Write_Max7219(1, temperature%10);



   
Write_Max7219(2, temperature%100/10);



   
Write_Max7219(3,15);



   
Write_Max7219(4,15); 



   
Write_Max7219(5,15);



   
Write_Max7219(6,15);



     Write_Max7219(7,15);



     Write_Max7219(8,15); 



     delay(1000);



}

经程序下载,其运行效果如图4所示。
image.png
图4 温度检测

视频:

电子时钟

更多回帖

发帖
×
20
完善资料,
赚取积分