单片机学习——共阳数码管的静态显示(自用)
内容:
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();
}