⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chuanhangsuma.c

📁 用串行74LS164口来显示多个数码管
💻 C
字号:
/*1.用串行口实现多片数码管的静态显示,并用4个数码管完成4位十进制计数器功能
2.利用串并转换接口74LS164对数码管进行扩展,电路中接了4个数码管,通过P1口的
  低4信来控制数码管的更新显示
*/
#include<reg51.h>
uart_init();
sbit p10=0x90;
sbit p11=0x91;
sbit p12=0x92;
sbit p13=0x93;

bit change_flag;
void update_LED();

xdata int ncounter=0;
xdata int nindex=0;
xdata int ndatatodisplay=0;


char table[10]={0xc0,0xed,0xb0,0xa8,0x8d,0x8a,0x82,0xec,0x80,0x88};

//主程序
main()
{	uart_init();
	TH0=0X3C;//计数初值写入
	TL0=0XAF;
	ET0=1;	 //开中断
	EA=1;	  //开总中断
	TF0=0;	  //定时器0中断标志位清0
	TR0=1;	  //定时器0开始定时
	p10=1;
	change_flag=0;
	ncounter=0;
	while(1)
	{	if(change_flag==1)
		{	update_LED();	//调用显示
			if(ndatatodisplay>9999) ndatatodisplay=0;
			//printf()
		}
	}
}



void timer0_overflow() interrupt 1 using 0
{	TH0=0X3C;
	TL0=0XAF;
	if(ncounter==20)
	{	ncounter=0;
	change_flag=1;
	/*计数时间到1S计数值加1*/	
	}
	ncounter++;	
}



uart_init()
{	SCON=0x52;	//设置串行口控制寄存器
	TMOD=0x21;	//12M时钟波特率为2400
	TCON=0x69;
	TH1 =0xf3;
}


void update_LED()
{	int ntemp;
	ntemp-ndatatodisplay;
	p13=0;
	nindex=ntemp%10;
	SBUF=table[nindex];
	p13=1;
	while(!TI);
	TI=0;
	ntemp/=10;

	p12=0;
	nindex=ntemp%10;
	SBUF=table[nindex];
	p12=1;
	while(!TI);
	TI=0;
	ntemp/=10;

	p11=0;
	nindex=ntemp%10;
	SBUF=table[nindex];
	p11=1;
	while(!TI);
	TI=0;
	ntemp/=10;

	p10=0;
	nindex=ntemp%10;
	SBUF=table[nindex];
	p10=1;
	change_flag=0;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -