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

📄 dled.c

📁 单片及c语言轻松入门的随书光盘
💻 C
字号:
/**************************************************************
定时中断实现显示的程序
前面各位始终显示0,最后一位显示在0-9之间循环
***************************************************************/
#include "reg51.h"
#define uchar unsigned char
#define uint  unsigned int 

uchar code BitTab[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB};
uchar code DispTab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80, 
0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};
uchar DispBuf[6];	//6字节的显示缓冲区

void Timer0() interrupt 1
{	uchar tmp;
	static uchar Count;		//计数器,显示程序通过它得知现正显示哪个数码管
	TH0=(65536-3000)/256;
	TL0=(65536-3000)%256;//定时时间为3000个周期
	tmp=BitTab[Count];		//根据当前的计数值取位值
	P2=P2|0xfc;				//P2与11111100B相或,将高6位置1
	P2=P2&tmp;			//P2与取出的位值相与,将某一位清零
	tmp=DispBuf[Count];		//根据当前的计数值取显示缓冲待显示值	
	tmp=DispTab[tmp];		//取字形码
	P0=tmp;				//送出字形码
	Count++;				//计数值加1
	if(Count==6)			//如果计数值等于6,则让其回0
		Count=0;	
}
/*延时程序*/
void mDelay(unsigned int Delay)	
{	unsigned int i;
	for(;Delay>0;Delay--)
	{	for(i=0;i<124;i++)
		{;}
	}
}
void main()
{	uchar Counter=0;
	P1=0xff;
	P0=0xff;
	TMOD=0x01;
	TH0=(65536-3000)/256;
	TL0=(65536-3000)%256;	//定时时间为3000个周期
	TR0=1;						//T0开始运行
	EA=1;						//总中断允许
	ET0=1;						//T0中断允许
	DispBuf[0]=0;
	DispBuf[1]=0;
	DispBuf[2]=0;
	DispBuf[3]=0;
	DispBuf[4]=0;				//显示器前5位均为0
	for(;;)
	{	DispBuf[5]=Counter;
		Counter++;				//计数
		if(Counter==10)
			Counter=0;
		mDelay(1000);
	}
}

⌨️ 快捷键说明

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