单片机怎么控制四位数码管(讲解单片机四位数码管)
想学习单片机的同学可以关注、私信我或者在评论区回复我要入门。我们在开发板上可以看到数码管这个元器件,它的主要作用就是显示数字,下面我们就来看一下它具体的引脚功能。
四位数码管模块(74HC595)的使用
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