基於51單片機做的挑戰十秒(含仿真)

  • 先看效果和原理圖。

在這裏插入圖片描述
電路是由兩個移位寄存器74Hc595做的具體中文資料74HC595中文資料
下面上代碼



#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit SK=P2^0; 
sbit SER=P2^1;
sbit RK=P2^2;
sbit but=P3^2;//按鈕
bit flag = 1; //計時標誌位
	uint i;
uchar code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
					0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delays(uint x)
{
	uchar y,z;
	for(y=x;y>0;y--)
	for(z=110;z>0;z--);
}

/* 595發送數據*/
void Hc595SendByte(uchar dat,uchar dat1,uchar dat2,uchar dat3)
{
	uchar a;
	SK=0;
	RK=0;
	for(a=0;a<8;a++)
	{
		SER=dat>>7;
		dat<<=1;

		SK=1;
		_nop_();
		_nop_();
		SK=0;	
	}

	for(a=0;a<8;a++)
	{
		SER=dat1>>7;
		dat1<<=1;

		SK=1;
		_nop_();
		_nop_();
		SK=0;	
	}
	   for(a=0;a<8;a++)
	{
		SER=dat2>>7;
		dat2<<=1;

		SK=1;
		_nop_();
		_nop_();
		SK=0;	
	}
	for(a=0;a<8;a++)
	{
		SER=dat3>>7;
		dat3<<=1;

		SK=1;
		_nop_();
		_nop_();
		SK=0;	
	}


	RK=1;
	_nop_();
	_nop_();
	RK=0;
}

/*顯示函數*/
void display()
{
			uchar ge,shi,bai,qian;
			 qian=i/1000;
			 bai=i%1000/100;
			 shi=i%100/10;
			 ge=i%10;
			 if(flag!=0)
			 {
		 		Hc595SendByte(~smgduan[ge],~smgduan[shi],~smgduan[bai]&~0x80,~smgduan[qian]);
			}
	
}

/*定時器初始化*/
void Timer0Init()
{
	TMOD|=0X01;

	TH0=0XDC;
	TL0=0X00;	
	ET0=1;
	EA=1;
	TR0=0;
	
	
		EX0 = 1;	//打開外部中斷0
	IT0 = 1;	//外部中斷0中斷方式爲跳變沿,從高到低觸發
				
}

/*外部中斷服務函數*/
void key() interrupt 0
{	 
			if(but==0)
			{
			   delays(10);
			   if(but==0)
			   {
				if(TR0==0&&i!=0)
				{
					i=0;
					display();
					flag=1;
				}
				else
				{
					   if(TR0==1)
					   {
					   		
					   	 TR0=0;
						 flag=0;
					   }
					   else if(TR0==0)
					   {
					   	TR0=1;
						flag=1;
					   }
				 }

				 while(!but);
        		delays(10);
        		while(!but);
			   }
			}
} 

void main()
{
		 Timer0Init(); 
		  i=0;
		 while(1)
		 {
			 display();
			// key();
			 
		}
	
}
/*定時器中斷服務函數*/
void Timer0() interrupt 1
{

	TH0=0XDC;
	TL0=0X00;
	i++;
	if(i==100000)
	{
		i=0;
	}	
}

下面是資料下載仿真和源碼
https://github.com/DWH168/challenge10Seconds

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章