蓝桥杯单片机综合练习7

模块:数码管动态显示 (官方竞赛开发平台)

 功能; 在CD107D单片机综合训练平台上,实现数码管的动态显示,在8位数码管中,前面4位显示年份“2020”,接下来的两位是分隔符“-” , 最后两位显示月份,从1月开始,每间隔一段时间加一月,到12月后,又从一月开始递增,依次重复

 

#include "STC15F2K60S2.H" 
#include <intrins.h>
#define uint unsigned int 
#define uchar unsigned char
sbit fe = P0^6;
sbit ji = P0^4;
uchar num = 1;
uint code SMG_duanma[] =  //数码管段选表
{0xc0  ,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
void Delay2ms()		//@12.000MHz
{
	unsigned char i, j;

	i = 24;
	j = 85;
	do
	{
		while (--j);
	} while (--i);
}

void HC138init (uchar n)  // HC138 译码器初始化函数 当形参是数字几 就让第几个端口 输出低电平
{
  switch (n)
  {
  	 case 4:
	    P2 = (P2 & 0x1f) | 0x80;	 // 4 是流水灯控制位
	 break;
	 case 5:						 //5 是蜂鸣器以及继电器控制位
	    P2 = (P2 & 0x1f) | 0xa0;
	 break;
	 case 6:						// 6 是数码管位选控制位
	    P2 = (P2 & 0x1f) | 0xc0;
	 break;
	 case 7:					   // 7 是数码管段选控制位
	    P2 = (P2 & 0x1f) | 0xe0;
	 break;
  }
}
void LEDinit()	  // LED 初始化函数 因为LED和数码管都是接在P0口 需要把LED 全部熄灭
{
   HC138init(4);
   P0 = 0xff;
}
void displaybit (uchar pos,dat) // 数码管静态显示
{
   HC138init (6);
   P0 = 0x01<<(pos-1);
   HC138init (7);
   P0 = SMG_duanma[dat]; 
}
void display()
{
   displaybit (1,2)	;// 第一个数码管显示2
   Delay2ms();	
   displaybit (2,0)	;// 第二个数码管显示0
   Delay2ms();
   displaybit (3,2)	;// 第三个数码管显示2
   Delay2ms();	
   displaybit (4,0)	;// 第四个数码管显示0
   Delay2ms();
   displaybit (5,10)	;	// 第五个数码管显示 第一个分隔符
   Delay2ms();
   displaybit (6,10)	; // 第六个数码管显示 第二个分隔符
   Delay2ms();
   displaybit (7,(num/10))	;	// 第五个数码管显示 第一个分隔符
   Delay2ms();
   displaybit (8,(num%10))	; // 第六个数码管显示 第二个分隔符
   Delay2ms();
}
void delay (uchar time)
{
  while(time--)
  {
  	 display();
  }
}
void main ()
{
  LEDinit();
  while(1)
  {
  	 display();
	 num++;
	 if(num == 13)
	 num = 1;
	 delay(50); // 题目要求,要经过一段时间后,数字累加变化。要有一个延时,这个延时过程中,保持数字不变
  } 
}

 

蓝桥杯单片机综合练习7蓝桥杯单片机综合练习7 一直在奔跑的孩子 发布了12 篇原创文章 · 获赞 2 · 访问量 4065 私信 关注
上一篇:蓝桥杯单片机之学习模块篇一(动态数码管)


下一篇:蓝桥杯——数码管