蓝桥杯的被圈钱之旅(二):第十二届第一场(电子类)
时间:2023-12-09 14:07:01
一、前言:
我认为这个话题是一个非常简单的话题。看来第一场比赛的难度普遍低于第二场比赛的难度,这个话题没有难度。只有少数闲话。所有数据都上传了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博客_第十二届蓝桥杯单片机省赛真题