单片机实现数码管依次显示数字0到9和字母A到F

本次暂时只写了共阴极数码管的实现。

一、显示数字从0-9。

(注:图片有点问题,之前写的时候·没注意,现在下边的代码已经更正了。代码是正确的。)

锁存器。锁存器就是把当前的状态锁存起来,使CPU 送出的数据在接口电路的输出端保持一段时间锁存后状态不再发生变化,直到解除锁定。

#include "reg52.h"
#include "intrins.h"
#define DWM P0

typedef unsigned int u8;
typedef unsigned char u16;

sbit P2_2=P2^2;


u16 code Duanma[]={0x3f,0x06,0x56,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//段码



void delay(u8 t)      //延时函数
{
	while(--t);
}

void main()
{
	u8 i;
	i=0;
	while(1)
	{
		DWM =  Duanma[i];  //取段码
		P2_2 = 1;
		
		delay(200);
		j++;
		
        if(j==10)
            j=0;
	}
}

二、显示0到F的实现

这个跟上边的0到9的差别只是,数码管的段码加上了A到F的BCD码。

(注:图片有点问题,之前写的时候·没注意,现在下边的代码已经更正了。代码是正确的。) 

动态扫描。由于任一时刻只能显示一种数字,当需要多位数码管显示多位数据的时候就需要动态扫描。动态扫描时间上执行的是动态显示,由于动态速度很快,人眼分辨不出,所以看上去是静态显示。(因为这次用的是是·一位数码管,自然也没有用到动态扫描了,浅凑一下篇幅)

#include "reg52.h"
#include "intrins.h"
#define DWM P0

typedef unsigned int u8;
typedef unsigned char u16;

sbit P2_2=P2^2;


u16 code Duanma[]={0x3f,0x06,0x56,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0X77,0X7c,0X39,0X5e,0x79,0x71};
//段码



void delay(u8 t)      //延时函数
{
	while(--t);
}

void main()
{
	u8 i;
	i=0;
	while(1)
	{
		DWM =  Duanma[i];  //取段码
		P2_2 = 1;
		
		delay(200);
		j++;
		
        if(j==16)
            j=0;
	}
}

物联沃分享整理
物联沃-IOTWORD物联网 » 单片机实现数码管依次显示数字0到9和字母A到F

发表回复