欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

蓝桥单片机_03共阳数码管的静态显示

程序员文章站 2022-06-08 20:56:23
...

1. 题目
蓝桥单片机_03共阳数码管的静态显示
2. 有关电路图及分析
蓝桥单片机_03共阳数码管的静态显示

蓝桥单片机_03共阳数码管的静态显示
Y6C通过译码器控制com1-8; Y7C通过译码器控制a-g+dp段码。
1-F及.:0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f。

3. 代码

#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
};	//0-15和.-

void Delay(unsigned int t)
{
	while(t--);
	while(t--);
}

void InitHC138(unsigned char n)
{
	switch(n){
		case 4:
			P2=(P2&0x1f)|0x80;
			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 char pos)
{
	InitHC138(6);
	P0=0x01<<pos;	//数码管的位置
	InitHC138(7);
	P0=dat;			//数码管的内容
}

void SMG_Static()
{
	unsigned char i,j;
	for(i=0;i<8;i++){	//8个数码管依次显示
		for(j=0;j<10;j++){	//第一个数码管1-9显示	
			ShowSMG_Bit(SMG_duanma[j],i);
			Delay(60000);
			Delay(60000);
		}
		Delay(60000);
		Delay(60000);
	}	//每个数码管0-9的显示
	for(j=0;j<16;j++){
		InitHC138(6);
		P0=0xff;	//打开所有的com端
		InitHC138(7);
		P0=SMG_duanma[j];	//0-F显示
		Delay(60000);
		Delay(60000);
	}	//所有数码管0-15的显示
		
}

void main()
{
	while(1){
		SMG_Static();
	}
}

4. 部分代码解释

case 4:
			P2=(P2&0x1f)|0x80;
			break;

4是100,即P2端的567端为100,与00011111相与,再与10000000相或;
相与是让P2端除567端外不变,567端先取0;
相或是让P2端除567端外不变,567端取100;

同理:5是101,567端取101,相或的就是10100000为a0;
6是110,567端取110,相或的就是11000000为c0;
7是111,567端取111,相或的就是11100000为e0;

5.注

本博客是学习完B站某视频后所写,如有错误,欢迎指正;如有侵权,删除。
学习网址:https://www.bilibili.com/video/av41275873?p=4。

相关标签: 单片机学习