蓝桥杯单片机综合练习6

模块:数码管 (使用的蓝桥杯官方竞赛开发平台)

 功能:八个数码管依次显示0~9 (也可以到F) 然后全部数码管显示 0~9 (也可以到F)依次往复循环

/************************************
  功能: 数码管从左至右依次显示0~9 之后八个数码管同时显示0~F
************************************/
#include "STC15F2K60S2.H" 
#include <intrins.h>
#define uint unsigned int 
#define uchar unsigned char
uint code SMG_duanma[] =  //数码管段选表
{0xc0  ,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void Delay50ms()		//@12.000MHz  软件延时
{
	unsigned char i, j, k;

	_nop_();
	_nop_();
	i = 3;
	j = 72;
	k = 161;
	do
	{
		do
		{
			while (--k);
		} 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)  // 带形参的 表示让第pos位显示dat
{
   	HC138init(6); // 使控制数码管位选的锁存器 打开
	P0 = 0x01 << (pos-1); // 起始是数码管第一个 然后左移 pos-1    
	HC138init(7);
	P0 = SMG_duanma[dat] ;
}
void display ()
{	 
   uchar i=1; uchar j;
  	 for(i=1;i<10;i++)	 // 用来控制数码管的位数
	 {
	   for(j=0;j<10;j++) // 用来控制数码管的段数
	   {
	    displaybit(i,j);
	    Delay50ms();
	    Delay50ms();
		Delay50ms();
	    Delay50ms();
	   }
	 }
	 for(j=0;j<16;j++)
	   {
	      HC138init(6); // 使控制数码管位选的锁存器 打开
          P0 = 0xff;   
	      HC138init(7);
	      P0 = SMG_duanma[j];
		  Delay50ms();
	      Delay50ms();
		  Delay50ms();
	      Delay50ms();
	   }
}
void main ()  // 主函数 
{  
   LEDinit(); 
   while(1)
   {
   	 display (); // 因为 程序要一直循环下去 要在while 中 一直执行

   }
}

 

©️2020 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值