当前位置:网站首页>The 10th Blue Bridge Cup single chip microcomputer

The 10th Blue Bridge Cup single chip microcomputer

2022-06-23 21:48:00 Xiao Cong doesn't want to be bald

matters needing attention :led The control of requires and operation before assignment ,0x03 Yes, read the voltage on the potentiometer ,0x43 dac The function is Write data

Switch of nixie tube , Control it with other flags on the

#include <STC15F2K60S2.H>
#include "iic.h"
#define uchar unsigned char
#define uint unsigned int
uint date,count,dat,volt;
bit jiemian,ad_mode,led_mode,smg_mode;
unsigned char code SMG_NoDot[18] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
     0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,
     0xff,0xce};
sbit S7=P3^0;
sbit S6=P3^1;
sbit S5=P3^2;
sbit S4=P3^3;	 
void select(uchar n)
{
	switch(n)
	{
		case 4: P2=(P2&0x1f)|0x80;
		break;
		case 5: P2=(P2&0x1f)|0xa0;
		break;
		case 6: P2=(P2&0x1f)|0xc0;
		break;
		case 7: P2=(P2&0x1f)|0xe0;
		break;
	
	}
		
}
void delay(uint i)
{
	while(i--);

}
void smg_bite(uchar pos,date)
{
	select(6);
	P0=0x01<<pos;
	select(7);
	P0=date;
	
}
void smg_float(uchar pos,date)
{
	select(6);
	P0=0x01<<pos;
	select(7);
	P0=SMG_NoDot[date]&0x7f;
	
}
void inint()
{
	TMOD=0x16;
	TH0=0xff;
	TL0=0xff;
	TH1=(65535-5000)/256;
	TL1=(65535-5000)%256;
	ET0=1;
	ET1=1;
	TR0=1;
	TR1=1;
	EA=1;
}
void inint0() interrupt 1
{
	date++;
}
void inint1() interrupt 3
{
	TH1=(65535-50000)/256;
	TL1=(65535-50000)%256;
	count++;
	if(count==20)
	{
		dat=date;
		count=0;
		date=0;
	}
}
void smg_all()
{
	select(6);
	P0=0xff;
	select(7);
	P0=0xff;

}

void show_f()
{
	smg_bite(0,0x8e);
	delay(500);
	if(dat>9999)
	{
		smg_bite(3,SMG_NoDot[(dat/10000)%10]);
		delay(500);
	}
	if(dat>999)
	{
		smg_bite(4,SMG_NoDot[(dat/1000)%10]);
		delay(500);
	}
	if(dat>99)
	{
		smg_bite(5,SMG_NoDot[(dat/100)%10]);
		delay(500);
	}
	if(dat>9)
	{
		smg_bite(6,SMG_NoDot[(dat/10)%10]);
		delay(500);
	}
	if(dat>0)
	{
		smg_bite(7,SMG_NoDot[dat%10]);
		delay(500);
	}
	smg_all();
	
}


void show_u()
{
	smg_bite(0,0xc1);
	volt=read_rb2();
	smg_float(5,volt/100);
	delay(500);
	smg_bite(6,SMG_NoDot[(volt%100)/10]);
	delay(500);
	smg_bite(7,SMG_NoDot[volt%10]);
	delay(500);
	smg_all();
}
void key()
{
	if(S4==0)
	{
		delay(500);
		if(S4==0)
		{
			if(jiemian==0)
			{
				jiemian=1;
			}
			else if(jiemian==1)
			{
				jiemian=0;
			}
			
		
		}while(S4==0);
	}
	if(S5==0)
	{
		delay(500);
		if(S5==0)
		{
			if(ad_mode==0)
			{
				ad_mode=1;
			}
			else if(ad_mode==1)
			{
				ad_mode=0;
			}
			
		
		}while(S5==0);
	}	
if(S6==0)
	{
		delay(500);
		if(S6==0)
		{
			if(led_mode==0)
			{
				led_mode=1;
			}
			else if(led_mode==1)
			{
				led_mode=0;
			}
			
		
		}while(S6==0);
	}
	if(S7==0)
	{
		delay(500);
		if(S7==0)
		{
			if(smg_mode==0)
			{
				smg_mode=1;
			}
			else if(smg_mode==1)
			{
				smg_mode=0;
			}
			
		
		}while(S7==0);
	}
}
void led()
{
	select(4);
	if(jiemian==0&&smg_mode==1)
	{	
		P0&=0xfe;
		
	}
	if(jiemian==1&&smg_mode==1)
	{
		
		P0&=0xfd;
	}
	if(volt>=1.5&&volt<2.5)
	{
	
		P0&=0xfb;
	}
	if(volt>=3.5)
	{

		P0&=0xfb;
	}
	if(dat<5000&&dat>=1000)
	{

	P0&=0xf7;
	}
	if(dat>=10000)
	{

	P0&=0xf7;
	}
	if(ad_mode==1)
	{

	P0&=0xef;
	}


}
void keypr0()
{
	if(jiemian==0&&smg_mode==1)
	{
		show_u();
	}
	if(jiemian==1&&smg_mode==1)
	{
		show_f();
	}
	if(ad_mode==0&&jiemian==1)
	{
	 DAC(volt*51);
		
	}
	if(ad_mode==1)
	{
	 DAC(102);
	}
	if(led_mode==0)
	{
		led();
	}
	if(led_mode==1)
	{
		select(4);
		P0=0xff;
	}
	if(smg_mode==0)
	{
		select(6);
		P0=0xff;
		select(7);
		P0=0xff;
	}
	

}


void main()
{
	inint();
	while(1)
	{
		key();
		keypr0();
		
	}

}

原网站

版权声明
本文为[Xiao Cong doesn't want to be bald]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202211713212883.html