数码管分类:共阴极数码管,共阳极数码管
数码管的显示方式:静态和动态
共阴级数码管:1亮0不亮
共阳极数码管:0亮1不亮
数码管的基础知识就不多讲了,下面是我写的几个数码管的程序,通过和单片机连接可以实现其相应的功能。
/*-------------------------------
2018.7.22
七段显示实验
功能让数码管从0到99不停的显示
-----------------------------*/
#include <reg51.h>
#include "delay.h"
#define DataPort P1 //宏定义,如果换接口,只需要修改这里
//#define DataPort2 P1 //宏定义,如果换接口,只需要修改这里
sbit Seg_Latch = P2^2;//段锁存
sbit Bit_Latch = P2^3;//位锁存
unsigned char Seg_Code[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char code Bit_Code[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//段码,位码
unsigned char Template[8];
void delay(unsigned int t)
{
while(t--);
}
void display(unsigned char n)
{
unsigned char i;
for(i = 0; i < n; i++)
{
DataPort = 0;//清除数据,防止重影
Seg_Latch = 1;//开门
Seg_Latch = 0;//关门
DataPort = Bit_Code[i];//送位码
Bit_Latch = 1;//开门
Bit_Latch = 0;//关门
DataPort = Template[i];//送段码
Seg_Latch = 1;//开门
Seg_Latch = 0;//关门
delay(200);
}
}
void main()
{
unsigned char count;
unsigned char j = 0;
while(1)
{
j++;
if(j == 50)
{
j = 0;
count++;
if(count == 100)
count = 0;
}
Template[0] = Seg_Code[count / 10];
Template[1] = Seg_Code[count % 10];
display(2);
}
}