您的位置:首页 > 其它

数码管——8段共阴极数码管

2016-09-14 21:17 162 查看
在德飞莱的系统中,数码管的解法是这样接的:



段锁存器:使能端(低电平有效)

c = 0时,锁存;

c = 1时,传送数据;

段选和位选的操作:

sbit bit_sel = P2^0;//位选
sbit seg_sel = P2^1;//段选

unsigned char segdata[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//共阴极0~f
unsigned char coode[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//控制位选


先操作段码,再作位码。

//消重影
SEGPORT = 0xff;
bit_sel = 1;
bit_sel = 0;

SEGPORT = 0x0;
seg_sel = 1;
seg_sel = 0;

//对数字的刷新
SEGPORT = coode[i];
bit_sel = 1;
bit_sel = 0;

SEGPORT = outdata[i];
seg_sel = 1;
seg_sel = 0;


在没有中断的程序的情况下,写入以下程序,实现数码管计数:

#include <reg52.h>
#include "./delay/delay.h"

#define SEGPORT P1

sbit bit_sel = P2^0;
sbit seg_sel = P2^1;

unsigned char segdata[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char coode[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char outdata[8] = {0x3f,0x3f,0x40,0x3f,0x3f,0x40,0x3f,0x3f};

unsigned char second = 0;
unsigned char minute = 0;
unsigned char hour = 0;

void hour_seg()
{

hour++;
while(hour > 23)
{
hour = 0;
}

outdata[0] = segdata[hour/10];
outdata[1] = segdata[hour%10];
}

void minute_seg()
{

minute++;
while(minute > 59)
{
minute = 0;
hour_seg();
}

outdata[3] = segdata[minute/10];
outdata[4] = segdata[minute%10];
}

void second_seg()
{
second++;
while(second > 59)
{
second = 0;
minute_seg();
}

outdata[6] = segdata[second/10];
outdata[7] = segdata[second%10];

}

void main()
{
unsigned char i,j;

while(1)
{
for(j = 0;j<120;j++)
{
for(i = 0; i < 8; i++)
{
SEGPORT = 0xff;
bit_sel = 1;
bit_sel = 0;

SEGPORT = 0x0;
seg_sel = 1;
seg_sel = 0;

SEGPORT = coode[i];
bit_sel = 1;
bit_sel = 0;

SEGPORT = outdata[i];
seg_sel = 1;
seg_sel = 0;

delay_ms(1);

}
}
second_seg();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数码管 单片机