锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

蓝桥杯的被圈钱之旅(二):第十二届第一场(电子类)

时间:2023-12-09 14:07:01 l6传感器

一、前言:

我认为这个话题是一个非常简单的话题。看来第一场比赛的难度普遍低于第二场比赛的难度,这个话题没有难度。只有少数闲话。所有数据都上传了0分,题目在数据中,需要自取

二、题目

三、 代码展示

由于文章的长度,这里没有显示所有的代码,所有的信息都上传了0分。

一、矩阵键盘key.c

#include "key.h" #include "delay.h" // unsigned char key_sign=0; unsigned char mode_dis=0; unsigned char mode_set=0; unsigned char temp_tb=25; extern unsigned char temp_set; // sbit H1=P3^0; sbit H2=P3^1; sbit H3=P3^2; sbit H4=P3^3; // sbit L1=P4^4; sbit L2=P4^2; sbit L3=P3^4; sbit L4=P3^5; // void key_scan() {  H1=H2=H3=L1=L2=L3=L4=1;H4=0;  if(L1==0)  {   Delay100us();   if(L1==0)   {    key_sign=4;   }   while(!L1);  }  if(L2==0)  {   Delay100us();   if(L2==0)   {    key_sign=8;   }   while(!L2);  }  H1=H2=H4=L1=L2=L3=L4=1;H3=0;  if(L1==0)  {   Delay100us();   if(L1==0)   {    key_sign=5;   }   while(!L1);  }  if(L2==0)  {   Delay100us();   if(L2==0)   {    key_sign=9;   }   while(!L2);  }  //  if(key_sign==4)  {   key_sign=0;   mode_dis=mode_dis 1;   if(mode_dis>=3)   {    mode_dis=0;   }  }  if(key_sign==8&&mode_dis==1)  {   key_sign=0;   temp_tb=temp_tb-1;  }   if(key_sign==9&&mode_dis==1)  {   key_sign=0;   temp_tb=temp_tb 1;  }  if(key_sign==5)  {   key_sign=0;   mode_set^=1;  }  if(mode_dis!=1)  {   temp_set=temp_tb;  }  // }

二、ds18b20温度传感器

#include "temp.h" extern unsigned char smgBuffer[10]; extern unsigned char font[10]; int temp; int temp_int; unsigned char temp_set=25; extern unsigned char temp_tb; void read_temp() {  int tp;  int tl,th;  init_ds18b20();  Write_DS18B20(0xcc);  Write_DS18B20(0x44);  init_ds18b20();  Write_DS18B20(0xcc);  Write_DS18B20(0xbe);  tl= Read_DS18B20();  th= Read_DS18B20();  tp=th<<8|tl;  temp=(tp>>2)*25;  temp_int=(temp/1000&10)*10 (temp/100); } void temp_dis() {  smgBuffer[0]=0xc6;//1100 0110  smgBuffer[1]=0xff;  smgBuffer[2]=0xff;  smgBuffer[3]=0xff;  smgBuffer[4]=font[temp/1000];  smgBuffer[5]=font[temp/100]&0x7f;  smgBuffer[6]=font[temp/10];  smgBuffer[7]=font[temp]; } void temp_set_dis() {  smgBuffer[0]=0x8c;//1000 1100  smgBuffer[1]=0xff;  smgBuffer[2]=0xff;  smgBuffer[3]=0xff;  smgBuffer[4]=0xff;  smgBuffer[5]=0xff;  smgBuffer[6]=font[temp_tb/10];  smgBuffer[7]=font[temp_tb]; }

三、LED.C

因为博主喜欢在这里使用bdata电影中寻址操作led,所以经常这样.c文件将混合一些定时器中断函数。例如,由于调查的重点是矩阵键盘的松开和响应,这里的博客作者更喜欢这个while判断方法,然后直接用中断来打断这里while循环操作,主函数while循环只放矩阵键盘。将其他工作交给定时器中断,以中断循环操作。

