单片机学习——第二天(数码管显示原理)

一、数码管的显示
1.数码管的连接:公共端是独立的,显示数字的段线全部连接在一起。
2.数码管“段选”和“位选”
公共端独立则决定位选即决定哪一位数码管亮

段选决定数码管亮哪一个数字,由于数码管的段选都连在一起,则位选通过的数码管将会亮一样的数字

3.位选的具体实现
看具体单片机的电路图
课本(郭天祥版)——由U2锁存器来控制
本人使用的五一单片机——由138译码器实现
具体决定位选需要参考138译码器的真值表

4.数码管的动态扫描显示
具体代码实现(基于我的单片机)

#include
#define uchar unsigned char
#define uint unsigned int

//138编译器的申明(控制位选——查看真值表)
sbit _A=P2^2;
sbit _B=P2^3;
sbit _C=P2^4;
uchar num;

//相应段选对应的0~9数码管字符
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f
};//逗号不要掉!!!!

//延时函数
void delay_ms(uint s)
{
	uint i, j;
	for (i = s; i > 0; i--)
		for (j = 110; j > 0; j--);
}

void main()
{
	   while(1)
	   {

	   //数码管1
	   P0=0;//消影,将段选熄灭再输入位选信号
	   _A=0;_B=0;_C=0;
	   P0=table[1];
	   delay_ms(500);

	   //数码管2
	   P0=0;
	   _A=1;_B=0;_C=0;
	   P0=table[2];
	   delay_ms(500);

	   //数码管3
	   P0=0;
	   _A=0;_B=1;_C=0;
	   P0=table[3];
	   delay_ms(500);

	   //数码管4
	   P0=0;
	   _A=1;_B=1;_C=0;
	   P0=table[4];
	   delay_ms(500);

	   //数码管5
	   P0=0;
	   _A=0;_B=0;_C=1;
	   P0=table[5];
	   delay_ms(500);

	   //数码管6
	   P0=0;
	   _A=1;_B=0;_C=1;
	   P0=table[6];
	   delay_ms(500);

	   //数码管7
	   P0=0;
	   _A=0;_B=1;_C=1;
	   P0=table[7];
	   delay_ms(500);

	   //数码管8
	   P0=0;
	   _A=1;_B=1;_C=1;
	   P0=table[8];
	   delay_ms(500);


	   }



}






对上述代码的一些说明:
此代码实现的是八个数码管依次显示1~9数字,每次显示一个

注意理解代码中的消影语句

当将代码中的延时函数的实参变为1,即只延时1ms时,将看到八个数码管一起分别显示1~9数字(人眼无法分辨)

效果如下图:
单片机学习——第二天(数码管显示原理)_第1张图片

你可能感兴趣的:(单片机学习——第二天(数码管显示原理))