第十届蓝桥杯省赛真题Word格式文档下载.docx
《第十届蓝桥杯省赛真题Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《第十届蓝桥杯省赛真题Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
以下娜些V况下.三极管不能正常工作(九
A.Ua=3V,IC=15mAB.Ua=2V,IC=40mA
C-Ua=6V,IC=20mAD.Ua=9V,IC=IOnlA
9)电路如下图所示,输入电压Ul=O.4VfU2=0.8V.计算输出电压UO的值为()•
A.1.2V
C.-6V
B.-1.2V
D.-1.8V
10)下列说法中正确的是()•
A.IAP15F2K61S2电片机可以⅛⅛⅛口实¾
⅛⅛仿真功能•
B.皐片机竟赛板在IO和MM穫式下・均可实现对数码餐和LED指示灯的分别操作.互不形响.
C.对DS1302进行皑字节写按作时,数⅛⅛B7<
+⅛SCLK下呀沿写入DS1302・
D.I2C总践的启动倍号和停止%号.只馳比主奏件;
攵点,
第二部分程序设计试题(70分)
1、基本要求
1.】使用大赛组姿会提供的国信长天单片机竟赛实训平台,完成本试题的程序设计
与调试。
1.2选手在程序设计与调试过程中,可参考组委会後供的“资源濒据包“。
1.3请注意:
程序编写、调试完戒后选手应通过考试系统提交完整、可编译的KQil工程文件。
逸手提交的工程文件应是最终版木,要求Keil工程文件以准考证号(8位数字)命名,工程文件夹内应包含以准考证号命名的h釘文件,该hex文件是成绩评审的依据。
不符合以上文件提交要求的作品将被评为零分或者披酌情相分。
1.4请勿上传与作品工程文件无关的其它文件。
2、竞赛板配置要求
2.1将1AP15F2K61S2单片机内部振荡器频率设定为12MHZ.
2.2键盘工作模式跳线J5配置为BTN独立按键模式,
2.3扩展方式跳线J13配置为IO模式。
2.4请注意,选手需严格按照以上要求配置竞赛板,编写和调试程库,不符合以上配置要求的作品将被评为零分或者被酌情相分。
3、硬件框图
图1系统硬件框图
4、功能描述
4.1基本功能
1)测董竞赛板上电位器RB2谕出的模拟电压信号和NE555模块输出的频率信号,以数码管、LED等外国设备进行数据呈现,。
2)频率测量功能需将竟赛板J3-SIGNAL引脚与P34引脚短接°
(P34与SICNAL的短接可以使用竟奏板上超声/红外切换等与本试题功能娶求无关的况线幡完成)。
3)使用PCF8591测量电位譽RB2的输出电压,并根据试题要求通过其DAC功能输出该电压值。
4)电压、频率数据刷新时间要求
•电压数据刷新时间≤0.5秒。
•频率数据刷新时间Wl秋。
5)电压、频率数据测董范圉要求
•电压数据测量范囤:
电位器RB2输出的最小电压值到最大电压值。
•频率数据测量范囤:
NE555模块输出的最低频率到最高频率值。
4.2显示功能
1)频率显示界面
频率显示界面如图2俞示,显示内容包括提示符F和频率值,频率数据单位为Hz。
F
8
ε
O
提示符
熄灭
疾率:
600OHZ
图2频率测量显示界面
备注:
如上图所示,频率数据显示使用6位数码管,当显示的数据长度不足6位时,未便用到的数码管位应熄灭。
2)电压显示界面
电压显示界面如图3所示,显示内容包括提示符U和电位器RB2输出的电压值,电压测量结果保留小数点后两位有效数字。
丨LJ8
电压值:
3.41V
图3电压测最显示界面
4.3按钱功能
D按键功能说明
•S4:
定义为“显示界面切换”按犍,按下S4按键,切换选择频率显示界面和电压显示界面,按键S4切换模式如下图侨示:
S4按下返冋电压测量卑面—<电压测量)一进入爲爲果而-K頻鞫懂)—
•S5:
定义为PCF8591DAC“输出模式切换”按键,按下S5,DAC输出电压跟随电位器RB2输出电压V越变化而变化,保持与YlIw电压值一致;
再次按下S5,DAC输出因定电压2.OV,不再跟随电位器RB2输出电压变化。
按键S5工作模式如下图所示:
$5按下
{22Y)—S5按T→[λDAC=ViKJ
•S6:
定义为“LED指示灯功能控制”按铤,按下S6按犍,关闭或打开
LED指示灯指示功能。
按键S6工作模式如下图所示:
S6按下
XLED功能启用JS6按下一》£
圧0功能禁用〕
关闭LED指示灯功能状态下,所有LED指示灯熄灭。
•S7:
定义为“数码管显示功能控制”按傩,按下S7按镀,关闭或打
开数码管显示功能。
按镀S7工作模式如下图俞示:
S7按下
关闭数码管状态下,所有数码管熄灭。
4.4LED指示灯功能
1)电压测量坊能指示:
Ll点亮,L2熄灭
2)频率测量功能指示:
Ll熄灭,L2点竟
电位器RB2输出电压(VKB)
L3指示灯状态
<
L5V
1.5V≤<
2.5V
点亮
2.5V≤V∞<
3.5V
Vre2$3.5V
4)指示灯L4功能:
41号烦車(Fenr)
L4指示灯状态
Fa<
lKHz
IKHZWFWV5KHz
5KHz≤Fα,1<
10KHZ
Fa$10KHZ
5)指示灯L5功能:
DAC输出固定电压(2・OV)时,L5熄灭,DAC输出电压版
随RB2电位器输出电压变化时,L5点亮。
6)本试题未涉及的LED指示灯应处于熄灭状态。
4.5初始状态说明
1)初始状态上电默认处于电压测量状态,数码管显示和LED指示功能启用。
2)初始状态上电默认PCF8591DAC芯片输出固定电压值2.OVo
参考代码:
#include"
STC15F2K60S2.H"
MAIN.H"
HAREWARE.H"
DIG.H"
I2C.H"
DELAY.H"
LED.H"
sbits4=P3^3;
//按键S4sbits5=P3^2;
//按键S5sbits6=P3^1;
//按键S6sbits7=P3^0;
//按键S7unsignedintPCF_NUM=0;
//电压值
unsignedcharled_mode=0xff;
//LED灯点亮模式
unsignedintf_num=0;
//频率数值
unsignedcharj=0;
//频率测量里面的等待中断标志
unsignedchardiya_num=0;
//储存模数转换返回的电压值unsignedchartimer=0;
bits4_mode=1;
//1为电压测量模式,0为频率测量模式
bits5_mode=0;
//1
为输出2.0v电压,为0跟随PCF8591三通道电压输出
bitgensui=0;
//0为不跟随电压输出,1为跟随电压输出
unsignedcharuseg_num[]={0x3e,0,0,0,0,0,0,0};
//电压数值数组unsignedcharfseg_num[]={0x71,0,0,0,0,0,0,0};
//频率数值数组
voidkey_scan();
//按键扫描函数原型
unsignedchardian_ya_ce_liang();
//电压测量函数原型voidTimerInit();
//定时计数初始化函数原型
函数************************************************
voidmain()//主函数
{
HAREWARE_init();
//关闭外部设备DIG_init();
//数码管初始化LED_init();
//LED灯初始化TimerInit();
//定时器1初始化P20=1;
while
(1)//等待中断
key_scan();
//按键扫描
if(~s5_mode)//判断是否是电压跟随模式
PCF_DA(103);
//没有跟随gensui=0;
//没有跟随
}
else
gensui=1;
//跟随电压}
if(s4_mode)//判断是否为电压测量模式
diya_num=dian_ya_ce_liang();
led_mode=0xfe;
//电压测量模式指示灯亮
(diya_num*
if(((diya_num*0.01953125>
=1.5)&
&
(diya_num*0.01953125<
2.5))||
0.01953125>
=3.5))
led_mode&
=0xfb;
//满足条件第三个指示灯亮
if(gensui)
=0xef;
//电压跟随第五个指示灯亮
PCF_NUM=diya_num*1.953125;
//变成十进制的数字,把小数乘一百useg_num[5]=DIG_CODE[PCF_NUM/100];
//百位数字
PCF_NUM=PCF_NUM%100;
useg_num[6]=DIG_CODE[PCF_NUM/10];
//十位数字
PCF_NUM%=10;
useg_num[7]=DIG_CODE[PCF_NUM];
//个位数字LED_show(led_mode);
//LED等显示DIG_show(useg_num);
//数码管显示if(gensui)//判断是否是电压跟随模式
PCF_DA(diya_num);
else//频率测量模式
TR1=1;
//开始计时
TR0=1;
//开始计数
j=1;
//等待中断标志置1
while(j);
//等待中断
////////////////////////////////////////////////////
////////////////////////////////////////////////////voidTimerInit()//定时计数器初始化函数
AUXR&
=0x3F;
//12分频
TMOD&
=0x00;
//TMOD(定时/计数器模式寄存器)清零
TMOD|=0x15;
//T0设置为模式1,计数;
T1设置为模式1,定时TH0=TL0=0;
//计数器清零
TL1=0xF0;
//设置定时初值
TH1=0xD8;
EA=1;
//开总中断
ET1=1;
//开定时器1中断
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////unsignedchardian_ya_ce_liang()
returnPCF_AD(3);
//返回模数转换值
////////////////////////////////////////////////////////////////////////////////////////////////////////////
voidkey_scan()//键盘扫描函数
P3|=0x0f;
//P3低4位设为全1if(~s4)//判断S4按键
{delay1ms(5);
//按键消抖if(~s4)//判断S4按键{
s4_mode=~s4_mode;
if(~s5)//判断S5按键
//按键消抖if(~s5)//判断S5按键{
if(s4_mode)//如果在电压测量模式则改变电压跟随标志{
s5_mode=~s5_mode;
//s5_mode取反}
if(~s6)//判断S6按键
delay1ms(5);
//按键消抖
s6_mode=~s6_mode;
if(~s6_mode){
LED_init();
//关LED灯}
if(~s7)//判断S7按键
//按键消抖if(~s7)//判断S7按键{
s7_mode=~s7_mode;
//取反if(~s7_mode)//如果数码管开关标志为0,关数码管显示{
DIG_init();
//关数码管
while(~s4||~s5||~s6||~s7)//松手检测
if(s4_mode)//如果为电压测量模式,数码管显示电压值,防止出现数码管黑屏现象{
DIG_show(useg_num);
//数码管显示电压测量值LED_show(led_mode);
//LED显示电压测量模式
}else//如果为频率测量模式,数码管显示频率值,防止出现数码管黑屏现象
DIG_show(fseg_num);
//数码管显示频率测量值
LED_show(led_mode);
//LED显示频率测量模式
/*//////////////////////////////////////////
///////////定时器1中断函数/////////////////
//////////////////////////////////////////*/
voidT1()interrupt3//定时器1中断函数
unsignedchari=0;
unsignedintf_num2=0;
P20=~P20;
TR0=0;
//停止计数
TR1=0;
//停止定时
//设置定时初值
//设置定时初值timer++;
//计数器加1j=0;
//等待中断标志清零if(timer==20)
f_num=(TH0*256+TL0)*5;
//计算频率timer=0;
TL0=TH0=0;
//计数器清零for(i=7;
i>
2;
i--)//重新初始化频率数值数组{
fseg_num[i]=0;
//除数组的第一位和第二位其他的初始化为0
if((f_num>
=1000&
f_num<
5000)||(f_num>
=10000)){
led_mode=0XF5;
//满足条件led4亮}else
{led_mode=0XFD;
for(i=7;
2&
f_num!
=0;
i--){
fseg_num[i]=DIG_CODE[f_num%10];
f_num/=10;
DIG_show(fseg_num);