蓝桥杯51省赛(12)

没有写DAC 的输出(因为还不是很会

#include<stc15f2k60s2.h>
#include"onewire.h"
unsigned char wei[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char duan[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xbf,0xff,0xc6,0x8c,0x88,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //12"c"13"p"14"a"15开始是有点数
unsigned char tab[8]={0};
unsigned char key_mode=0;
unsigned char key_add=0;
unsigned char key_jian=0;
unsigned char canshu_temp=25;
//unsigned char led=0xfe;
unsigned int shuchu=0;
bit mode_DAC=0;
bit flag=0;
float temp=0;


void delayms(unsigned int ms)
{
	int i,j;
	for(i=0;i<ms;i++)
	for(j=0;j<845;j++);
}

void HC_138(unsigned char m)
{
	switch(m)
	{
		case(4):P2|=0X80;P2&=0X9F;break;
		case(5):P2|=0XA0;P2&=0XBF;break;
		case(6):P2|=0XC0;P2&=0XDF;break;
		case(7):P2|=0XE0;P2&=0XFF;break;
	}
}

void allinit()
{
	HC_138(4);P0=0XFF;
	HC_138(5);P0=0X00;
	HC_138(6);P0=0X00;
	HC_138(7);P0=0XFF;
}

void timer0init()
{
	TMOD=0X01;
	TH0=(65536-1000)/256;
	TL0=(65536-1000)%256;
	EA=1;
	ET0=1;
	TR0=1;
}

void timer0() interrupt 1
{
	static char i=0,m=0;
	TH0=(65536-1000)/256;
	TL0=(65536-1000)%256;
	HC_138(6);
	P0=wei[i];
	HC_138(7);
	P0=duan[tab[i]];
	i++;
	if(i==8)
	i=0;
	m++;
	if(m==10)
	{
		flag=~flag;
		m=0;
	}
}

void keyscan()
{
P44=0;P42=1;P35=1;P34=1;P33=1;P32=1;P31=1;P30=1;
if(P33==0)
{
	delayms(10);
	if(P33==0)
	{
		key_mode++;
		if(key_mode==3)
		key_mode=0;
	}
	while(!P33);
}
if(P32==0)
{
	delayms(10);
	if(P32==0)
	{
		mode_DAC=~mode_DAC;
	}
	while(!P32);
}


P44=1;P42=0;P35=1;P34=1;P33=1;P32=1;P31=1;P30=1;
if(P33==0)
{
	delayms(10);
	if(P33==0)
	{
		if(key_mode==1)
		key_jian++;
	}
	while(!P33);
}
if(P32==0)
{
	delayms(10);
	if(P32==0)
	{
		if(key_mode==1)
		key_add++;
	}
	while(!P32);
}


}

void keyshow()
{
	if(key_mode==0)
	{
		if(flag==1)
		{
			if(mode_DAC==0)
			{
				HC_138(4);
				P0=0xfc;
			}
			else
			{
				HC_138(4);
				P0=~0x02;
			}
		}
		tab[0]=12;
		tab[1]=11;
		tab[2]=11;
		tab[3]=11;
		tab[4]=tempget()/1000;
		tab[5]=tempget()%1000/100+15;
		tab[6]=tempget()%100/10;
		tab[7]=tempget()%10;
		temp=tempget()/100;
	}
	
	if(key_mode==1)
	{
		canshu_temp=25+key_add-key_jian;
		if((canshu_temp<0)|(canshu_temp>99))
		{
			canshu_temp=25;
			key_add=0;
			key_jian=0;
		}
		tab[0]=13;
		tab[1]=11;
		tab[2]=11;
		tab[3]=11;
		tab[4]=11;
		tab[5]=11;
		tab[6]=canshu_temp/10;
		tab[7]=canshu_temp%10;
		if(flag==1)
		{
			if(mode_DAC==0)
			{
				HC_138(4);
				P0=0xfa;
			}
			else
			{
				HC_138(4);
				P0=~0x04;
			}
		}
	}
	
	if(key_mode==2)
	{
		if(flag==1)
		{
			if(mode_DAC==0)
			{
				HC_138(4);
				P0=0xf6;
			}
			else
			{
				HC_138(4);
				P0=~0x08;
			}
		}
		if(mode_DAC==0)	//模式1
		{
//			led=0xfe;
			if(temp<=canshu_temp)
			shuchu=0;
			else
			shuchu=500;
		}
		else if(mode_DAC==1)//模式二
		{
//			led=0xff;
			if(temp<=20)
			shuchu=100;
			else if(temp>=40)
			shuchu=400;
			else if((temp>20)&(temp<40))
			shuchu=((tempget()-2000)*15+10000)/100;

		}
		tab[0]=14;
		tab[1]=11;
		tab[2]=11;
		tab[3]=11;
		tab[4]=11;
		tab[5]=shuchu/100+15;
		tab[6]=shuchu%100/10;
		tab[7]=shuchu%10;
	}

}



void main()
{
	allinit();
	timer0init();
	while(1)
	{
		keyscan();
		keyshow();
	}
}









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值