ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【蓝桥杯】第十届蓝省赛-电压频率测量

2022-01-27 11:59:03  阅读:180  来源: 互联网

标签:break return u8 第十届 蓝桥 flag key 蓝省赛 dis


先上完整代码文件(自己写的,如果不足请评论区指教)
链接:https://pan.baidu.com/s/1_mdV1GQSQFg86EAKvMGnEQ
提取码:ag6i

1、题目要求

在这里插入图片描述
题目有点长,越长反而要求说的越明确,不怕代码不会写,就怕要求读不懂

2、主函数

#include<iic.h>
#include<smg.h>
#include<config.h>
u8 key,key_flag,dis=1; 
u8 buf[9],duanma[8],i;
u8 led=0xff; 
u32 k;
void Count0Init() //定时器0计数模式初始化,计数脉冲引脚P3.4
{
   TMOD = TMOD|0x05;//计数器模式工作方式1,TL0作为低八位,TH0作为高八位
   TL0 = 0;
   TH0 = 0;
   TF0 = 0;
   TR0 = 1;
   ET0 = 1;
   EA = 1;
}
void Timer1Init(void)		//1毫秒@11.0592MHz
{
	AUXR |= 0x40;		//定时器时钟1T模式
	TMOD &= 0x0F;		//设置定时器模式
	TL1 = 0xCD;		//设置定时初值
	TH1 = 0xD4;		//设置定时初值
	TF1 = 0;		//清除TF1标志
	TR1 = 1;		//定时器1开始计时
	EA = 1;
	ET1 = 1;
}
void close()
{
  P2 = (P2&0X1F)|0X80;
  P0 = 0xff;
  P2 = (P2&0X1F)|0XA0;
  P0 = 0x00;
  P2 &= 0X1F;
}

void LED(u8 i)
{
  P2 = (P2&0X1F)|0X80;
  P0 = i;
  P2 &= 0X1F;
}
u8 readkey()
{
  static u8 key_count,key_return;
  u8 key_press;
  static bit key_flag=0;
  
  key_press = P3&0x0f;
  if(key_press!=0x0f)key_count++;
  else key_count=0;

  if(key_count==2)
  {
    key_count=0;
	key_flag=1;
	switch(key_press)
	{
	  case 0x0e:key_return=7;break;
	  case 0x0d:key_return=6;break;
	  case 0x0b:key_return=5;break;
	  case 0x07:key_return=4;break;
	}
  }

  if(key_press==0x0f&&key_flag==1)
  {
    key_flag=0;
	return key_return;
  }
    return 0;
}
void main()
{
   float temp;
   u8 L1,L3,L4,L5;
   bit mode,dis_flag=0,DC_flag=1,LED_flag=1; 
   Timer1Init();close();
   Count0Init();
  while(1)
  {	  
      
      //按键扫描处理
      if(key_flag==1)
	  {
	    key_flag=0;
		temp=read_rb(3)/51.0;
		key=readkey();
		if(key!=0)
	    { 
		    switch(key)
			{
			  case 7: dis_flag=~dis_flag;break;
			  case 6: LED_flag=~LED_flag;break;
			  case 5: DC_flag=~DC_flag;break;
			  //“显示界面切换”按键,按下 S4 按键,切换选择频率显示界面和电压显示界面
			  case 4: mode=~mode;break;
			}
	    }
	  }

	  if(DC_flag)
	  {write_DAC(102);}
	  else{write_DAC(temp*51);}

	  //led处理
	  if(LED_flag)
	  {
	   if(dis_flag)L1 = 0xfe;else L1 = 0xfd;
	   if(temp<=1.5)L3=0XFF;else if(temp<2.5)L3=0xfb;else if(temp<3.5)L3=0XFF;else L3=0xfb;
	   if(k<1000)L4=0xff;else if(k<5000)L4 =0XF7;else if(k<10000)L4 =0xff;else L4 = 0xf7;
	   if(DC_flag)L5=0xff;else L5=0xef;
	   led=L1&L3&L4&L5;
	  }else led=0xff;
	  LED(led);

	   if(dis==1)
	   {
	      dis=0;
	      //数码管显示
		  if(dis_flag)
		  {
		     if(mode==0){sprintf(buf,"U%8.2f",temp);}
		     else{sprintf(buf,"F%7ld",k);}
		  }
		  else 	sprintf(buf,"        ");
		  conversion(&buf,&duanma);
	  }
	  
  }
}
void Timer1() interrupt 3
{
  static u8 m;
  static u16 n;
  if(++m==10){key_flag=1;m=0;}
  if(++i==8){i=0;}display(i,&duanma);
  if(++n%500==0)
  {
     dis=1;
  }
  //每一秒更新一次频率
  if(n==1000)
  {
      k=TH0*256+TL0;
	  TH0=0;TL0=0;
	  n=0;
  }
}

标签:break,return,u8,第十届,蓝桥,flag,key,蓝省赛,dis
来源: https://blog.csdn.net/C_white_llj/article/details/122715213

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有