#include "led.h" #include "delay.h" #include "buffer.h" #include "delay.h" #include "key.h" #include "onewire.h" #include "iic.h" #include "temp.h" #include "adda.h" #include "timing.h" // extern unsigned char key_sign; // extern unsigned char mode_dis; extern unsigned char mode_set; // extern unsigned char temp_set; extern int temp_int; extern int temp; // extern long int dianya; // unsigned char bdata led=0,out=0; sbit L1=led^0; sbit L2=led^1; sbit L3=led^2; sbit L4=led^3; sbit L5=led^4; sbit L6=led^5; sbit L7=led^6; sbit L8=led^7; sbit relay=out^4; sbit buzz=out^6; // extern unsigned char key_sign; // void led_init() {  P2&=0x1f;  P0=0xff;  P2|=Y4;  P2&=0x1f; } void led_dis() {  P2&=0x1f;  P0=~led;  P2|=Y4;  P2&=0x1f; }  void out_dis() {  P2&=0x1f;  P0=out;  P2|=Y5;  P2&=0x1f; } void mode_define() {  //  if(mode_dis==0)  {    temp_dis();    L2=1;    L3=0;    L4=0;  }  if(mode_dis==1)  {    temp_set_dis();    L2=0;    L3=1;    L4=0;  }  if(mode_dis==2)  {    dac_dis();     L2=0;    L3=0;    L4=1;   }  //  if(mode_set==0)  {   L1=1;   if(temp_int>=temp_set)   {    dianya=500;   }   if(temp_int=4000)   {    dianya=400;   }   if(temp>2000&&temp<4000)   {    dianya=100 (0.15*(temp-2000));   }  } } void T0_irq() interrupt 1 {   DAC();   buffer_dis();   led_dis();   out_dis();   mode_define();   read_temp(); }     

四、ADDA.C

这部分主要是写的ADC和DAC的

#include "adda.h" extern unsigned char smgBuffer[10]; extern unsigned char font[10]; unsigned long int dianya=0; unsigned int dianweiqi; void DAC() {  unsigned char d;  d=dianya*(255/500);  IIC_Start();  IIC_SendByte(0x90);  IIC_WaitAck();  IIC_SendByte(0x40);  IIC_WaitAck();  IIC_SendByte(d);  IIC_WaitAck();  IIC_Stop(); } void ADC() {  unsigned char a;  IIC_Start();  IIC_SendByte(0x90);  IIC_WaitAck();  IIC_SendByte(0x43);  IIC_WaitAck();  IIC_Start();  IIC_SendByte(0x91);  IIC_WaitAck();  IIC_RecByte(); IIC_SendAck(0);
	a=IIC_RecByte();
	dianweiqi=a*(500/255);
	IIC_SendAck(1);
	IIC_Stop(); 
}
void dac_dis()
{
	smgBuffer[0]=0x88;//1000 1000
	smgBuffer[1]=0xff;
	smgBuffer[2]=0xff;
	smgBuffer[3]=0xff;
	smgBuffer[4]=0xff;
	smgBuffer[5]=font[dianya/100%10]&0x7f;
	smgBuffer[6]=font[dianya/10%10];
	smgBuffer[7]=font[dianya%10];
}

五、main.c

#include "led.h"
#include "delay.h"
#include "buffer.h"
#include "delay.h"
#include "key.h"
#include "onewire.h"
#include "iic.h"
#include "temp.h"
#include "adda.h"
#include "timing.h"
void main()
{
	Timer0Init();
	buffer_init();
	led_init();
	while(1)
	{
		key_scan();
	}
}

四、总结

这套题目难度适中,没有明显难点,属于中规中矩的一套赛题.

五、大家关心的客观题

这边我放个链接

这边分享一个我在csdn找到的宝贵博主的博客这边直接分享给大家

最新 2021年 第十二届 蓝桥杯 单片机设计与开发 省赛 客观试题 个人答案_davies*的博客-CSDN博客_第十二届蓝桥杯单片机省赛真题

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章