欢迎光临散文网 会员登陆 & 注册

单片机学习——共阳数码管的静态显示(自用)

2023-03-12 19:32 作者:huabi_fxz  | 我要投稿

内容:

8个数码管分别单独依次显示0-9的值,然后所有数码管一起同时显示0-F的值,如此往复。

基础部分:

①共阳:所有数码管阳极接到一起,单独一支数码管一端接阴极,则亮

②共阴:所以数码管阴极接到一起,单独一支数码管一端接阳极(高电平),则亮

硬件部分:

两个锁存器,一个译码器

设计思路:

①一个锁存器控制数码管位置,另一个控制数码管的内容,通过两个for循环,一个控制0-9,另一个负责选择交替输出的数码管,从而实现每个数码管单独显示0-9的值。

②激活所有的数码管,全部调到高电平,通过一个for循环1-16使得数码管输出0-F的值

代码及说明:

#include "reg52.h"


unsigned char code SMG_duanma[18]=

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,

0x82,0xf8,0x80,0x90,0x88,0x80,

0xc6,0xc0,0x86,0x8e,0xbf,0x7f};

void delay(unsigned int t)

{

while(t--);

while(t--);

}//延时函数

 void InitHC138(unsigned char n)

{

 switch(n) //选择工作的锁存器

 {

 case 4:

 P2=(P2 & 0x1f) | 0x80;   //0x1f为00011111

 break;                              //&是为了给前三项清零

 case 5:                            //|为了输入二进制数(赋值)

 P2=(P2 & 0x1f) | 0xa0;

 break;

 case 6:

 P2=(P2 & 0x1f) | 0xc0;

 break;

 case 7:

 P2=(P2 & 0x1f) | 0xe0;

 break;

 }

}

  void showSMG_Bit(unsigned char dat,unsigned pos)

  {

   InitHC138(6);   //激活控制段位的锁存器

   P0=0x01<<pos;   //激活第一位、要哪一位为1,就右移多少位

   InitHC138(7);   //激活显示数字的锁存器

   P0=dat;        //输出数字6所对应的编码值

  }

void SMG_static()

{

unsigned char i,j;

for(i=0;i<8;i++)

{

 for(j=0;j<10;j++)   //每一位从0-9显示完了j再去执行下一位数码管i

 {

 showSMG_Bit(SMG_duanma[j],i) ;

 delay(60000);

 }   //效果:八个数码管分别依次显示0-9的值

}

 for(j=0;j<10;j++)

 {

   InitHC138(6);               //激活控制段位的锁存器

   P0=0xff;                    //数码管全部显示高电平(8个端口)

   InitHC138(7);               //激活显示数字的锁存器

   P0=SMG_duanma[j];        //输出数字j所对应的编码值 }

}

void main()

{

SMG_static();

}




单片机学习——共阳数码管的静态显示(自用)的评论 (共 条)

分享到微博请遵守国家法律