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

利用动态扫描和定时器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

相关推荐
FreakStudio9 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
✎ ﹏梦醒͜ღ҉繁华落℘14 天前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
u1521096484914 天前
S.S.Audio PRO A2音频隔离器
嵌入式硬件·音视频·实时音视频·视频编解码·视频
zd84510150014 天前
RS485 总线详解
单片机·嵌入式硬件
半条-咸鱼14 天前
【STM32】I2C协议原理、HAL读写与OLED显示操作
嵌入式硬件·c·信息与通信
wohoo_wangzi14 天前
苏州晟雅泰电子:关于W25Q128JVSIQ这个芯片物料的参数,规格及应用领域
嵌入式硬件
✎ ﹏梦醒͜ღ҉繁华落℘14 天前
编程基础 --高内聚,低耦合
c语言·单片机
科芯创展14 天前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件
集芯微电科技有限公司14 天前
四通道2A输出集成功率电感降压模块专为紧凑型方案设计
人工智能·单片机·嵌入式硬件·生成对抗网络·计算机外设
踏着七彩祥云的小丑14 天前
嵌入式测试学习第 37 天:异常场景测试:断电、拔插、干扰、非法指令
单片机·嵌入式硬件·学习