蓝桥杯CT107D单片机数码管静态显示

数码管基础知识
CT107D单片机综合实训平台上使用的数码管是F3461BH,告诉我们数码管的类型。倒数第2个字母是“B”,说明这个数码管是共阳类型的,如果该字母为“A”则为共阴类型。
蓝桥杯CT107D单片机数码管静态显示_第1张图片
F3461BH是一个4位8段的数码管,其中a、b、c、d、e、f、g、dp引脚分别对应8个段码,该8个引脚通过74HC573锁存器与单片机的P0端口相连。另外有com1~com4四个公共控制脚,该应用为高电平则使能对应位的数码管。两个F3461BH一共有8个com控制引脚,也是通过74HC573锁存器与单片机的P0端口相连的。
蓝桥杯CT107D单片机数码管静态显示_第2张图片
控制Y7C口,向P0口送数据
控制Y6C口选择使用哪个数码管,一个是8个
找到Y6C和Y7C
蓝桥杯CT107D单片机数码管静态显示_第3张图片

void display1(yi, er)
{
	 //开位选(Y6C)
		P2=0XC0;
		P0=0X01;
		//开段选(Y7C)
		P2=0XFF;
		P0=tab[yi];
		Delay1ms(1);
	
		//开位选
		P2=0XC0;
		P0=0X02;
		//开段选
		P2=0XFF;
		P0=dottab[er];
		Delay1ms(1);		
}

74HC138使用
蓝桥杯CT107D单片机数码管静态显示_第4张图片

/*代码实现显示12345678,分组显示。可以根据需要显示字符表里的数字
加了code的数组是把这个数组保存到程序区,程序运行过程中是无法修改的,一般用来保存那些常数、或者编码数据,比如数码管的数字编码等;没有加code的数组是在RAM中的,可以动态修改里面的数据。
加code是将数据保存在程序存储器中,否则就保存在RAM中,单片机的RAM比较小,因此很宝贵,大型固定数组(如少量汉字字库或简单图片)一定不要占用RAM 空间,那样很容易造成内存不足提示
但程序存储器中的数据不可以在运行中修改,因此所存数据属于常量
*/
#include 
#define uchar unsigned char
#define uint unsigned int
void allinit();
void delayms(uchar z);
void display1(uchar yi,uchar er);
void display2(uchar san,uchar si);
void display3(uchar wu,uchar liu);
void display4(uchar qi,uchar ba);
/*主函数所调用子函数,若写在主函数之前可以不用声明(默认为已经声明),写在主函数之后必须声明*/

uchar code tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
//1 2 3 4 5 6 7 8 9 - 灭
uchar code dottab[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
//带小数点的数字 0. 1. 2. 3. 4. 5. 6. 7. 8. 9.
uchar yi,er,san,si,wu,liu,qi,ba;


void delayms(uchar z)		//@12.000MHz
{
	unsigned char i, j;
	uchar k;
  for(k=z;k>0;k--)
	{
	i = 12;
	j = 169;
	do
	{
		while (--j);
	} while (--i);
	
	}
	
}


	void display1(uchar yi,uchar er)
	{
		P2=0XC0;
		P0=0X01;
		P2=0XFF;
		P0=tab[yi];
		delayms(1);
		
		P2=0XC0;
		P0=0X02;
		P2=0XFF;
		P0=tab[er];
		delayms(1);
	}
	
		void display2(uchar san,uchar si)
	{
		P2=0XC0;
		P0=0X04;
		P2=0XFF;
		P0=tab[san];
		delayms(1);
		
		P2=0XC0;
		P0=0X08;
		P2=0XFF;
		P0=tab[si];
		delayms(1);
	}
		void display3(uchar wu,uchar liu)
	{
		P2=0XC0;
		P0=0X10;
		P2=0XFF;
		P0=tab[wu];
		delayms(1);
		
		P2=0XC0;
		P0=0X20;
		P2=0XFF;
		P0=tab[liu];
		delayms(1);
	}
			void display4(uchar qi,uchar ba)
	{
		P2=0XC0;
		P0=0X40;
		P2=0XFF;
		P0=tab[qi];
		delayms(1);
		
		P2=0XC0;
		P0=0X80;
		P2=0XFF;
		P0=tab[ba];
		delayms(1);
	}
	
	
	
	
void allinit()//初始化
{
  P2=0X80;//打开控制数码管的573(u6),3-8译码器为001(ABC)
	P0=0XFF;//关闭所有流水灯
	
	P2=0XC0;//打开控制数码管位选的573,3-8译码器为011
	P0=0XFF;
	P2=0XFF;//打开控制数码管段选573,3-8译码器为111
	P0=0XFF;//关闭所有数码管
	
	P2=0XA0;//打开控制数码管573,3-8译码器为101
	P0=0X00;//关闭继电器和蜂鸣器
}
void main()
{
  allinit();
  yi=1,er=2,san=3,si=4,wu=5,liu=6,qi=7,ba=8;
	while(1)
	{
			display1(yi,er);
			display2(san,si);
			display3(wu,liu);
			display4(qi,ba);
	}
	
}
















你可能感兴趣的:(蓝桥杯)