单片机---数码管动态显示和定时器应用,实例练习

利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的速度往下递减直至765398并保持显示此数,与此同时利用定时器0以500Ms速度进行流水灯从上至下移动,当数码管上数减到停止时,试验板上流水灯也停止然后全部闪烁,3秒后(用T0定时)流水灯全部关闭,数码管上显示出HELLO,至此保持住。

复制代码
#include <reg52.h>
#include <intrins.h>

unsigned char temp,t0,t1,bai,shi,ge,flag,flag1;
unsigned int shu;

sbit dula=P2^6;//段选信号
sbit wela=P2^7;//位选信号

unsigned char code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x36,0x79,0x38,0x3f,0};//定义数码管显示内容0~f的数组


void init();
void display(unsigned aa,unsigned bb,unsigned cc,unsigned char bai,unsigned char shi,unsigned ge);
delay(unsigned z);

void main()
{
	init();
	while(1)
	{
		if(flag1!=1)
			display(7,6,5,bai,shi,ge);
		else
			display(16,17,18,18,19,20);
	}
}

void init()
{
	shu=432;
	temp=0xfe;
	P1=temp;
	TMOD=0x11;
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;
	TH1=(65536-50000)/256;
	TL1=(65536-50000)%256;
	EA=1;
	ET0=1;
    ET1=1;

	TR0=1;
    TR1=1;	
}

void timer0() interrupt 1
{
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;
	t0++;
	if(flag!=1)
	{
		if(t0==10)
		{
			t0=1;
			temp=_crol_(temp,1);
	        P1=temp;
		}
	}else{
		if(t0%4==0)
		{
			P1=~P1;
		}
		if(t0==60)
		{
			TR0=0;
			P1=0xff;
			flag1=1;
		}
	}
	
}

void timer1() interrupt 3
{
	TH1=(65536-50000)/256;
	TL1=(65536-50000)%256;
	t1++;
	if(t1==2)
	{
		t1=0;

		shu--;
		bai = shu/100;
	    shi = shu%100/10;
		ge = shu%10;

		if(shu==398)
		{
			TR0=0;
			TH0=(65536-50000)/256;
			TL0=(65536-50000)%256;
            TR0=1;
			flag=1;
			t0=0;
			P1=0xff;
			TR1=0;
		}
	}
}

/*aa,bb,cc 数码管前三位*/
void display(unsigned aa,unsigned bb,unsigned cc,unsigned char bai,unsigned char shi,unsigned ge)
{
	dula=1;
	P0=table[aa];
	dula=0;
	P0=0xff;
	wela=1;
	P0=0xfe;
	wela=0;
	delay(1);

	dula=1;
	P0=table[bb];
	dula=0;
	P0=0xff;
	wela=1;
	P0=0xfd;
	wela=0;
	delay(1);

	dula=1;
	P0=table[cc];
	dula=0;
	P0=0xff;
	wela=1;
	P0=0xfb;
	wela=0;
	delay(1);
	
	dula=1;
	P0=table[bai];
	dula=0;
	P0=0xff;
	wela=1;
	P0=0xf7;
	wela=0;
	delay(1);

	dula=1;
	P0=table[shi];
	dula=0;
	P0=0xff;
	wela=1;
	P0=0xef;
	wela=0;
	delay(1);

	dula=1;
	P0=table[ge];
	dula=0;
	P0=0xff;
	wela=1;
	P0=0xdf;
	wela=0;
	delay(1);
}

delay(unsigned z)
{
	unsigned x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);
}

WeChat_20241025162439

相关推荐
社会大青年11 分钟前
STM32 GPIO-------设置成51单片机模式输出
stm32·嵌入式硬件·51单片机
麻辣长颈鹿Sir32 分钟前
单片机进入 B. 中断无限循环异常解决方法
单片机·嵌入式硬件·b.中断·异常中断处理·程序无限循环异常处理·芯海spi异常中断·芯海芯片
red watchma39 分钟前
Xshell->MCU Ymodem协议实现
网络·单片机·嵌入式硬件
XINVRY-FPGA1 小时前
XC7A100T-2FGG484I Xilinx Artix-7 FPGA
arm开发·嵌入式硬件·fpga开发·硬件工程·信息与通信·信号处理·fpga
lingzhilab1 小时前
零知IDE——基于STM32F407VET6和ESP-01的SHT2X温湿度监测与云传输系统
stm32·单片机·嵌入式硬件
国科安芯2 小时前
高辐射环境下AS32S601ZIT2型MCU的抗辐照性能与应用潜力分析
网络·人工智能·单片机·嵌入式硬件·fpga开发
Rousson5 小时前
硬件学习笔记--82 连接器的选用原则与流程
笔记·单片机·学习
三佛科技-134163842125 小时前
高速风筒方案开发 高速风筒MCU控制方案设计
单片机·嵌入式硬件·智能家居·pcb工艺
清风66666610 小时前
基于单片机的螺旋藻生长大棚PH智能控制设计
单片机·嵌入式硬件·毕业设计·课程设计
ting_zh11 小时前
微控制器(Micro Controller Unit, MCU)基础整理
单片机·嵌入式硬件