首页 > 其他分享 >按键控制数码管闪烁

按键控制数码管闪烁

时间:2023-07-09 19:31:34浏览次数:32  
标签:P2 P0 unsigned char 数码管 按键 闪烁 select

(文章目录)

一、数码管闪烁

#include<STC15F2K60S2.H>
unsigned char mode=0;//模式变量
unsigned char stat=0;//闪烁位变量
unsigned int count_smg=0;//数码管闪烁计数变量
unsigned char f_open=0;//闪烁标志
sbit S7=P3^0;
unsigned char code table[]={0xc0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8E,0xbf,0x7f};
void select(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 guanbi() //关闭无关设备
{
	select(5);
	P0=0x00;
	select(4);
	P0=0xff;
}
//**************数码管段选位选函数
void shuma(unsigned char pos,unsigned char date) 
{
	select(7);
	P0=0xff;
	select(6);
	P0=0x01<<pos;
	select(7);
	P0=date;
}
//*************延时函数
void delayms(unsigned int x)
{
	while(x--);
}
//************数码管显示函数
void display()
{
	if(f_open==0)
	{
		shuma(0,table[1]);
		delayms(100);
		shuma(1,table[2]);
		delayms(100);
	}
	else 
	{
		shuma(0,0xff);
		shuma(1,0xff);
	}
	  shuma(2,table[16]);
		delayms(100);
		shuma(3,table[3]);
		delayms(100);
	  shuma(4,table[4]);
	  delayms(100);
	  shuma(5,table[16]);
		delayms(100);
    shuma(6,table[5]);
		delayms(100);
	  shuma(7,table[6]);
	  delayms(100);	
}
void display1()
{
	  shuma(2,table[16]);
		delayms(100);
		shuma(0,table[1]);
		delayms(100);
	  shuma(1,table[2]);
	  delayms(100);
	  shuma(5,table[16]);
		delayms(100);
    shuma(6,table[5]);
		delayms(100);
	  shuma(7,table[6]);
	  delayms(100);	
	if(f_open==0)
	{
		shuma(3,table[3]);
		delayms(100);
		shuma(4,table[4]);
		delayms(100);
	}
	else 
	{
		shuma(3,0xff);
		shuma(4,0xff);
	}
}
void display2()
{
	  shuma(2,table[16]);
		delayms(100);
		shuma(0,table[1]);
		delayms(100);
	  shuma(1,table[2]);
	  delayms(100);
	  shuma(5,table[16]);
		delayms(100);
    shuma(3,table[3]);
		delayms(100);
	  shuma(4,table[4]);
	  delayms(100);	
	if(f_open==0)
	{
		shuma(6,table[5]);
		delayms(100);
		shuma(7,table[6]);
		delayms(100);
	}
	else 
	{
		shuma(6,0xff);
		shuma(7,0xff);
	}
}
void INT()
{
	TMOD=0x01;
	TH0=(65535-1000)/256;
	TL0=(65535-1000)%256;
	EA=1;
	ET0=1;
	TR0=1;
}
void sreviceINT() interrupt 1
{
	 TH0=(65535-1000)/256;
	 TL0=(65535-1000)%256;
	 count_smg++;
   if(count_smg==1000)
	 {
		 count_smg=0;
		 f_open=~f_open;
	 }
}
void scan()
{
	if(S7==0)
	{
		delayms(10);
		if(S7==0)
		{
			stat++;
			if(stat==4)
			{
				stat=1;
			}
			while(S7==0) //等待按键松开
			{
				if(stat==1)
				{
					display();
				}
				else if(stat==2)
				{
					display1();
				}
				else
				{
					display2();
				}
			}
		}
	}
}
void main()
{
	guanbi();
	INT();
	while(1)
	{
		scan();
		switch(stat)
		{
			case 1:
				display();
			break;
			case 2:
				display1();
			break;
			case 3:
				display2();
			break;
		}
	}
}


标签:P2,P0,unsigned,char,数码管,按键,闪烁,select
From: https://blog.51cto.com/u_16153875/6668976

相关文章

  • LED灯呼吸实现过程突然闪烁
    出现现象:当设置呼吸灯的效果时,发现灯慢慢的亮突然闪烁一下。代码如下voiddelay(uint8_tt){inta; for(a=0;a<t;a++){}} for(i=0;i<2000;i++) { HAL_GPIO_WritePin(GPIOB,LED2_Pin,GPIO_PIN_SET); delay(i); HAL_GPIO_WritePin(GPIOB,LED2_Pin,GPIO_......
  • 22-数码管的动态显示
    1.数码管动态显示不同位的数码管显示不同的数值使用动态扫描的方式,使用6位8段数码管显示1,2,3,4,5,6,选中第一个数码管让其显示1,显示时间位T;经过时间T之后选中第二个数码管显示2,显示时间为T,依次进行相似的操作,显示到6之后,经过时间T之后再显示1显示一个周期所有的时间为6个周......
  • RV1126按键中断驱动和应用调试
     本人使用的调试平台是荣品的rv1126开发板,最近在调试按键中断。经过查看原理图,发现竟然没有一个空闲的IO,所以使用UART1的RX作为按键中断引脚。    驱动部分:     因为UART1原先已经在设备树中已经有了定义,需要将kernel/arch/arm/boot/dts/rongpin/rv1126_11......
  • STC89C52+DS18B20实现环境温度检测(数码管显示温度)
    一、项目介绍温度检测是工业自动化、生产线等众多领域中常见的应用场景之一,能及时准确地监测温度对于保障生产安全和提高生产效率有着非常重要的作用。而在现代的电子制造行业中,使用单片机和传感器等电子元器件进行温度检测已经成为了一个比较成熟的技术方案。本项目选择STC89C52单......
  • 闪烁横条短纹问题
    闪烁横条短纹问题现象某些场景下会出现跳动的短横纹,原因分析客户反馈是终端的客户老化测试测到的,客户没有测到,让客户替换镜头测试还是会有这个问题,咨询sensor厂,反馈说可能是频率过高导致,给了另外一份初始化序列问题消失......
  • 硬件导致的ae闪烁问题
    ae闪烁问题问题现象摄像头照亮的地方,概率性会有画面闪烁的问题原因分析大概率是硬件问题,因为sdk和sensor驱动都没有改过,客户只是另外一个项目,只动了硬件,但是转念一想,硬件问题会导致ae闪烁么?按照排查流程排查客户的sensor驱动和底层配置并没有什么问题,让硬件工程师排查下原......
  • 21-数码管静态显示
    1.数码管静态显示数码管是一种半导体发光器件,其基本单元是发光二极管常见的数码管有七段数码管和八段数码管(相差一个小数点),还有米字管,十六段管等八段发光数码管每一段对应a,b,c,d,e,f,g,dp(小数点)八段数码管有十个管教,八段+两个公共端com,与数码管内部是导通的八段......
  • 03-定时器与数码管
    目录一.定时器基础概念一.定时器基础概念时钟周期时钟周期T是时序中最小的时间单位,具体计算的方法就是1/时钟源频率,例如C51时钟周期=1/11059200秒机器周期指单片机完成一个操作的最短时间.机器周期主要针对汇编语言而言,每条语句都是机器周期的整数倍.一......
  • 【解决方法】按键精灵 实现 狂野飙车9 自动领取每日广告卡牌包 (1)
    环境:工具:手机/安卓模拟器,按键精灵手机助手系统版本:android10问题描述:描述:通过编程实现自动领取每日广告卡牌包,分享思路和使用到的代码,并进行解析。本文章仅仅只是个人学习所用,记录并复习所用的知识,并未对软件进行非法篡改和破坏行为。提示:若按照教程还是无法完成操......
  • 国产MCU兆易GD32实现矩阵按键扫描
    一、矩阵键盘   为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。使用8个io口来进行16个按键的控制读取,可以减小io口的使用,用4条I/O线作为行线,4条I/O线作为列线组成的键盘。矩阵键盘检测方法主......