单片机怎么控制四位数码管(讲解单片机四位数码管)

想学习单片机的同学可以关注、私信我或者在评论区回复我要入门。我们在开发板上可以看到数码管这个元器件,它的主要作用就是显示数字,下面我们就来看一下它具体的引脚功能。

单片机怎么控制四位数码管(讲解单片机四位数码管)(1)

四位数码管模块(74HC595)的使用

单片机怎么控制四位数码管(讲解单片机四位数码管)(2)

14脚:DS(SER),串行数据输入引脚

13脚:OE,输出使能控制脚,它是低电平有效,需要我们接GND

12脚:RCK,存储寄存器时钟输入引脚。上升沿时,数据从移位寄存器转存带存储寄存器。

11脚:SCK,移位寄存器时钟引脚,上升沿时,移位寄存器中的bit数据整体后移,并接受新的bit(从SER输入)。

10脚:MR,低电平时,清空移位寄存器中已有的bit数据,一般不用,接高电平即可。

9脚:串行数据出口引脚。当移位寄存器中的数据多于8bit时,会把已有的bit“挤出去”,就是从这里出去的。用于595的级联。

Qx:并行输出引脚

以下是我们要注意的几个知识点。

当芯片资料上面的引脚说有横线时,属于低电平工作。否则高电平工作;

共阳数码管如果要点亮,对应的引脚需要给1,

共阴数码管如果要点亮,对应的引脚需要给0,

本期先分享到这里,想要进群学习单片机编程的同学可以私信我,回复“我要入门”,与我们一起成长,喜欢的可以点个赞关注我们!

#include"reg51.h"unsignedcharcodeLED_0F[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf};//共阳数码管码表unsignedcharcodesmgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值//-----------------------------------------------------------------------------//函数原形定义#define uchar unsigned char#define uint unsigned int//能够使用unsigned char //unsigned int尽量使用最原始的变量类型名字voidmain(void);//主函数voidLED4_Display(void);// LED数码管显示voidLED_OUT(ucharX);// LED数码管单字节串行移位函数unsignedcharcodeLED_0F[];// LED字模表/*端口引脚定义*/sbitDIO=P1^0;//串行数据输入sbitRCLK=P1^1;//时钟脉冲信号――上升沿有效sbitSCLK=P1^2;//打入信号――――上升沿有效//-----------------------------------------------------------------------------//全局变量unsignedcharLED[8];//用于LED的8位显示缓存

//*****************************************************************************//主程序//voidmain(void){

LED[0]=9;

LED[1]=0;

LED[2]=8;

LED[3]=5;

while(1)

{

LED4_Display();

}}

// LED数码管显示函数voidLED4_Display(void){

unsignedcharcode*led_table;//查表指针unsignedchari;

//显示第1位led_table=LED_0F LED[0];

i=*led_table;

LED_OUT(i);

LED_OUT(0x01);//0x01显示在第一位

RCLK=0;

RCLK=1;

//显示第2位led_table=LED_0F LED[1];

i=*led_table;

LED_OUT(i);

LED_OUT(0x02);//0x02显示在第2位

RCLK=0;

RCLK=1;

//显示第3位led_table=LED_0F LED[2];

i=*led_table;

LED_OUT(i);

LED_OUT(0x04);//0x04显示在第3位

RCLK=0;

RCLK=1;

//显示第4位led_table=LED_0F LED[3];

i=*led_table;

LED_OUT(i);

LED_OUT(0x08);//0x08显示在第4位

RCLK=0;

RCLK=1;}

// LED数码管单字节串行移位函数voidLED_OUT(unsignedcharnumber){

unsignedchari;

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

{

if(number&0x80)

{

DIO=1;

}

else

{

DIO=0;

}

number<1;

SCLK=0;

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页