第十届蓝桥杯省赛真题Word格式文档下载.docx

上传人:b****3 文档编号:17682394 上传时间:2022-12-08 格式:DOCX 页数:12 大小:54.63KB
下载 相关 举报
第十届蓝桥杯省赛真题Word格式文档下载.docx_第1页
第1页 / 共12页
第十届蓝桥杯省赛真题Word格式文档下载.docx_第2页
第2页 / 共12页
第十届蓝桥杯省赛真题Word格式文档下载.docx_第3页
第3页 / 共12页
第十届蓝桥杯省赛真题Word格式文档下载.docx_第4页
第4页 / 共12页
第十届蓝桥杯省赛真题Word格式文档下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

第十届蓝桥杯省赛真题Word格式文档下载.docx

《第十届蓝桥杯省赛真题Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《第十届蓝桥杯省赛真题Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。

第十届蓝桥杯省赛真题Word格式文档下载.docx

以下娜些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);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 书信模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1